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