15267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)/* 25267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 35267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * 45267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * modification, are permitted provided that the following conditions are 65267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * met: 75267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * 85267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 95267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * in the documentation and/or other materials provided with the 135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * distribution. 145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * this software without specific prior written permission. 175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * 185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#ifndef WebInputEvent_h 325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#define WebInputEvent_h 335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "../platform/WebCommon.h" 35f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "../platform/WebGestureDevice.h" 365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "../platform/WebRect.h" 375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "WebTouchPoint.h" 385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include <string.h> 405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// The classes defined in this file are intended to be used with 445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebWidget's handleInputEvent method. These event types are cross- 455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// platform and correspond closely to WebCore's Platform*Event classes. 465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// 475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WARNING! These classes must remain PODs (plain old data). They are 485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// intended to be "serializable" by copying their raw bytes, so they must 495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// not contain any non-bit-copyable member variables! 505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// 515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// Furthermore, the class members need to be packed so they are aligned 525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// properly and don't have paddings/gaps, otherwise memory check tools 535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// like Valgrind will complain about uninitialized memory usage when 545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// transferring these classes over the wire. 555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#pragma pack(push, 4) 575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebInputEvent -------------------------------------------------------------- 595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebInputEvent { 615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // When we use an input method (or an input method editor), we receive 635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // two events for a keypress. The former event is a keydown, which 645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // provides a keycode, and the latter is a textinput, which provides 655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // a character processed by an input method. (The mapping from a 665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // keycode to a character code is not trivial for non-English 675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // keyboards.) 685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // To support input methods, Safari sends keydown events to WebKit for 695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // filtering. WebKit sends filtered keydown events back to Safari, 705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // which sends them to input methods. 715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Unfortunately, it is hard to apply this design to Chrome because of 725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // our multiprocess architecture. An input method is running in a 735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // browser process. On the other hand, WebKit is running in a renderer 745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // process. So, this design results in increasing IPC messages. 755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // To support input methods without increasing IPC messages, Chrome 765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // handles keyboard events in a browser process and send asynchronous 775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // input events (to be translated to DOM events) to a renderer 785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // process. 795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // This design is mostly the same as the one of Windows and Mac Carbon. 805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // So, for what it's worth, our Linux and Mac front-ends emulate our 815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Windows front-end. To emulate our Windows front-end, we can share 825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // our back-end code among Windows, Linux, and Mac. 835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // TODO(hbono): Issue 18064: remove the KeyDown type since it isn't 845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // used in Chrome any longer. 855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Type { 875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Undefined = -1, 8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) TypeFirst = Undefined, 895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebMouseEvent 915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseDown, 92d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) MouseTypeFirst = MouseDown, 935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseUp, 945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseMove, 955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseEnter, 965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseLeave, 975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ContextMenu, 98d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) MouseTypeLast = ContextMenu, 995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebMouseWheelEvent 1015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseWheel, 1025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebKeyboardEvent 1045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) RawKeyDown, 105d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) KeyboardTypeFirst = RawKeyDown, 1065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) KeyDown, 1075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) KeyUp, 1085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Char, 109d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) KeyboardTypeLast = Char, 1105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebGestureEvent 1125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureScrollBegin, 113d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) GestureTypeFirst = GestureScrollBegin, 1145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureScrollEnd, 1155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureScrollUpdate, 1165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureScrollUpdateWithoutPropagation, 1175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureFlingStart, 1185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureFlingCancel, 1191e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) GestureShowPress, 1205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTap, 1215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapUnconfirmed, 1225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapDown, 1235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapCancel, 1245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureDoubleTap, 1255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTwoFingerTap, 1265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureLongPress, 1275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureLongTap, 1285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchBegin, 1295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchEnd, 1305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchUpdate, 131d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) GestureTypeLast = GesturePinchUpdate, 1325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebTouchEvent 1345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchStart, 135d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) TouchTypeFirst = TouchStart, 1365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchMove, 1375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchEnd, 1385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchCancel, 139d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) TouchTypeLast = TouchCancel, 140d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) TypeLast = TouchTypeLast 1425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 1435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Modifiers { 1455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for all events: 1465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ShiftKey = 1 << 0, 1475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ControlKey = 1 << 1, 1485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) AltKey = 1 << 2, 1495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MetaKey = 1 << 3, 1505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for keyboard events: 1525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsKeyPad = 1 << 4, 1535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsAutoRepeat = 1 << 5, 1545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for mouse events: 1565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) LeftButtonDown = 1 << 6, 1575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MiddleButtonDown = 1 << 7, 1585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) RightButtonDown = 1 << 8, 1595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Toggle modifiers for all events. Danger: these are not reflected 1615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // into WebCore, so round-tripping from WebInputEvent to a WebCore 1625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // event and back will not preserve these flags. 1635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) CapsLockOn = 1 << 9, 1645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) NumLockOn = 1 << 10, 1655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Left/right modifiers for keyboard events. 1675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsLeft = 1 << 11, 1685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsRight = 1 << 12, 1695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Last input event to be sent for the current vsync interval. If this 1715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // flag is set, the sender guarantees that no more input events will be 1725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // delivered until the next vsync and the receiver can schedule 1735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // rendering accordingly. If it isn't set, the receiver should not make 1745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // any assumptions about the delivery times of future input events 1755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // w.r.t. vsync. 1765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsLastInputEventForCurrentVSync = 1 << 13, 1775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 1785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const int InputModifiers = ShiftKey | ControlKey | AltKey | MetaKey; 1805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) double timeStampSeconds; // Seconds since epoch. 1825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned size; // The size of this structure, for serialization. 1835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Type type; 1845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int modifiers; 1855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a mouse event. 1875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isMouseEventType(int type) 1885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 189d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return MouseTypeFirst <= type && type <= MouseTypeLast; 1905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 1915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a keyboard event. 1935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isKeyboardEventType(int type) 1945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 195d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return KeyboardTypeFirst <= type && type <= KeyboardTypeLast; 1965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 1975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a touch event. 1995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isTouchEventType(int type) 2005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 201d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return TouchTypeFirst <= type && type <= TouchTypeLast; 2025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent is a gesture event. 2055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isGestureEventType(int type) 2065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 207d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return GestureTypeFirst <= type && type <= GestureTypeLast; 2085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 209aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 210aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochprotected: 211aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch explicit WebInputEvent(unsigned sizeParam) 212aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch { 213aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch memset(this, 0, sizeParam); 214aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch timeStampSeconds = 0.0; 215aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch size = sizeParam; 216aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch type = Undefined; 217aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch modifiers = 0; 218aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 2195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 2205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebKeyboardEvent ----------------------------------------------------------- 2225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebKeyboardEvent : public WebInputEvent { 2245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 2255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Caps on string lengths so we can make them static arrays and keep 2265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // them PODs. 2275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const size_t textLengthCap = 4; 2285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // http://www.w3.org/TR/DOM-Level-3-Events/keyset.html lists the 2305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // identifiers. The longest is 18 characters, so we round up to the 2315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // next multiple of 4. 2325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const size_t keyIdentifierLengthCap = 20; 2335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |windowsKeyCode| is the Windows key code associated with this key 2355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // event. Sometimes it's direct from the event (i.e. on Windows), 2365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // sometimes it's via a mapping function. If you want a list, see 2375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebCore/platform/chromium/KeyboardCodes* . Note that this should 2385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // ALWAYS store the non-locational version of a keycode as this is 2395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // what is returned by the Windows API. For example, it should 2405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // store VK_SHIFT instead of VK_RSHIFT. The location information 2415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // should be stored in |modifiers|. 2425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowsKeyCode; 2435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // The actual key code genenerated by the platform. The DOM spec runs 2455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // on Windows-equivalent codes (thus |windowsKeyCode| above) but it 2465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // doesn't hurt to have this one around. 2475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int nativeKeyCode; 2485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // This identifies whether this event was tagged by the system as being 2505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // a "system key" event (see 2515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx for 2525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // details). Other platforms don't have this concept, but it's just 2535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // easier to leave it always false than ifdef. 2545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 2555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) bool isSystemKey; 2565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |text| is the text generated by this keystroke. |unmodifiedText| is 2585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |text|, but unmodified by an concurrently-held modifiers (except 2595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // shift). This is useful for working out shortcut keys. Linux and 2605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Windows guarantee one character per event. The Mac does not, but in 2615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // reality that's all it ever gives. We're generous, and cap it a bit 2625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // longer. 2635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebUChar text[textLengthCap]; 2645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebUChar unmodifiedText[textLengthCap]; 2655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // This is a string identifying the key pressed. 2675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) char keyIdentifier[keyIdentifierLengthCap]; 2685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 269aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch WebKeyboardEvent() 270aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch : WebInputEvent(sizeof(WebKeyboardEvent)) 2715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowsKeyCode(0) 2725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , nativeKeyCode(0) 2735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , isSystemKey(false) 2745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 2755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&text, 0, sizeof(text)); 2765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&unmodifiedText, 0, sizeof(unmodifiedText)); 2775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&keyIdentifier, 0, sizeof(keyIdentifier)); 2785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Sets keyIdentifier based on the value of windowsKeyCode. This is 2815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // handy for generating synthetic keyboard events. 28206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void setKeyIdentifierFromWindowsKeyCode(); 2835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static int windowsKeyCodeWithoutLocation(int keycode); 2855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static int locationModifiersFromWindowsKeyCode(int keycode); 2865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 2875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebMouseEvent -------------------------------------------------------------- 2895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebMouseEvent : public WebInputEvent { 2915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 2925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Button { 2935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonNone = -1, 2945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonLeft, 2955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonMiddle, 2965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonRight 2975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 2985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Button button; 3005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int x; 3015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int y; 3025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowX; 3035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowY; 3045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalX; 3055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalY; 3065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int movementX; 3075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int movementY; 3085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int clickCount; 3095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 310aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch WebMouseEvent() 311aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch : WebInputEvent(sizeof(WebMouseEvent)) 312aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , button(ButtonNone) 313aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , x(0) 314aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , y(0) 315aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , windowX(0) 316aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , windowY(0) 317aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , globalX(0) 318aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , globalY(0) 319aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , movementX(0) 320aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , movementY(0) 321aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch , clickCount(0) 322aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch { 323aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 324aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 325aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochprotected: 326aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch explicit WebMouseEvent(unsigned sizeParam) 3275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 3285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , button(ButtonNone) 3295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , x(0) 3305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , y(0) 3315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowX(0) 3325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowY(0) 3335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalX(0) 3345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalY(0) 3355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , movementX(0) 3365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , movementY(0) 3375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , clickCount(0) 3385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 3395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 3405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 3415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebMouseWheelEvent --------------------------------------------------------- 3435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebMouseWheelEvent : public WebMouseEvent { 3455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 3465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Phase { 3475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseNone = 0, 3485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseBegan = 1 << 0, 3495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseStationary = 1 << 1, 3505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseChanged = 1 << 2, 3515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseEnded = 1 << 3, 3525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseCancelled = 1 << 4, 3535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseMayBegin = 1 << 5, 3545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 3555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaX; 3575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaY; 3585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float wheelTicksX; 3595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float wheelTicksY; 3605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float accelerationRatioX; 3625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float accelerationRatioY; 3635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 3655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int scrollByPage; 3665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 3685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int hasPreciseScrollingDeltas; 3695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Phase phase; 3705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Phase momentumPhase; 3715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 37207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // See comment at the top of the file for why an int is used here. 37307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // Rubberbanding is an OSX visual effect. When a user scrolls the content 37407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // area with a track pad, and the content area is already at its limit in 37507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // the direction being scrolled, the entire content area is allowed to 37607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // scroll slightly off screen, revealing a grey background. When the user 37707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // lets go, the content area snaps back into place. Blink is responsible 37807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // for this rubberbanding effect, but the embedder may wish to disable 37907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // rubber banding in the left or right direction, if the scroll should have 38007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // an alternate effect. The common case is that a scroll in the left or 38107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // right directions causes a back or forwards navigation, respectively. 38207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // 38307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // These flags prevent rubber banding from starting in a given direction, 38407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // but have no effect on an ongoing rubber banding. A rubber banding that 38507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // started in the vertical direction is allowed to continue in the right 38607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // direction, even if canRubberbandRight is 0. 38707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch int canRubberbandLeft; 38807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch int canRubberbandRight; 38907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 390aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch WebMouseWheelEvent() 391aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch : WebMouseEvent(sizeof(WebMouseWheelEvent)) 3925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , deltaX(0.0f) 3935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , deltaY(0.0f) 3945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , wheelTicksX(0.0f) 3955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , wheelTicksY(0.0f) 3965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , accelerationRatioX(1.0f) 3975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , accelerationRatioY(1.0f) 3985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , scrollByPage(false) 3995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , hasPreciseScrollingDeltas(false) 4005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , phase(PhaseNone) 4015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , momentumPhase(PhaseNone) 40207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch , canRubberbandLeft(true) 40307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch , canRubberbandRight(true) 4045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 4075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebGestureEvent -------------------------------------------------------------- 4095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebGestureEvent : public WebInputEvent { 4115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 4125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int x; 4135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int y; 4145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalX; 4155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalY; 416f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebGestureDevice sourceDevice; 4175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) union { 419d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // Tap information must be set for GestureTap, GestureTapUnconfirmed, 420d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // and GestureDoubleTap events. 4215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int tapCount; 4235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 4255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } tap; 4265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 4305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } tapDown; 4315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 435bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) } showPress; 436bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 437bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) struct { 438bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) float width; 439bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) float height; 4405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } longPress; 4415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float firstFingerWidth; 4445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float firstFingerHeight; 4455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } twoFingerTap; 4465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 44809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Initial motion that triggered the scroll. 44909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // May be redundant with deltaX/deltaY in the first scrollUpdate. 45009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) float deltaXHint; 45109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) float deltaYHint; 45209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } scrollBegin; 45309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 45409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) struct { 4555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaX; 4565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaY; 4575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityX; 4585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityY; 4595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } scrollUpdate; 4605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityX; 4635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityY; 4645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } flingStart; 4655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float scale; 4685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } pinchUpdate; 4695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } data; 4705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 471aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch WebGestureEvent() 472aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch : WebInputEvent(sizeof(WebGestureEvent)) 4735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , x(0) 4745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , y(0) 4755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalX(0) 4765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalY(0) 4775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&data, 0, sizeof(data)); 4795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 4815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebTouchEvent -------------------------------------------------------------- 4835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebTouchEvent : public WebInputEvent { 4855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 4865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Maximum number of simultaneous touches supported on 4875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Ash/Aura. 4885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum { touchesLengthCap = 12 }; 4895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned touchesLength; 4917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // List of all touches, regardless of state. 4925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchPoint touches[touchesLengthCap]; 4935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 49410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // Whether the event can be canceled (with preventDefault). If true then the browser 49510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // must wait for an ACK for this event. If false then no ACK IPC is expected. 49610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // See comment at the top for why an int is used here instead of a bool. 49710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch int cancelable; 49810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 499aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch WebTouchEvent() 500aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch : WebInputEvent(sizeof(WebTouchEvent)) 5015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , touchesLength(0) 50210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch , cancelable(true) 5035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 5045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 5055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 5065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 5075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#pragma pack(pop) 5085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 50951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 5105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 5115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#endif 512