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