diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-09-13 12:51:20 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-19 20:50:05 +0200 |
commit | d441d6f39bb846989d95bcf5caf387b42414718d (patch) | |
tree | e367e64a75991c554930278175d403c072de6bb8 /Source/WebKit/chromium/src/WebInputEventConversion.cpp | |
parent | 0060b2994c07842f4c59de64b5e3e430525c4b90 (diff) | |
download | qtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz |
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit.
Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebKit/chromium/src/WebInputEventConversion.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/WebInputEventConversion.cpp | 633 |
1 files changed, 0 insertions, 633 deletions
diff --git a/Source/WebKit/chromium/src/WebInputEventConversion.cpp b/Source/WebKit/chromium/src/WebInputEventConversion.cpp deleted file mode 100644 index dcde40f32..000000000 --- a/Source/WebKit/chromium/src/WebInputEventConversion.cpp +++ /dev/null @@ -1,633 +0,0 @@ -/* - * Copyright (C) 2009 Google 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: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT - * OWNER OR 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 "WebInputEventConversion.h" - -#include "EventNames.h" -#include "GestureEvent.h" -#include "KeyboardCodes.h" -#include "KeyboardEvent.h" -#include "MouseEvent.h" -#include "PlatformKeyboardEvent.h" -#include "PlatformMouseEvent.h" -#include "PlatformWheelEvent.h" -#include "RenderObject.h" -#include "ScrollView.h" -#include "Touch.h" -#include "TouchEvent.h" -#include "TouchList.h" -#include "WebInputEvent.h" -#include "WheelEvent.h" -#include "Widget.h" - -using namespace WebCore; - -namespace WebKit { - -static const double millisPerSecond = 1000.0; - -// MakePlatformMouseEvent ----------------------------------------------------- - -PlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMouseEvent& e) -{ - // FIXME: widget is always toplevel, unless it's a popup. We may be able - // to get rid of this once we abstract popups into a WebKit API. - m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y)); - m_globalPosition = IntPoint(e.globalX, e.globalY); -#if ENABLE(POINTER_LOCK) - m_movementDelta = IntPoint(e.movementX, e.movementY); -#endif - m_button = static_cast<MouseButton>(e.button); - - m_modifiers = 0; - if (e.modifiers & WebInputEvent::ShiftKey) - m_modifiers |= PlatformEvent::ShiftKey; - if (e.modifiers & WebInputEvent::ControlKey) - m_modifiers |= PlatformEvent::CtrlKey; - if (e.modifiers & WebInputEvent::AltKey) - m_modifiers |= PlatformEvent::AltKey; - if (e.modifiers & WebInputEvent::MetaKey) - m_modifiers |= PlatformEvent::MetaKey; - - m_modifierFlags = e.modifiers; - m_timestamp = e.timeStampSeconds; - m_clickCount = e.clickCount; - - switch (e.type) { - case WebInputEvent::MouseMove: - case WebInputEvent::MouseLeave: // synthesize a move event - m_type = PlatformEvent::MouseMoved; - break; - - case WebInputEvent::MouseDown: - m_type = PlatformEvent::MousePressed; - break; - - case WebInputEvent::MouseUp: - m_type = PlatformEvent::MouseReleased; - break; - - default: - ASSERT_NOT_REACHED(); - } -} - -// PlatformWheelEventBuilder -------------------------------------------------- - -PlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMouseWheelEvent& e) -{ - m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y)); - m_globalPosition = IntPoint(e.globalX, e.globalY); - m_deltaX = e.deltaX; - m_deltaY = e.deltaY; - m_wheelTicksX = e.wheelTicksX; - m_wheelTicksY = e.wheelTicksY; - m_granularity = e.scrollByPage ? - ScrollByPageWheelEvent : ScrollByPixelWheelEvent; - - m_type = PlatformEvent::Wheel; - - m_modifiers = 0; - if (e.modifiers & WebInputEvent::ShiftKey) - m_modifiers |= PlatformEvent::ShiftKey; - if (e.modifiers & WebInputEvent::ControlKey) - m_modifiers |= PlatformEvent::CtrlKey; - if (e.modifiers & WebInputEvent::AltKey) - m_modifiers |= PlatformEvent::AltKey; - if (e.modifiers & WebInputEvent::MetaKey) - m_modifiers |= PlatformEvent::MetaKey; - - m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas; -#if OS(DARWIN) - m_phase = static_cast<WebCore::PlatformWheelEventPhase>(e.phase); - m_momentumPhase = static_cast<WebCore::PlatformWheelEventPhase>(e.momentumPhase); - m_timestamp = e.timeStampSeconds; - m_scrollCount = 0; - m_unacceleratedScrollingDeltaX = e.deltaX; - m_unacceleratedScrollingDeltaY = e.deltaY; -#endif -} - -// PlatformGestureEventBuilder -------------------------------------------------- - -#if ENABLE(GESTURE_EVENTS) -PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const WebGestureEvent& e) -{ - switch (e.type) { - case WebInputEvent::GestureScrollBegin: - m_type = PlatformEvent::GestureScrollBegin; - break; - case WebInputEvent::GestureScrollEnd: - m_type = PlatformEvent::GestureScrollEnd; - break; - case WebInputEvent::GestureScrollUpdate: - m_type = PlatformEvent::GestureScrollUpdate; - m_deltaX = e.data.scrollUpdate.deltaX; - m_deltaY = e.data.scrollUpdate.deltaY; - break; - case WebInputEvent::GestureTap: - m_type = PlatformEvent::GestureTap; - m_area = IntSize(e.data.tap.width, e.data.tap.height); - // FIXME: PlatformGestureEvent deltaX is overloaded - wkb.ug/93123 - m_deltaX = static_cast<int>(e.data.tap.tapCount); - break; - case WebInputEvent::GestureTapDown: - m_type = PlatformEvent::GestureTapDown; - m_area = IntSize(e.data.tapDown.width, e.data.tapDown.height); - break; - case WebInputEvent::GestureTapCancel: - m_type = PlatformEvent::GestureTapDownCancel; - break; - case WebInputEvent::GestureDoubleTap: - m_type = PlatformEvent::GestureDoubleTap; - break; - case WebInputEvent::GestureTwoFingerTap: - m_type = PlatformEvent::GestureTwoFingerTap; - m_area = IntSize(e.data.twoFingerTap.firstFingerWidth, e.data.twoFingerTap.firstFingerHeight); - break; - case WebInputEvent::GestureLongPress: - m_type = PlatformEvent::GestureLongPress; - m_area = IntSize(e.data.longPress.width, e.data.longPress.height); - break; - case WebInputEvent::GestureLongTap: - m_type = PlatformEvent::GestureLongTap; - m_area = IntSize(e.data.longPress.width, e.data.longPress.height); - break; - case WebInputEvent::GesturePinchBegin: - m_type = PlatformEvent::GesturePinchBegin; - break; - case WebInputEvent::GesturePinchEnd: - m_type = PlatformEvent::GesturePinchEnd; - break; - case WebInputEvent::GesturePinchUpdate: - m_type = PlatformEvent::GesturePinchUpdate; - // FIXME: PlatformGestureEvent deltaX is overloaded - wkb.ug/93123 - m_deltaX = e.data.pinchUpdate.scale; - break; - default: - ASSERT_NOT_REACHED(); - } - m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y)); - m_globalPosition = IntPoint(e.globalX, e.globalY); - m_timestamp = e.timeStampSeconds; - - m_modifiers = 0; - if (e.modifiers & WebInputEvent::ShiftKey) - m_modifiers |= PlatformEvent::ShiftKey; - if (e.modifiers & WebInputEvent::ControlKey) - m_modifiers |= PlatformEvent::CtrlKey; - if (e.modifiers & WebInputEvent::AltKey) - m_modifiers |= PlatformEvent::AltKey; - if (e.modifiers & WebInputEvent::MetaKey) - m_modifiers |= PlatformEvent::MetaKey; -} -#endif - -// MakePlatformKeyboardEvent -------------------------------------------------- - -inline PlatformEvent::Type toPlatformKeyboardEventType(WebInputEvent::Type type) -{ - switch (type) { - case WebInputEvent::KeyUp: - return PlatformEvent::KeyUp; - case WebInputEvent::KeyDown: - return PlatformEvent::KeyDown; - case WebInputEvent::RawKeyDown: - return PlatformEvent::RawKeyDown; - case WebInputEvent::Char: - return PlatformEvent::Char; - default: - ASSERT_NOT_REACHED(); - } - return PlatformEvent::KeyDown; -} - -PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder(const WebKeyboardEvent& e) -{ - m_type = toPlatformKeyboardEventType(e.type); - m_text = String(e.text); - m_unmodifiedText = String(e.unmodifiedText); - m_keyIdentifier = String(e.keyIdentifier); - m_autoRepeat = (e.modifiers & WebInputEvent::IsAutoRepeat); - m_nativeVirtualKeyCode = e.nativeKeyCode; - m_isKeypad = (e.modifiers & WebInputEvent::IsKeyPad); - m_isSystemKey = e.isSystemKey; - - m_modifiers = 0; - if (e.modifiers & WebInputEvent::ShiftKey) - m_modifiers |= PlatformEvent::ShiftKey; - if (e.modifiers & WebInputEvent::ControlKey) - m_modifiers |= PlatformEvent::CtrlKey; - if (e.modifiers & WebInputEvent::AltKey) - m_modifiers |= PlatformEvent::AltKey; - if (e.modifiers & WebInputEvent::MetaKey) - m_modifiers |= PlatformEvent::MetaKey; - - // FIXME: PlatformKeyboardEvents expect a locational version of the keycode (e.g. VK_LSHIFT - // instead of VK_SHIFT). This should be changed so the location/keycode are stored separately, - // as in other places in the code. - m_windowsVirtualKeyCode = e.windowsKeyCode; - if (e.windowsKeyCode == VK_SHIFT) { - if (e.modifiers & WebInputEvent::IsLeft) - m_windowsVirtualKeyCode = VK_LSHIFT; - else if (e.modifiers & WebInputEvent::IsRight) - m_windowsVirtualKeyCode = VK_RSHIFT; - } else if (e.windowsKeyCode == VK_CONTROL) { - if (e.modifiers & WebInputEvent::IsLeft) - m_windowsVirtualKeyCode = VK_LCONTROL; - else if (e.modifiers & WebInputEvent::IsRight) - m_windowsVirtualKeyCode = VK_RCONTROL; - } else if (e.windowsKeyCode == VK_MENU) { - if (e.modifiers & WebInputEvent::IsLeft) - m_windowsVirtualKeyCode = VK_LMENU; - else if (e.modifiers & WebInputEvent::IsRight) - m_windowsVirtualKeyCode = VK_RMENU; - } - -} - -void PlatformKeyboardEventBuilder::setKeyType(Type type) -{ - // According to the behavior of Webkit in Windows platform, - // we need to convert KeyDown to RawKeydown and Char events - // See WebKit/WebKit/Win/WebView.cpp - ASSERT(m_type == KeyDown); - ASSERT(type == RawKeyDown || type == Char); - m_type = type; - - if (type == RawKeyDown) { - m_text = String(); - m_unmodifiedText = String(); - } else { - m_keyIdentifier = String(); - m_windowsVirtualKeyCode = 0; - } -} - -// Please refer to bug http://b/issue?id=961192, which talks about Webkit -// keyboard event handling changes. It also mentions the list of keys -// which don't have associated character events. -bool PlatformKeyboardEventBuilder::isCharacterKey() const -{ - switch (windowsVirtualKeyCode()) { - case VKEY_BACK: - case VKEY_ESCAPE: - return false; - } - return true; -} - -#if ENABLE(TOUCH_EVENTS) -inline PlatformEvent::Type toPlatformTouchEventType(const WebInputEvent::Type type) -{ - switch (type) { - case WebInputEvent::TouchStart: - return PlatformEvent::TouchStart; - case WebInputEvent::TouchMove: - return PlatformEvent::TouchMove; - case WebInputEvent::TouchEnd: - return PlatformEvent::TouchEnd; - case WebInputEvent::TouchCancel: - return PlatformEvent::TouchCancel; - default: - ASSERT_NOT_REACHED(); - } - return PlatformEvent::TouchStart; -} - -inline PlatformTouchPoint::State toPlatformTouchPointState(const WebTouchPoint::State state) -{ - switch (state) { - case WebTouchPoint::StateReleased: - return PlatformTouchPoint::TouchReleased; - case WebTouchPoint::StatePressed: - return PlatformTouchPoint::TouchPressed; - case WebTouchPoint::StateMoved: - return PlatformTouchPoint::TouchMoved; - case WebTouchPoint::StateStationary: - return PlatformTouchPoint::TouchStationary; - case WebTouchPoint::StateCancelled: - return PlatformTouchPoint::TouchCancelled; - case WebTouchPoint::StateUndefined: - ASSERT_NOT_REACHED(); - } - return PlatformTouchPoint::TouchReleased; -} - -inline WebTouchPoint::State toWebTouchPointState(const AtomicString& type) -{ - if (type == eventNames().touchendEvent) - return WebTouchPoint::StateReleased; - if (type == eventNames().touchcancelEvent) - return WebTouchPoint::StateCancelled; - if (type == eventNames().touchstartEvent) - return WebTouchPoint::StatePressed; - if (type == eventNames().touchmoveEvent) - return WebTouchPoint::StateMoved; - return WebTouchPoint::StateUndefined; -} - -PlatformTouchPointBuilder::PlatformTouchPointBuilder(Widget* widget, const WebTouchPoint& point) -{ - m_id = point.id; - m_state = toPlatformTouchPointState(point.state); - m_pos = widget->convertFromContainingWindow(point.position); - m_screenPos = point.screenPosition; - m_radiusY = point.radiusY; - m_radiusX = point.radiusX; - m_rotationAngle = point.rotationAngle; - m_force = point.force; -} - -PlatformTouchEventBuilder::PlatformTouchEventBuilder(Widget* widget, const WebTouchEvent& event) -{ - m_type = toPlatformTouchEventType(event.type); - - m_modifiers = 0; - if (event.modifiers & WebInputEvent::ShiftKey) - m_modifiers |= PlatformEvent::ShiftKey; - if (event.modifiers & WebInputEvent::ControlKey) - m_modifiers |= PlatformEvent::CtrlKey; - if (event.modifiers & WebInputEvent::AltKey) - m_modifiers |= PlatformEvent::AltKey; - if (event.modifiers & WebInputEvent::MetaKey) - m_modifiers |= PlatformEvent::MetaKey; - - m_timestamp = event.timeStampSeconds; - - for (unsigned i = 0; i < event.touchesLength; ++i) - m_touchPoints.append(PlatformTouchPointBuilder(widget, event.touches[i])); -} -#endif - -static int getWebInputModifiers(const UIEventWithKeyState& event) -{ - int modifiers = 0; - if (event.ctrlKey()) - modifiers |= WebInputEvent::ControlKey; - if (event.shiftKey()) - modifiers |= WebInputEvent::ShiftKey; - if (event.altKey()) - modifiers |= WebInputEvent::AltKey; - if (event.metaKey()) - modifiers |= WebInputEvent::MetaKey; - return modifiers; -} - -static IntPoint convertLocationForRenderObject(const LayoutPoint& location, const WebCore::RenderObject& renderObject) -{ - return roundedIntPoint(renderObject.absoluteToLocal(location, UseTransforms | SnapOffsetForTransforms)); -} - -static void updateWebMouseEventFromWebCoreMouseEvent(const MouseRelatedEvent& event, const Widget& widget, const WebCore::RenderObject& renderObject, WebMouseEvent& webEvent) -{ - webEvent.timeStampSeconds = event.timeStamp() / millisPerSecond; - webEvent.modifiers = getWebInputModifiers(event); - - ScrollView* view = widget.parent(); - IntPoint windowPoint = view->contentsToWindow(IntPoint(event.absoluteLocation().x(), event.absoluteLocation().y())); - webEvent.globalX = event.screenX(); - webEvent.globalY = event.screenY(); - webEvent.windowX = windowPoint.x(); - webEvent.windowY = windowPoint.y(); - IntPoint localPoint = convertLocationForRenderObject(event.absoluteLocation(), renderObject); - webEvent.x = localPoint.x(); - webEvent.y = localPoint.y(); -} - -WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const MouseEvent& event) -{ - if (event.type() == eventNames().mousemoveEvent) - type = WebInputEvent::MouseMove; - else if (event.type() == eventNames().mouseoutEvent) - type = WebInputEvent::MouseLeave; - else if (event.type() == eventNames().mouseoverEvent) - type = WebInputEvent::MouseEnter; - else if (event.type() == eventNames().mousedownEvent) - type = WebInputEvent::MouseDown; - else if (event.type() == eventNames().mouseupEvent) - type = WebInputEvent::MouseUp; - else if (event.type() == eventNames().contextmenuEvent) - type = WebInputEvent::ContextMenu; - else - return; // Skip all other mouse events. - - updateWebMouseEventFromWebCoreMouseEvent(event, *widget, *renderObject, *this); - - switch (event.button()) { - case LeftButton: - button = WebMouseEvent::ButtonLeft; - break; - case MiddleButton: - button = WebMouseEvent::ButtonMiddle; - break; - case RightButton: - button = WebMouseEvent::ButtonRight; - break; - } - if (event.buttonDown()) { - switch (event.button()) { - case LeftButton: - modifiers |= WebInputEvent::LeftButtonDown; - break; - case MiddleButton: - modifiers |= WebInputEvent::MiddleButtonDown; - break; - case RightButton: - modifiers |= WebInputEvent::RightButtonDown; - break; - } - } -#if ENABLE(POINTER_LOCK) - movementX = event.webkitMovementX(); - movementY = event.webkitMovementY(); -#endif - clickCount = event.detail(); -} - -WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const TouchEvent& event) -{ - if (event.touches()->length() != 1) { - if (event.touches()->length() || event.type() != eventNames().touchendEvent || event.changedTouches()->length() != 1) - return; - } - - const Touch* touch = event.touches()->length() == 1 ? event.touches()->item(0) : event.changedTouches()->item(0); - if (touch->identifier()) - return; - - if (event.type() == eventNames().touchstartEvent) - type = MouseDown; - else if (event.type() == eventNames().touchmoveEvent) - type = MouseMove; - else if (event.type() == eventNames().touchendEvent) - type = MouseUp; - else - return; - - updateWebMouseEventFromWebCoreMouseEvent(event, *widget, *renderObject, *this); - - button = WebMouseEvent::ButtonLeft; - modifiers |= WebInputEvent::LeftButtonDown; - clickCount = (type == MouseDown || type == MouseUp); - - IntPoint localPoint = convertLocationForRenderObject(LayoutPoint(touch->pageX(), touch->pageY()), *renderObject); - x = localPoint.x(); - y = localPoint.y(); -} - -WebMouseWheelEventBuilder::WebMouseWheelEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const WheelEvent& event) -{ - if (event.type() != eventNames().mousewheelEvent) - return; - type = WebInputEvent::MouseWheel; - updateWebMouseEventFromWebCoreMouseEvent(event, *widget, *renderObject, *this); - deltaX = static_cast<float>(event.rawDeltaX()); - deltaY = static_cast<float>(event.rawDeltaY()); - // The 120 is from WheelEvent::initWheelEvent(). - wheelTicksX = static_cast<float>(event.wheelDeltaX()) / 120; - wheelTicksY = static_cast<float>(event.wheelDeltaY()) / 120; - scrollByPage = event.granularity() == WheelEvent::Page; -} - -WebKeyboardEventBuilder::WebKeyboardEventBuilder(const KeyboardEvent& event) -{ - if (event.type() == eventNames().keydownEvent) - type = KeyDown; - else if (event.type() == eventNames().keyupEvent) - type = WebInputEvent::KeyUp; - else if (event.type() == eventNames().keypressEvent) - type = WebInputEvent::Char; - else - return; // Skip all other keyboard events. - - modifiers = getWebInputModifiers(event); - if (event.keyLocation() == KeyboardEvent::DOM_KEY_LOCATION_NUMPAD) - modifiers |= WebInputEvent::IsKeyPad; - else if (event.keyLocation() == KeyboardEvent::DOM_KEY_LOCATION_LEFT) - modifiers |= WebInputEvent::IsLeft; - else if (event.keyLocation() == KeyboardEvent::DOM_KEY_LOCATION_RIGHT) - modifiers |= WebInputEvent::IsRight; - - timeStampSeconds = event.timeStamp() / millisPerSecond; - windowsKeyCode = event.keyCode(); - - // The platform keyevent does not exist if the event was created using - // initKeyboardEvent. - if (!event.keyEvent()) - return; - nativeKeyCode = event.keyEvent()->nativeVirtualKeyCode(); - unsigned numberOfCharacters = std::min(event.keyEvent()->text().length(), static_cast<unsigned>(textLengthCap)); - for (unsigned i = 0; i < numberOfCharacters; ++i) { - text[i] = event.keyEvent()->text()[i]; - unmodifiedText[i] = event.keyEvent()->unmodifiedText()[i]; - } - memcpy(keyIdentifier, event.keyIdentifier().ascii().data(), event.keyIdentifier().length()); -} - -#if ENABLE(TOUCH_EVENTS) - -static void addTouchPoints(const AtomicString& touchType, TouchList* touches, WebTouchPoint* touchPoints, unsigned* touchPointsLength, const WebCore::RenderObject* renderObject) -{ - unsigned numberOfTouches = std::min(touches->length(), static_cast<unsigned>(WebTouchEvent::touchesLengthCap)); - for (unsigned i = 0; i < numberOfTouches; ++i) { - const Touch* touch = touches->item(i); - - WebTouchPoint point; - point.id = touch->identifier(); - point.screenPosition = WebPoint(touch->screenX(), touch->screenY()); - point.position = convertLocationForRenderObject(LayoutPoint(IntPoint(touch->pageX(), touch->pageY())), *renderObject); - point.radiusX = touch->webkitRadiusX(); - point.radiusY = touch->webkitRadiusY(); - point.rotationAngle = touch->webkitRotationAngle(); - point.force = touch->webkitForce(); - point.state = toWebTouchPointState(touchType); - - touchPoints[i] = point; - } - *touchPointsLength = numberOfTouches; -} - -WebTouchEventBuilder::WebTouchEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const TouchEvent& event) -{ - if (event.type() == eventNames().touchstartEvent) - type = TouchStart; - else if (event.type() == eventNames().touchmoveEvent) - type = TouchMove; - else if (event.type() == eventNames().touchendEvent) - type = TouchEnd; - else if (event.type() == eventNames().touchcancelEvent) - type = TouchCancel; - else { - ASSERT_NOT_REACHED(); - type = Undefined; - return; - } - - modifiers = getWebInputModifiers(event); - timeStampSeconds = event.timeStamp() / millisPerSecond; - - addTouchPoints(event.type(), event.touches(), touches, &touchesLength, renderObject); - addTouchPoints(event.type(), event.changedTouches(), changedTouches, &changedTouchesLength, renderObject); - addTouchPoints(event.type(), event.targetTouches(), targetTouches, &targetTouchesLength, renderObject); -} - -#endif // ENABLE(TOUCH_EVENTS) - -#if ENABLE(GESTURE_EVENTS) -WebGestureEventBuilder::WebGestureEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const GestureEvent& event) -{ - if (event.type() == eventNames().gesturetapEvent) - type = GestureTap; - else if (event.type() == eventNames().gesturetapdownEvent) - type = GestureTapDown; - else if (event.type() == eventNames().gesturescrollstartEvent) - type = GestureScrollBegin; - else if (event.type() == eventNames().gesturescrollendEvent) - type = GestureScrollEnd; - else if (event.type() == eventNames().gesturescrollupdateEvent) { - type = GestureScrollUpdate; - data.scrollUpdate.deltaX = event.deltaX(); - data.scrollUpdate.deltaY = event.deltaY(); - } - - timeStampSeconds = event.timeStamp() / millisPerSecond; - modifiers = getWebInputModifiers(event); - - globalX = event.screenX(); - globalY = event.screenY(); - IntPoint localPoint = convertLocationForRenderObject(event.absoluteLocation(), *renderObject); - x = localPoint.x(); - y = localPoint.y(); -} -#endif // ENABLE(GESTURE_EVENTS) - -} // namespace WebKit |