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" 355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "../platform/WebRect.h" 365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "WebTouchPoint.h" 375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include <string.h> 395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// The classes defined in this file are intended to be used with 435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebWidget's handleInputEvent method. These event types are cross- 445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// platform and correspond closely to WebCore's Platform*Event classes. 455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// 465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WARNING! These classes must remain PODs (plain old data). They are 475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// intended to be "serializable" by copying their raw bytes, so they must 485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// not contain any non-bit-copyable member variables! 495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// 505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// Furthermore, the class members need to be packed so they are aligned 515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// properly and don't have paddings/gaps, otherwise memory check tools 525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// like Valgrind will complain about uninitialized memory usage when 535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// transferring these classes over the wire. 545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#pragma pack(push, 4) 565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebInputEvent -------------------------------------------------------------- 585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebInputEvent { 605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebInputEvent(unsigned sizeParam = sizeof(WebInputEvent)) 625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(this, 0, sizeParam); 645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) timeStampSeconds = 0.0; 655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) size = sizeParam; 665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) type = Undefined; 675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) modifiers = 0; 685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // When we use an input method (or an input method editor), we receive 715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // two events for a keypress. The former event is a keydown, which 725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // provides a keycode, and the latter is a textinput, which provides 735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // a character processed by an input method. (The mapping from a 745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // keycode to a character code is not trivial for non-English 755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // keyboards.) 765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // To support input methods, Safari sends keydown events to WebKit for 775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // filtering. WebKit sends filtered keydown events back to Safari, 785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // which sends them to input methods. 795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Unfortunately, it is hard to apply this design to Chrome because of 805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // our multiprocess architecture. An input method is running in a 815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // browser process. On the other hand, WebKit is running in a renderer 825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // process. So, this design results in increasing IPC messages. 835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // To support input methods without increasing IPC messages, Chrome 845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // handles keyboard events in a browser process and send asynchronous 855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // input events (to be translated to DOM events) to a renderer 865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // process. 875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // This design is mostly the same as the one of Windows and Mac Carbon. 885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // So, for what it's worth, our Linux and Mac front-ends emulate our 895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Windows front-end. To emulate our Windows front-end, we can share 905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // our back-end code among Windows, Linux, and Mac. 915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // TODO(hbono): Issue 18064: remove the KeyDown type since it isn't 925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // used in Chrome any longer. 935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Type { 955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Undefined = -1, 965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebMouseEvent 985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseDown, 995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseUp, 1005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseMove, 1015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseEnter, 1025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseLeave, 1035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ContextMenu, 1045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebMouseWheelEvent 1065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MouseWheel, 1075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebKeyboardEvent 1095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) RawKeyDown, 1105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) KeyDown, 1115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) KeyUp, 1125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Char, 1135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebGestureEvent 1155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureScrollBegin, 1165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureScrollEnd, 1175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureScrollUpdate, 1185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureScrollUpdateWithoutPropagation, 1195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureFlingStart, 1205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureFlingCancel, 1211e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) GestureShowPress, 1225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTap, 1235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapUnconfirmed, 1245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapDown, 1255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapCancel, 1265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureDoubleTap, 1275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTwoFingerTap, 1285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureLongPress, 1295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureLongTap, 1305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchBegin, 1315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchEnd, 1325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchUpdate, 1335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebTouchEvent 1355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchStart, 1365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchMove, 1375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchEnd, 1385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchCancel, 1395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 1405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Modifiers { 1425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for all events: 1435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ShiftKey = 1 << 0, 1445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ControlKey = 1 << 1, 1455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) AltKey = 1 << 2, 1465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MetaKey = 1 << 3, 1475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for keyboard events: 1495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsKeyPad = 1 << 4, 1505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsAutoRepeat = 1 << 5, 1515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for mouse events: 1535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) LeftButtonDown = 1 << 6, 1545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MiddleButtonDown = 1 << 7, 1555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) RightButtonDown = 1 << 8, 1565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Toggle modifiers for all events. Danger: these are not reflected 1585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // into WebCore, so round-tripping from WebInputEvent to a WebCore 1595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // event and back will not preserve these flags. 1605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) CapsLockOn = 1 << 9, 1615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) NumLockOn = 1 << 10, 1625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Left/right modifiers for keyboard events. 1645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsLeft = 1 << 11, 1655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsRight = 1 << 12, 1665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Last input event to be sent for the current vsync interval. If this 1685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // flag is set, the sender guarantees that no more input events will be 1695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // delivered until the next vsync and the receiver can schedule 1705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // rendering accordingly. If it isn't set, the receiver should not make 1715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // any assumptions about the delivery times of future input events 1725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // w.r.t. vsync. 1735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsLastInputEventForCurrentVSync = 1 << 13, 1745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 1755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const int InputModifiers = ShiftKey | ControlKey | AltKey | MetaKey; 1775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) double timeStampSeconds; // Seconds since epoch. 1795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned size; // The size of this structure, for serialization. 1805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Type type; 1815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int modifiers; 1825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a mouse event. 1845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isMouseEventType(int type) 1855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 1865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return type == MouseDown 1875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseUp 1885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseMove 1895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseEnter 1905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseLeave 1915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == ContextMenu; 1925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 1935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a keyboard event. 1955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isKeyboardEventType(int type) 1965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 1975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return type == RawKeyDown 1985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == KeyDown 1995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == KeyUp 2005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == Char; 2015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a touch event. 2045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isTouchEventType(int type) 2055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 2065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return type == TouchStart 2075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchMove 2085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchEnd 2095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchCancel; 2105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| should be handled as user gesture. 2135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isUserGestureEventType(int type) 2145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 2155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return isKeyboardEventType(type) 2165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseDown 2175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseUp 2185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchStart 2195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchEnd; 2205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent is a gesture event. 2235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isGestureEventType(int type) 2245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 2255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return type == GestureScrollBegin 2265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureScrollEnd 2275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureScrollUpdate 2285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureScrollUpdateWithoutPropagation 2295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureFlingStart 2305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureFlingCancel 2315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GesturePinchBegin 2325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GesturePinchEnd 2335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GesturePinchUpdate 2345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTap 2355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTapUnconfirmed 2365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTapDown 2375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTapCancel 2381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) || type == GestureShowPress 2395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureDoubleTap 2405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTwoFingerTap 2415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureLongPress 2425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureLongTap; 2435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 2455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebKeyboardEvent ----------------------------------------------------------- 2475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebKeyboardEvent : public WebInputEvent { 2495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 2505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Caps on string lengths so we can make them static arrays and keep 2515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // them PODs. 2525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const size_t textLengthCap = 4; 2535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // http://www.w3.org/TR/DOM-Level-3-Events/keyset.html lists the 2555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // identifiers. The longest is 18 characters, so we round up to the 2565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // next multiple of 4. 2575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const size_t keyIdentifierLengthCap = 20; 2585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |windowsKeyCode| is the Windows key code associated with this key 2605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // event. Sometimes it's direct from the event (i.e. on Windows), 2615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // sometimes it's via a mapping function. If you want a list, see 2625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebCore/platform/chromium/KeyboardCodes* . Note that this should 2635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // ALWAYS store the non-locational version of a keycode as this is 2645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // what is returned by the Windows API. For example, it should 2655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // store VK_SHIFT instead of VK_RSHIFT. The location information 2665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // should be stored in |modifiers|. 2675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowsKeyCode; 2685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // The actual key code genenerated by the platform. The DOM spec runs 2705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // on Windows-equivalent codes (thus |windowsKeyCode| above) but it 2715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // doesn't hurt to have this one around. 2725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int nativeKeyCode; 2735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // This identifies whether this event was tagged by the system as being 2755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // a "system key" event (see 2765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx for 2775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // details). Other platforms don't have this concept, but it's just 2785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // easier to leave it always false than ifdef. 2795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 2805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) bool isSystemKey; 2815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |text| is the text generated by this keystroke. |unmodifiedText| is 2835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |text|, but unmodified by an concurrently-held modifiers (except 2845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // shift). This is useful for working out shortcut keys. Linux and 2855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Windows guarantee one character per event. The Mac does not, but in 2865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // reality that's all it ever gives. We're generous, and cap it a bit 2875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // longer. 2885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebUChar text[textLengthCap]; 2895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebUChar unmodifiedText[textLengthCap]; 2905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // This is a string identifying the key pressed. 2925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) char keyIdentifier[keyIdentifierLengthCap]; 2935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebKeyboardEvent(unsigned sizeParam = sizeof(WebKeyboardEvent)) 2955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 2965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowsKeyCode(0) 2975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , nativeKeyCode(0) 2985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , isSystemKey(false) 2995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 3005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&text, 0, sizeof(text)); 3015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&unmodifiedText, 0, sizeof(unmodifiedText)); 3025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&keyIdentifier, 0, sizeof(keyIdentifier)); 3035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 3045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Sets keyIdentifier based on the value of windowsKeyCode. This is 3065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // handy for generating synthetic keyboard events. 30706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) BLINK_EXPORT void setKeyIdentifierFromWindowsKeyCode(); 3085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static int windowsKeyCodeWithoutLocation(int keycode); 3105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static int locationModifiersFromWindowsKeyCode(int keycode); 3115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 3125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebMouseEvent -------------------------------------------------------------- 3145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebMouseEvent : public WebInputEvent { 3165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 3175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // These values defined for WebCore::MouseButton 3185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Button { 3195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonNone = -1, 3205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonLeft, 3215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonMiddle, 3225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonRight 3235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 3245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Button button; 3265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int x; 3275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int y; 3285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowX; 3295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowY; 3305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalX; 3315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalY; 3325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int movementX; 3335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int movementY; 3345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int clickCount; 3355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebMouseEvent(unsigned sizeParam = sizeof(WebMouseEvent)) 3375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 3385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , button(ButtonNone) 3395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , x(0) 3405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , y(0) 3415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowX(0) 3425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowY(0) 3435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalX(0) 3445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalY(0) 3455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , movementX(0) 3465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , movementY(0) 3475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , clickCount(0) 3485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 3495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 3505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 3515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebMouseWheelEvent --------------------------------------------------------- 3535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebMouseWheelEvent : public WebMouseEvent { 3555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 3565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Phase { 3575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseNone = 0, 3585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseBegan = 1 << 0, 3595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseStationary = 1 << 1, 3605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseChanged = 1 << 2, 3615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseEnded = 1 << 3, 3625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseCancelled = 1 << 4, 3635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseMayBegin = 1 << 5, 3645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 3655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaX; 3675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaY; 3685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float wheelTicksX; 3695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float wheelTicksY; 3705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float accelerationRatioX; 3725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float accelerationRatioY; 3735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 3755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int scrollByPage; 3765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 3785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int hasPreciseScrollingDeltas; 3795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Phase phase; 3805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Phase momentumPhase; 3815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebMouseWheelEvent(unsigned sizeParam = sizeof(WebMouseWheelEvent)) 3835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebMouseEvent(sizeParam) 3845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , deltaX(0.0f) 3855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , deltaY(0.0f) 3865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , wheelTicksX(0.0f) 3875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , wheelTicksY(0.0f) 3885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , accelerationRatioX(1.0f) 3895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , accelerationRatioY(1.0f) 3905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , scrollByPage(false) 3915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , hasPreciseScrollingDeltas(false) 3925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , phase(PhaseNone) 3935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , momentumPhase(PhaseNone) 3945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 3955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 3965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 3975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebGestureEvent -------------------------------------------------------------- 3995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebGestureEvent : public WebInputEvent { 4015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 4025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum SourceDevice { 4035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Touchpad, 4045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Touchscreen, 4055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 4065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int x; 4085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int y; 4095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalX; 4105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalY; 4115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) SourceDevice sourceDevice; 4125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) union { 4145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int tapCount; 4165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 4185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } tap; 4195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 4235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } tapDown; 4245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 428bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) } showPress; 429bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 430bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) struct { 431bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) float width; 432bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) float height; 4335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } longPress; 4345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float firstFingerWidth; 4375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float firstFingerHeight; 4385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } twoFingerTap; 4395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaX; 4425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaY; 4435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityX; 4445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityY; 4455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } scrollUpdate; 4465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityX; 4495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityY; 4505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } flingStart; 4515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float scale; 4545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } pinchUpdate; 4555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } data; 4565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebGestureEvent(unsigned sizeParam = sizeof(WebGestureEvent)) 4585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 4595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , x(0) 4605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , y(0) 4615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalX(0) 4625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalY(0) 4635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&data, 0, sizeof(data)); 4655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 4675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebTouchEvent -------------------------------------------------------------- 4695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebTouchEvent : public WebInputEvent { 4715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 4725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Maximum number of simultaneous touches supported on 4735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Ash/Aura. 4745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum { touchesLengthCap = 12 }; 4755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned touchesLength; 4775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // List of all touches which are currently down. 4785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchPoint touches[touchesLengthCap]; 4795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned changedTouchesLength; 4815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // List of all touches whose state has changed since the last WebTouchEvent 4825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchPoint changedTouches[touchesLengthCap]; 4835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned targetTouchesLength; 4855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // List of all touches which are currently down and are targeting the event recipient. 4865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchPoint targetTouches[touchesLengthCap]; 4875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchEvent(unsigned sizeParam = sizeof(WebTouchEvent)) 4895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 4905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , touchesLength(0) 4915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , changedTouchesLength(0) 4925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , targetTouchesLength(0) 4935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 4965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#pragma pack(pop) 4985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 49951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 5005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 5015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#endif 502