1/*
2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef PlatformEvent_h
27#define PlatformEvent_h
28
29namespace WebCore {
30
31class PlatformEvent {
32public:
33    enum Type {
34        NoType = 0,
35
36        // PlatformKeyboardEvent
37        KeyDown,
38        KeyUp,
39        RawKeyDown,
40        Char,
41
42        // PlatformMouseEvent
43        MouseMoved,
44        MousePressed,
45        MouseReleased,
46        MouseScroll,
47
48        // PlatformWheelEvent
49        Wheel,
50
51        // PlatformGestureEvent
52        GestureScrollBegin,
53        GestureScrollEnd,
54        GestureScrollUpdate,
55        GestureScrollUpdateWithoutPropagation,
56        GestureTap,
57        GestureTapDown,
58        GestureTapDownCancel,
59        GestureTwoFingerTap,
60        GestureLongPress,
61        GestureLongTap,
62        GesturePinchBegin,
63        GesturePinchEnd,
64        GesturePinchUpdate,
65
66#if ENABLE(TOUCH_EVENTS)
67        // PlatformTouchEvent
68        TouchStart,
69        TouchMove,
70        TouchEnd,
71        TouchCancel,
72#endif
73    };
74
75    enum Modifiers {
76        AltKey      = 1 << 0,
77        CtrlKey     = 1 << 1,
78        MetaKey     = 1 << 2,
79        ShiftKey    = 1 << 3,
80    };
81
82    Type type() const { return static_cast<Type>(m_type); }
83
84    bool shiftKey() const { return m_modifiers & ShiftKey; }
85    bool ctrlKey() const { return m_modifiers & CtrlKey; }
86    bool altKey() const { return m_modifiers & AltKey; }
87    bool metaKey() const { return m_modifiers & MetaKey; }
88
89    unsigned modifiers() const { return m_modifiers; }
90
91    double timestamp() const { return m_timestamp; }
92
93protected:
94    PlatformEvent()
95        : m_type(NoType)
96        , m_modifiers(0)
97        , m_timestamp(0)
98    {
99    }
100
101    explicit PlatformEvent(Type type)
102        : m_type(type)
103        , m_modifiers(0)
104        , m_timestamp(0)
105    {
106    }
107
108    PlatformEvent(Type type, Modifiers modifiers, double timestamp)
109        : m_type(type)
110        , m_modifiers(modifiers)
111        , m_timestamp(timestamp)
112    {
113    }
114
115    PlatformEvent(Type type, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, double timestamp)
116        : m_type(type)
117        , m_modifiers(0)
118        , m_timestamp(timestamp)
119    {
120        if (shiftKey)
121            m_modifiers |= ShiftKey;
122        if (ctrlKey)
123            m_modifiers |= CtrlKey;
124        if (altKey)
125            m_modifiers |= AltKey;
126        if (metaKey)
127            m_modifiers |= MetaKey;
128    }
129
130    // Explicit protected destructor so that people don't accidentally
131    // delete a PlatformEvent.
132    ~PlatformEvent()
133    {
134    }
135
136    unsigned m_type;
137    unsigned m_modifiers;
138    double m_timestamp;
139};
140
141} // namespace WebCore
142
143#endif // PlatformEvent_h
144