d1939f7ad8599c25c1bccab4a686f09a2b113654
[WebKit-https.git] / Source / WebCore / platform / PlatformEvent.h
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
29 namespace WebCore {
30
31 class PlatformEvent {
32 public:
33     enum Type : uint8_t {
34         NoType = 0,
35
36         // PlatformKeyboardEvent
37         KeyDown,
38         KeyUp,
39         RawKeyDown,
40         Char,
41
42         // PlatformMouseEvent
43         MouseMoved,
44         MousePressed,
45         MouseReleased,
46         MouseForceChanged,
47         MouseForceDown,
48         MouseForceUp,
49         MouseScroll,
50
51         // PlatformWheelEvent
52         Wheel,
53
54 #if ENABLE(TOUCH_EVENTS)
55         // PlatformTouchEvent
56         TouchStart,
57         TouchMove,
58         TouchEnd,
59         TouchCancel,
60 #endif
61     };
62
63     enum Modifiers : uint8_t {
64         AltKey      = 1 << 0,
65         CtrlKey     = 1 << 1,
66         MetaKey     = 1 << 2,
67         ShiftKey    = 1 << 3,
68     };
69
70     Type type() const { return static_cast<Type>(m_type); }
71
72     bool shiftKey() const { return m_modifiers & ShiftKey; }
73     bool ctrlKey() const { return m_modifiers & CtrlKey; }
74     bool altKey() const { return m_modifiers & AltKey; }
75     bool metaKey() const { return m_modifiers & MetaKey; }
76
77     unsigned modifiers() const { return m_modifiers; }
78
79     double timestamp() const { return m_timestamp; }
80
81 protected:
82     PlatformEvent()
83         : m_type(NoType)
84         , m_modifiers(0)
85         , m_timestamp(0)
86     {
87     }
88
89     explicit PlatformEvent(Type type)
90         : m_type(type)
91         , m_modifiers(0)
92         , m_timestamp(0)
93     {
94     }
95
96     PlatformEvent(Type type, Modifiers modifiers, double timestamp)
97         : m_type(type)
98         , m_modifiers(modifiers)
99         , m_timestamp(timestamp)
100     {
101     }
102
103     PlatformEvent(Type type, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, double timestamp)
104         : m_type(type)
105         , m_modifiers(0)
106         , m_timestamp(timestamp)
107     {
108         if (shiftKey)
109             m_modifiers |= ShiftKey;
110         if (ctrlKey)
111             m_modifiers |= CtrlKey;
112         if (altKey)
113             m_modifiers |= AltKey;
114         if (metaKey)
115             m_modifiers |= MetaKey;
116     }
117
118     // Explicit protected destructor so that people don't accidentally
119     // delete a PlatformEvent.
120     ~PlatformEvent()
121     {
122     }
123
124     unsigned m_type;
125     unsigned m_modifiers;
126     double m_timestamp;
127 };
128
129 } // namespace WebCore
130
131 #endif // PlatformEvent_h