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) 405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)namespace WebKit { 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, 1215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTap, 1225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapUnconfirmed, 1235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapDown, 1245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTapCancel, 1255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureDoubleTap, 1265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureTwoFingerTap, 1275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureLongPress, 1285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GestureLongTap, 1295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchBegin, 1305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchEnd, 1315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GesturePinchUpdate, 1325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebTouchEvent 1345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchStart, 1355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchMove, 1365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchEnd, 1375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) TouchCancel, 1385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 1395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Modifiers { 1415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for all events: 1425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ShiftKey = 1 << 0, 1435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ControlKey = 1 << 1, 1445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) AltKey = 1 << 2, 1455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MetaKey = 1 << 3, 1465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for keyboard events: 1485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsKeyPad = 1 << 4, 1495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsAutoRepeat = 1 << 5, 1505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // modifiers for mouse events: 1525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) LeftButtonDown = 1 << 6, 1535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) MiddleButtonDown = 1 << 7, 1545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) RightButtonDown = 1 << 8, 1555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Toggle modifiers for all events. Danger: these are not reflected 1575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // into WebCore, so round-tripping from WebInputEvent to a WebCore 1585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // event and back will not preserve these flags. 1595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) CapsLockOn = 1 << 9, 1605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) NumLockOn = 1 << 10, 1615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Left/right modifiers for keyboard events. 1635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsLeft = 1 << 11, 1645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsRight = 1 << 12, 1655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Last input event to be sent for the current vsync interval. If this 1675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // flag is set, the sender guarantees that no more input events will be 1685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // delivered until the next vsync and the receiver can schedule 1695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // rendering accordingly. If it isn't set, the receiver should not make 1705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // any assumptions about the delivery times of future input events 1715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // w.r.t. vsync. 1725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IsLastInputEventForCurrentVSync = 1 << 13, 1735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 1745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const int InputModifiers = ShiftKey | ControlKey | AltKey | MetaKey; 1765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) double timeStampSeconds; // Seconds since epoch. 1785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned size; // The size of this structure, for serialization. 1795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Type type; 1805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int modifiers; 1815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a mouse event. 1835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isMouseEventType(int type) 1845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 1855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return type == MouseDown 1865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseUp 1875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseMove 1885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseEnter 1895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseLeave 1905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == ContextMenu; 1915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 1925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a keyboard event. 1945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isKeyboardEventType(int type) 1955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 1965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return type == RawKeyDown 1975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == KeyDown 1985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == KeyUp 1995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == Char; 2005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| is a touch event. 2035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isTouchEventType(int type) 2045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 2055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return type == TouchStart 2065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchMove 2075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchEnd 2085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchCancel; 2095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent |type| should be handled as user gesture. 2125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isUserGestureEventType(int type) 2135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 2145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return isKeyboardEventType(type) 2155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseDown 2165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == MouseUp 2175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchStart 2185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == TouchEnd; 2195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Returns true if the WebInputEvent is a gesture event. 2225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static bool isGestureEventType(int type) 2235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 2245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return type == GestureScrollBegin 2255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureScrollEnd 2265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureScrollUpdate 2275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureScrollUpdateWithoutPropagation 2285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureFlingStart 2295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureFlingCancel 2305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GesturePinchBegin 2315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GesturePinchEnd 2325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GesturePinchUpdate 2335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTap 2345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTapUnconfirmed 2355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTapDown 2365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTapCancel 2375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureDoubleTap 2385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureTwoFingerTap 2395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureLongPress 2405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) || type == GestureLongTap; 2415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 2425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 2435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebKeyboardEvent ----------------------------------------------------------- 2455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebKeyboardEvent : public WebInputEvent { 2475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 2485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Caps on string lengths so we can make them static arrays and keep 2495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // them PODs. 2505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const size_t textLengthCap = 4; 2515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // http://www.w3.org/TR/DOM-Level-3-Events/keyset.html lists the 2535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // identifiers. The longest is 18 characters, so we round up to the 2545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // next multiple of 4. 2555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static const size_t keyIdentifierLengthCap = 20; 2565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |windowsKeyCode| is the Windows key code associated with this key 2585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // event. Sometimes it's direct from the event (i.e. on Windows), 2595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // sometimes it's via a mapping function. If you want a list, see 2605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // WebCore/platform/chromium/KeyboardCodes* . Note that this should 2615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // ALWAYS store the non-locational version of a keycode as this is 2625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // what is returned by the Windows API. For example, it should 2635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // store VK_SHIFT instead of VK_RSHIFT. The location information 2645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // should be stored in |modifiers|. 2655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowsKeyCode; 2665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // The actual key code genenerated by the platform. The DOM spec runs 2685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // on Windows-equivalent codes (thus |windowsKeyCode| above) but it 2695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // doesn't hurt to have this one around. 2705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int nativeKeyCode; 2715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // This identifies whether this event was tagged by the system as being 2735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // a "system key" event (see 2745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx for 2755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // details). Other platforms don't have this concept, but it's just 2765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // easier to leave it always false than ifdef. 2775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 2785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) bool isSystemKey; 2795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |text| is the text generated by this keystroke. |unmodifiedText| is 2815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // |text|, but unmodified by an concurrently-held modifiers (except 2825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // shift). This is useful for working out shortcut keys. Linux and 2835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Windows guarantee one character per event. The Mac does not, but in 2845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // reality that's all it ever gives. We're generous, and cap it a bit 2855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // longer. 2865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebUChar text[textLengthCap]; 2875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebUChar unmodifiedText[textLengthCap]; 2885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // This is a string identifying the key pressed. 2905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) char keyIdentifier[keyIdentifierLengthCap]; 2915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebKeyboardEvent(unsigned sizeParam = sizeof(WebKeyboardEvent)) 2935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 2945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowsKeyCode(0) 2955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , nativeKeyCode(0) 2965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , isSystemKey(false) 2975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 2985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&text, 0, sizeof(text)); 2995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&unmodifiedText, 0, sizeof(unmodifiedText)); 3005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&keyIdentifier, 0, sizeof(keyIdentifier)); 3015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 3025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Sets keyIdentifier based on the value of windowsKeyCode. This is 3045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // handy for generating synthetic keyboard events. 3055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WEBKIT_EXPORT void setKeyIdentifierFromWindowsKeyCode(); 3065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static int windowsKeyCodeWithoutLocation(int keycode); 3085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) static int locationModifiersFromWindowsKeyCode(int keycode); 3095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 3105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebMouseEvent -------------------------------------------------------------- 3125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebMouseEvent : public WebInputEvent { 3145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 3155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // These values defined for WebCore::MouseButton 3165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Button { 3175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonNone = -1, 3185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonLeft, 3195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonMiddle, 3205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ButtonRight 3215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 3225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Button button; 3245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int x; 3255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int y; 3265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowX; 3275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int windowY; 3285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalX; 3295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalY; 3305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int movementX; 3315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int movementY; 3325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int clickCount; 3335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebMouseEvent(unsigned sizeParam = sizeof(WebMouseEvent)) 3355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 3365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , button(ButtonNone) 3375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , x(0) 3385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , y(0) 3395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowX(0) 3405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , windowY(0) 3415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalX(0) 3425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalY(0) 3435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , movementX(0) 3445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , movementY(0) 3455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , clickCount(0) 3465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 3475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 3485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 3495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebMouseWheelEvent --------------------------------------------------------- 3515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebMouseWheelEvent : public WebMouseEvent { 3535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 3545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum Phase { 3555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseNone = 0, 3565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseBegan = 1 << 0, 3575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseStationary = 1 << 1, 3585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseChanged = 1 << 2, 3595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseEnded = 1 << 3, 3605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseCancelled = 1 << 4, 3615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) PhaseMayBegin = 1 << 5, 3625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 3635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaX; 3655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaY; 3665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float wheelTicksX; 3675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float wheelTicksY; 3685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float accelerationRatioX; 3705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float accelerationRatioY; 3715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 3735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int scrollByPage; 3745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // See comment at the top of the file for why an int is used here. 3765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int hasPreciseScrollingDeltas; 3775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Phase phase; 3785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Phase momentumPhase; 3795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebMouseWheelEvent(unsigned sizeParam = sizeof(WebMouseWheelEvent)) 3815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebMouseEvent(sizeParam) 3825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , deltaX(0.0f) 3835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , deltaY(0.0f) 3845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , wheelTicksX(0.0f) 3855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , wheelTicksY(0.0f) 3865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , accelerationRatioX(1.0f) 3875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , accelerationRatioY(1.0f) 3885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , scrollByPage(false) 3895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , hasPreciseScrollingDeltas(false) 3905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , phase(PhaseNone) 3915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , momentumPhase(PhaseNone) 3925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 3935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 3945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 3955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebGestureEvent -------------------------------------------------------------- 3975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebGestureEvent : public WebInputEvent { 3995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 4005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum SourceDevice { 4015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Touchpad, 4025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) Touchscreen, 4035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }; 4045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int x; 4065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int y; 4075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalX; 4085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int globalY; 4095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) SourceDevice sourceDevice; 4105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) union { 4125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) int tapCount; 4145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 4165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } tap; 4175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 4215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } tapDown; 4225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float width; 4255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float height; 4265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } longPress; 4275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float firstFingerWidth; 4305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float firstFingerHeight; 4315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } twoFingerTap; 4325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaX; 4355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float deltaY; 4365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityX; 4375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityY; 4385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } scrollUpdate; 4395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityX; 4425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float velocityY; 4435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } flingStart; 4445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) struct { 4465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float scale; 4475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } pinchUpdate; 4485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } data; 4495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebGestureEvent(unsigned sizeParam = sizeof(WebGestureEvent)) 4515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 4525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , x(0) 4535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , y(0) 4545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalX(0) 4555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , globalY(0) 4565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) memset(&data, 0, sizeof(data)); 4585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 4605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// WebTouchEvent -------------------------------------------------------------- 4625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class WebTouchEvent : public WebInputEvent { 4645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 4655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Maximum number of simultaneous touches supported on 4665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Ash/Aura. 4675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) enum { touchesLengthCap = 12 }; 4685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned touchesLength; 4705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // List of all touches which are currently down. 4715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchPoint touches[touchesLengthCap]; 4725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned changedTouchesLength; 4745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // List of all touches whose state has changed since the last WebTouchEvent 4755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchPoint changedTouches[touchesLengthCap]; 4765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned targetTouchesLength; 4785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // List of all touches which are currently down and are targeting the event recipient. 4795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchPoint targetTouches[touchesLengthCap]; 4805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebTouchEvent(unsigned sizeParam = sizeof(WebTouchEvent)) 4825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : WebInputEvent(sizeParam) 4835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , touchesLength(0) 4845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , changedTouchesLength(0) 4855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , targetTouchesLength(0) 4865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 4895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#pragma pack(pop) 4915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} // namespace WebKit 4935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#endif 495