Update ANGLE
[WebKit-https.git] / Source / WebCore / platform / PlatformMouseEvent.h
1 /*
2  * Copyright (C) 2004, 2005, 2006, 2009 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. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef PlatformMouseEvent_h
27 #define PlatformMouseEvent_h
28
29 #include "IntPoint.h"
30 #include "PlatformEvent.h"
31 #include <wtf/WindowsExtras.h>
32
33 #if PLATFORM(GTK)
34 typedef struct _GdkEventButton GdkEventButton;
35 typedef struct _GdkEventMotion GdkEventMotion;
36 #endif
37
38 #if PLATFORM(EFL)
39 typedef struct _Evas_Event_Mouse_Down Evas_Event_Mouse_Down;
40 typedef struct _Evas_Event_Mouse_Up Evas_Event_Mouse_Up;
41 typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move;
42 #endif
43
44 namespace WebCore {
45
46 const double ForceAtClick = 1;
47 const double ForceAtForceClick = 2;
48
49     // These button numbers match the ones used in the DOM API, 0 through 2, except for NoButton which isn't specified.
50     enum MouseButton : int8_t { NoButton = -1, LeftButton, MiddleButton, RightButton };
51     enum SyntheticClickType : int8_t { NoTap, OneFingerTap, TwoFingerTap };
52
53     class PlatformMouseEvent : public PlatformEvent {
54     public:
55         PlatformMouseEvent()
56             : PlatformEvent(PlatformEvent::MouseMoved)
57             , m_button(NoButton)
58             , m_clickCount(0)
59             , m_modifierFlags(0)
60 #if PLATFORM(MAC)
61             , m_eventNumber(0)
62             , m_menuTypeForEvent(0)
63 #elif PLATFORM(WIN)
64             , m_didActivateWebView(false)
65 #endif
66         {
67         }
68
69         PlatformMouseEvent(const IntPoint& position, const IntPoint& globalPosition, MouseButton button, PlatformEvent::Type type,
70                            int clickCount, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, double timestamp, double force, SyntheticClickType syntheticClickType)
71             : PlatformEvent(type, shiftKey, ctrlKey, altKey, metaKey, timestamp)
72             , m_position(position)
73             , m_globalPosition(globalPosition)
74             , m_button(button)
75             , m_clickCount(clickCount)
76             , m_modifierFlags(0)
77             , m_force(force)
78             , m_syntheticClickType(syntheticClickType)
79 #if PLATFORM(MAC)
80             , m_eventNumber(0)
81             , m_menuTypeForEvent(0)
82 #elif PLATFORM(WIN)
83             , m_didActivateWebView(false)
84 #endif
85         {
86         }
87
88         const IntPoint& position() const { return m_position; }
89         const IntPoint& globalPosition() const { return m_globalPosition; }
90 #if ENABLE(POINTER_LOCK)
91         const IntPoint& movementDelta() const { return m_movementDelta; }
92 #endif
93
94         MouseButton button() const { return m_button; }
95         int clickCount() const { return m_clickCount; }
96         unsigned modifierFlags() const { return m_modifierFlags; }
97         double force() const { return m_force; }
98         SyntheticClickType syntheticClickType() const { return m_syntheticClickType; }
99
100 #if PLATFORM(GTK) 
101         explicit PlatformMouseEvent(GdkEventButton*);
102         explicit PlatformMouseEvent(GdkEventMotion*);
103         void setClickCount(int count) { m_clickCount = count; }
104 #endif
105
106 #if PLATFORM(EFL)
107         void setClickCount(unsigned int);
108         PlatformMouseEvent(const Evas_Event_Mouse_Down*, IntPoint);
109         PlatformMouseEvent(const Evas_Event_Mouse_Up*, IntPoint);
110         PlatformMouseEvent(const Evas_Event_Mouse_Move*, IntPoint);
111 #endif
112
113 #if PLATFORM(MAC)
114         int eventNumber() const { return m_eventNumber; }
115         int menuTypeForEvent() const { return m_menuTypeForEvent; }
116 #endif
117
118 #if PLATFORM(WIN)
119         PlatformMouseEvent(HWND, UINT, WPARAM, LPARAM, bool didActivateWebView = false);
120         void setClickCount(int count) { m_clickCount = count; }
121         bool didActivateWebView() const { return m_didActivateWebView; }
122 #endif
123
124     protected:
125         IntPoint m_position;
126         IntPoint m_globalPosition;
127 #if ENABLE(POINTER_LOCK)
128         IntPoint m_movementDelta;
129 #endif
130         MouseButton m_button;
131         int m_clickCount;
132         unsigned m_modifierFlags;
133         double m_force { 0 };
134         SyntheticClickType m_syntheticClickType { NoTap };
135
136 #if PLATFORM(MAC)
137         int m_eventNumber;
138         int m_menuTypeForEvent;
139 #elif PLATFORM(WIN)
140         bool m_didActivateWebView;
141 #endif
142     };
143
144 #if COMPILER(MSVC)
145     // These functions are necessary to work around the fact that MSVC will not find a most-specific
146     // operator== to use after implicitly converting MouseButton to an unsigned short.
147     inline bool operator==(unsigned short a, MouseButton b)
148     {
149         return a == static_cast<unsigned short>(b);
150     }
151
152     inline bool operator!=(unsigned short a, MouseButton b)
153     {
154         return a != static_cast<unsigned short>(b);
155     }
156 #endif
157
158 } // namespace WebCore
159
160 #endif // PlatformMouseEvent_h