1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "config.h" 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebInputEventConversion.h" 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "EventNames.h" 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "KeyboardCodes.h" 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "KeyboardEvent.h" 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "MouseEvent.h" 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PlatformKeyboardEvent.h" 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PlatformMouseEvent.h" 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PlatformWheelEvent.h" 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "ScrollView.h" 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebInputEvent.h" 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WheelEvent.h" 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Widget.h" 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace WebCore; 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// MakePlatformMouseEvent ----------------------------------------------------- 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 52643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockPlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMouseEvent& e) 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // FIXME: widget is always toplevel, unless it's a popup. We may be able 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // to get rid of this once we abstract popups into a WebKit API. 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y)); 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_globalPosition = IntPoint(e.globalX, e.globalY); 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_button = static_cast<MouseButton>(e.button); 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_shiftKey = (e.modifiers & WebInputEvent::ShiftKey); 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_ctrlKey = (e.modifiers & WebInputEvent::ControlKey); 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_altKey = (e.modifiers & WebInputEvent::AltKey); 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_metaKey = (e.modifiers & WebInputEvent::MetaKey); 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_modifierFlags = e.modifiers; 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_timestamp = e.timeStampSeconds; 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_clickCount = e.clickCount; 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block switch (e.type) { 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case WebInputEvent::MouseMove: 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case WebInputEvent::MouseLeave: // synthesize a move event 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_eventType = MouseEventMoved; 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case WebInputEvent::MouseDown: 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_eventType = MouseEventPressed; 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case WebInputEvent::MouseUp: 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_eventType = MouseEventReleased; 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block default: 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT_NOT_REACHED(); 83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// PlatformWheelEventBuilder -------------------------------------------------- 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 88643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockPlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMouseWheelEvent& e) 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y)); 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_globalPosition = IntPoint(e.globalX, e.globalY); 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_deltaX = e.deltaX; 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_deltaY = e.deltaY; 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_wheelTicksX = e.wheelTicksX; 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_wheelTicksY = e.wheelTicksY; 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_isAccepted = false; 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_granularity = e.scrollByPage ? 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ScrollByPageWheelEvent : ScrollByPixelWheelEvent; 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_shiftKey = (e.modifiers & WebInputEvent::ShiftKey); 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_ctrlKey = (e.modifiers & WebInputEvent::ControlKey); 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_altKey = (e.modifiers & WebInputEvent::AltKey); 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_metaKey = (e.modifiers & WebInputEvent::MetaKey); 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// MakePlatformKeyboardEvent -------------------------------------------------- 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 107dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochstatic inline PlatformKeyboardEvent::Type toPlatformKeyboardEventType(WebInputEvent::Type type) 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block switch (type) { 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case WebInputEvent::KeyUp: 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return PlatformKeyboardEvent::KeyUp; 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case WebInputEvent::KeyDown: 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return PlatformKeyboardEvent::KeyDown; 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case WebInputEvent::RawKeyDown: 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return PlatformKeyboardEvent::RawKeyDown; 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case WebInputEvent::Char: 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return PlatformKeyboardEvent::Char; 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block default: 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT_NOT_REACHED(); 120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return PlatformKeyboardEvent::KeyDown; 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 124643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockPlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder(const WebKeyboardEvent& e) 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_type = toPlatformKeyboardEventType(e.type); 127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_text = String(e.text); 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_unmodifiedText = String(e.unmodifiedText); 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_keyIdentifier = String(e.keyIdentifier); 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_autoRepeat = (e.modifiers & WebInputEvent::IsAutoRepeat); 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_windowsVirtualKeyCode = e.windowsKeyCode; 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_nativeVirtualKeyCode = e.nativeKeyCode; 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_isKeypad = (e.modifiers & WebInputEvent::IsKeyPad); 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_shiftKey = (e.modifiers & WebInputEvent::ShiftKey); 135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_ctrlKey = (e.modifiers & WebInputEvent::ControlKey); 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_altKey = (e.modifiers & WebInputEvent::AltKey); 137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_metaKey = (e.modifiers & WebInputEvent::MetaKey); 138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_isSystemKey = e.isSystemKey; 139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 141643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid PlatformKeyboardEventBuilder::setKeyType(Type type) 142643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // According to the behavior of Webkit in Windows platform, 144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // we need to convert KeyDown to RawKeydown and Char events 145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // See WebKit/WebKit/Win/WebView.cpp 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT(m_type == KeyDown); 147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT(type == RawKeyDown || type == Char); 148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_type = type; 149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 150643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (type == RawKeyDown) { 151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_text = String(); 152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_unmodifiedText = String(); 153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else { 154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_keyIdentifier = String(); 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_windowsVirtualKeyCode = 0; 156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Please refer to bug http://b/issue?id=961192, which talks about Webkit 160643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// keyboard event handling changes. It also mentions the list of keys 161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// which don't have associated character events. 162643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool PlatformKeyboardEventBuilder::isCharacterKey() const 163643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 164643ca7872b450ea4efacab6188849e5aac2ba161Steve Block switch (windowsVirtualKeyCode()) { 165643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case VKEY_BACK: 166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case VKEY_ESCAPE: 167643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return true; 170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(TOUCH_EVENTS) 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic inline TouchEventType toPlatformTouchEventType(const WebInputEvent::Type type) 174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block switch (type) { 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebInputEvent::TouchStart: 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return TouchStart; 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebInputEvent::TouchMove: 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return TouchMove; 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebInputEvent::TouchEnd: 181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return TouchEnd; 182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebInputEvent::TouchCancel: 183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return TouchCancel; 184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block default: 185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT_NOT_REACHED(); 186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return TouchStart; 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic inline PlatformTouchPoint::State toPlatformTouchPointState(const WebTouchPoint::State state) 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block switch (state) { 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebTouchPoint::StateReleased: 194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return PlatformTouchPoint::TouchReleased; 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebTouchPoint::StatePressed: 196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return PlatformTouchPoint::TouchPressed; 197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebTouchPoint::StateMoved: 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return PlatformTouchPoint::TouchMoved; 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebTouchPoint::StateStationary: 200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return PlatformTouchPoint::TouchStationary; 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebTouchPoint::StateCancelled: 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return PlatformTouchPoint::TouchCancelled; 203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case WebTouchPoint::StateUndefined: 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT_NOT_REACHED(); 205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return PlatformTouchPoint::TouchReleased; 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockPlatformTouchPointBuilder::PlatformTouchPointBuilder(Widget* widget, const WebTouchPoint& point) 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_id = point.id; 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_state = toPlatformTouchPointState(point.state); 213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_pos = widget->convertFromContainingWindow(point.position); 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_screenPos = point.screenPosition; 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockPlatformTouchEventBuilder::PlatformTouchEventBuilder(Widget* widget, const WebTouchEvent& event) 218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_type = toPlatformTouchEventType(event.type); 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_ctrlKey = event.modifiers & WebInputEvent::ControlKey; 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_altKey = event.modifiers & WebInputEvent::AltKey; 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_shiftKey = event.modifiers & WebInputEvent::ShiftKey; 223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_metaKey = event.modifiers & WebInputEvent::MetaKey; 22481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_timestamp = event.timeStampSeconds; 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (int i = 0; i < event.touchPointsLength; ++i) 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_touchPoints.append(PlatformTouchPointBuilder(widget, event.touchPoints[i])); 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 231643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstatic int getWebInputModifiers(const UIEventWithKeyState& event) 232643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 233643ca7872b450ea4efacab6188849e5aac2ba161Steve Block int modifiers = 0; 234643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (event.ctrlKey()) 235643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers |= WebInputEvent::ControlKey; 236643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (event.shiftKey()) 237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers |= WebInputEvent::ShiftKey; 238643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (event.altKey()) 239643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers |= WebInputEvent::AltKey; 240643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (event.metaKey()) 241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers |= WebInputEvent::MetaKey; 242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return modifiers; 243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2450617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenWebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, const MouseEvent& event) 246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (event.type() == eventNames().mousemoveEvent) 248643ca7872b450ea4efacab6188849e5aac2ba161Steve Block type = WebInputEvent::MouseMove; 249643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else if (event.type() == eventNames().mouseoutEvent) 250643ca7872b450ea4efacab6188849e5aac2ba161Steve Block type = WebInputEvent::MouseLeave; 251643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else if (event.type() == eventNames().mouseoverEvent) 252643ca7872b450ea4efacab6188849e5aac2ba161Steve Block type = WebInputEvent::MouseEnter; 253643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else if (event.type() == eventNames().mousedownEvent) 254643ca7872b450ea4efacab6188849e5aac2ba161Steve Block type = WebInputEvent::MouseDown; 255643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else if (event.type() == eventNames().mouseupEvent) 256643ca7872b450ea4efacab6188849e5aac2ba161Steve Block type = WebInputEvent::MouseUp; 2570617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen else if (event.type() == eventNames().contextmenuEvent) 2580617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen type = WebInputEvent::ContextMenu; 259643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else 260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; // Skip all other mouse events. 261643ca7872b450ea4efacab6188849e5aac2ba161Steve Block timeStampSeconds = event.timeStamp() * 1.0e-3; 262643ca7872b450ea4efacab6188849e5aac2ba161Steve Block switch (event.button()) { 263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case LeftButton: 264643ca7872b450ea4efacab6188849e5aac2ba161Steve Block button = WebMouseEvent::ButtonLeft; 265643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 266643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case MiddleButton: 267643ca7872b450ea4efacab6188849e5aac2ba161Steve Block button = WebMouseEvent::ButtonMiddle; 268643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 269643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case RightButton: 270643ca7872b450ea4efacab6188849e5aac2ba161Steve Block button = WebMouseEvent::ButtonRight; 271643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers = getWebInputModifiers(event); 274643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (event.buttonDown()) { 275643ca7872b450ea4efacab6188849e5aac2ba161Steve Block switch (event.button()) { 276643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case LeftButton: 277643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers |= WebInputEvent::LeftButtonDown; 278643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 279643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case MiddleButton: 280643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers |= WebInputEvent::MiddleButtonDown; 281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 282643ca7872b450ea4efacab6188849e5aac2ba161Steve Block case RightButton: 283643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers |= WebInputEvent::RightButtonDown; 284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block break; 285643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 286643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 2870617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen ScrollView* view = widget->parent(); 2880617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen IntPoint p = view->contentsToWindow( 2890617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen IntPoint(event.absoluteLocation().x(), event.absoluteLocation().y())); 290643ca7872b450ea4efacab6188849e5aac2ba161Steve Block globalX = event.screenX(); 291643ca7872b450ea4efacab6188849e5aac2ba161Steve Block globalY = event.screenY(); 292643ca7872b450ea4efacab6188849e5aac2ba161Steve Block windowX = p.x(); 293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block windowY = p.y(); 2940617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen x = event.absoluteLocation().x() - widget->pos().x(); 2950617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen y = event.absoluteLocation().y() - widget->pos().y(); 296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block clickCount = event.detail(); 297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 298643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2990617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenWebMouseWheelEventBuilder::WebMouseWheelEventBuilder(const Widget* widget, const WheelEvent& event) 300dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (event.type() != eventNames().mousewheelEvent) 302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block type = WebInputEvent::MouseWheel; 304dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block timeStampSeconds = event.timeStamp() * 1.0e-3; 305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block modifiers = getWebInputModifiers(event); 3060617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen ScrollView* view = widget->parent(); 3070617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen IntPoint p = view->contentsToWindow( 3080617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen IntPoint(event.absoluteLocation().x(), event.absoluteLocation().y())); 309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block globalX = event.screenX(); 310dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block globalY = event.screenY(); 311dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowX = p.x(); 312dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowY = p.y(); 3130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen x = event.absoluteLocation().x() - widget->pos().x(); 3140617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen y = event.absoluteLocation().y() - widget->pos().y(); 315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block deltaX = static_cast<float>(event.rawDeltaX()); 316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block deltaY = static_cast<float>(event.rawDeltaY()); 317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // The 120 is from WheelEvent::initWheelEvent(). 318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block wheelTicksX = static_cast<float>(event.wheelDeltaX()) / 120; 319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block wheelTicksY = static_cast<float>(event.wheelDeltaY()) / 120; 320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block scrollByPage = event.granularity() == WheelEvent::Page; 321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 323643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebKeyboardEventBuilder::WebKeyboardEventBuilder(const KeyboardEvent& event) 324643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 325643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (event.type() == eventNames().keydownEvent) 326643ca7872b450ea4efacab6188849e5aac2ba161Steve Block type = KeyDown; 327643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else if (event.type() == eventNames().keyupEvent) 328643ca7872b450ea4efacab6188849e5aac2ba161Steve Block type = WebInputEvent::KeyUp; 329643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else if (event.type() == eventNames().keypressEvent) 330643ca7872b450ea4efacab6188849e5aac2ba161Steve Block type = WebInputEvent::Char; 331643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else 332643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; // Skip all other keyboard events. 333643ca7872b450ea4efacab6188849e5aac2ba161Steve Block modifiers = getWebInputModifiers(event); 334643ca7872b450ea4efacab6188849e5aac2ba161Steve Block timeStampSeconds = event.timeStamp() * 1.0e-3; 335643ca7872b450ea4efacab6188849e5aac2ba161Steve Block windowsKeyCode = event.keyCode(); 336e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 337e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // The platform keyevent does not exist if the event was created using 338e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // initKeyboardEvent. 339e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!event.keyEvent()) 340e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return; 341643ca7872b450ea4efacab6188849e5aac2ba161Steve Block nativeKeyCode = event.keyEvent()->nativeVirtualKeyCode(); 342643ca7872b450ea4efacab6188849e5aac2ba161Steve Block unsigned int numChars = std::min(event.keyEvent()->text().length(), 343643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static_cast<unsigned int>(WebKeyboardEvent::textLengthCap)); 344643ca7872b450ea4efacab6188849e5aac2ba161Steve Block for (unsigned int i = 0; i < numChars; i++) { 345643ca7872b450ea4efacab6188849e5aac2ba161Steve Block text[i] = event.keyEvent()->text()[i]; 346643ca7872b450ea4efacab6188849e5aac2ba161Steve Block unmodifiedText[i] = event.keyEvent()->unmodifiedText()[i]; 347643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 348643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 349643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 350643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 351