/* * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h" #include "WebEventConversion.h" #include "WebEvent.h" namespace WebKit { class WebKit2PlatformMouseEvent : public WebCore::PlatformMouseEvent { public: WebKit2PlatformMouseEvent(const WebMouseEvent& webEvent) { switch (webEvent.type()) { case WebEvent::MouseDown: m_eventType = WebCore::MouseEventPressed; break; case WebEvent::MouseUp: m_eventType = WebCore::MouseEventReleased; break; case WebEvent::MouseMove: m_eventType = WebCore::MouseEventMoved; break; default: ASSERT_NOT_REACHED(); } switch (webEvent.button()) { case WebMouseEvent::NoButton: m_button = WebCore::NoButton; break; case WebMouseEvent::LeftButton: m_button = WebCore::LeftButton; break; case WebMouseEvent::MiddleButton: m_button = WebCore::MiddleButton; break; case WebMouseEvent::RightButton: m_button = WebCore::RightButton; break; default: ASSERT_NOT_REACHED(); } m_position = webEvent.position(); m_globalPosition = webEvent.globalPosition(); m_clickCount = webEvent.clickCount(); m_timestamp = webEvent.timestamp(); m_shiftKey = webEvent.shiftKey(); m_ctrlKey = webEvent.controlKey(); m_altKey = webEvent.altKey(); m_metaKey = webEvent.metaKey(); m_modifierFlags = 0; if (m_shiftKey) m_modifierFlags |= WebEvent::ShiftKey; if (m_ctrlKey) m_modifierFlags |= WebEvent::ControlKey; if (m_altKey) m_modifierFlags |= WebEvent::AltKey; if (m_metaKey) m_modifierFlags |= WebEvent::MetaKey; #if PLATFORM(WIN) m_didActivateWebView = webEvent.didActivateWebView(); #endif } }; WebCore::PlatformMouseEvent platform(const WebMouseEvent& webEvent) { return WebKit2PlatformMouseEvent(webEvent); } class WebKit2PlatformWheelEvent : public WebCore::PlatformWheelEvent { public: WebKit2PlatformWheelEvent(const WebWheelEvent& webEvent) { m_position = webEvent.position(); m_globalPosition = webEvent.globalPosition(); m_deltaX = webEvent.delta().width(); m_deltaY = webEvent.delta().height(); m_wheelTicksX = webEvent.wheelTicks().width(); m_wheelTicksY = webEvent.wheelTicks().height(); m_granularity = (webEvent.granularity() == WebWheelEvent::ScrollByPageWheelEvent) ? WebCore::ScrollByPageWheelEvent : WebCore::ScrollByPixelWheelEvent; m_shiftKey = webEvent.shiftKey(); m_ctrlKey = webEvent.controlKey(); m_altKey = webEvent.altKey(); m_metaKey = webEvent.metaKey(); #if PLATFORM(MAC) m_phase = static_cast<WebCore::PlatformWheelEventPhase>(webEvent.phase()); m_momentumPhase = static_cast<WebCore::PlatformWheelEventPhase>(webEvent.momentumPhase()); m_hasPreciseScrollingDeltas = webEvent.hasPreciseScrollingDeltas(); m_timestamp = webEvent.timestamp(); #endif } }; WebCore::PlatformWheelEvent platform(const WebWheelEvent& webEvent) { return WebKit2PlatformWheelEvent(webEvent); } class WebKit2PlatformKeyboardEvent : public WebCore::PlatformKeyboardEvent { public: WebKit2PlatformKeyboardEvent(const WebKeyboardEvent& webEvent) { switch (webEvent.type()) { case WebEvent::KeyDown: m_type = PlatformKeyboardEvent::KeyDown; break; case WebEvent::KeyUp: m_type = PlatformKeyboardEvent::KeyUp; break; case WebEvent::RawKeyDown: m_type = PlatformKeyboardEvent::RawKeyDown; break; case WebEvent::Char: m_type = PlatformKeyboardEvent::Char; break; default: ASSERT_NOT_REACHED(); } m_text = webEvent.text(); m_unmodifiedText = webEvent.unmodifiedText(); m_keyIdentifier = webEvent.keyIdentifier(); m_windowsVirtualKeyCode = webEvent.windowsVirtualKeyCode(); m_nativeVirtualKeyCode = webEvent.nativeVirtualKeyCode(); m_autoRepeat = webEvent.isAutoRepeat(); m_isKeypad = webEvent.isKeypad(); m_shiftKey = webEvent.shiftKey(); m_ctrlKey = webEvent.controlKey(); m_altKey = webEvent.altKey(); m_metaKey = webEvent.metaKey(); #if PLATFORM(WIN) // FIXME: We should make m_isSystemKey available (and false) on all platforms // to avoid this #define. m_isSystemKey = webEvent.isSystemKey(); #endif } }; WebCore::PlatformKeyboardEvent platform(const WebKeyboardEvent& webEvent) { return WebKit2PlatformKeyboardEvent(webEvent); } #if ENABLE(GESTURE_EVENTS) class WebKit2PlatformGestureEvent : public WebCore::PlatformGestureEvent { public: WebKit2PlatformGestureEvent(const WebGestureEvent& webEvent) { switch (webEvent.type()) { case WebEvent::GestureScrollBegin: m_type = PlatformGestureEvent::ScrollBeginType; break; case WebEvent::GestureScrollEnd: m_type = PlatformGestureEvent::ScrollEndType; break; default: ASSERT_NOT_REACHED(); } m_position = webEvent.position(); m_globalPosition = webEvent.globalPosition(); m_timestamp = webEvent.timestamp(); } }; WebCore::PlatformGestureEvent platform(const WebGestureEvent& webEvent) { return WebKit2PlatformGestureEvent(webEvent); } #endif #if ENABLE(TOUCH_EVENTS) class WebKit2PlatformTouchPoint : public WebCore::PlatformTouchPoint { public: WebKit2PlatformTouchPoint(const WebPlatformTouchPoint& webTouchPoint) { m_id = webTouchPoint.id(); switch (webTouchPoint.state()) { case WebPlatformTouchPoint::TouchReleased: m_state = PlatformTouchPoint::TouchReleased; break; case WebPlatformTouchPoint::TouchPressed: m_state = PlatformTouchPoint::TouchPressed; break; case WebPlatformTouchPoint::TouchMoved: m_state = PlatformTouchPoint::TouchMoved; break; case WebPlatformTouchPoint::TouchStationary: m_state = PlatformTouchPoint::TouchStationary; break; case WebPlatformTouchPoint::TouchCancelled: m_state = PlatformTouchPoint::TouchCancelled; break; default: ASSERT_NOT_REACHED(); } m_screenPos = webTouchPoint.screenPosition(); m_pos = webTouchPoint.position(); } }; class WebKit2PlatformTouchEvent : public WebCore::PlatformTouchEvent { public: WebKit2PlatformTouchEvent(const WebTouchEvent& webEvent) { switch (webEvent.type()) { case WebEvent::TouchStart: m_type = WebCore::TouchStart; break; case WebEvent::TouchMove: m_type = WebCore::TouchMove; break; case WebEvent::TouchEnd: m_type = WebCore::TouchEnd; break; case WebEvent::TouchCancel: m_type = WebCore::TouchCancel; break; default: ASSERT_NOT_REACHED(); } for (int i = 0; i < webEvent.touchPoints().size(); ++i) m_touchPoints.append(WebKit2PlatformTouchPoint(webEvent.touchPoints().at(i))); m_ctrlKey = webEvent.controlKey(); m_altKey = webEvent.altKey(); m_shiftKey = webEvent.shiftKey(); m_metaKey = webEvent.metaKey(); } }; WebCore::PlatformTouchEvent platform(const WebTouchEvent& webEvent) { return WebKit2PlatformTouchEvent(webEvent); } #endif } // namespace WebKit