[BlackBerry] Pass key modifiers with touch and mouse events
[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 COMPUTER, 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 COMPUTER, 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 #if OS(WINDOWS)
32 #include "WindowsExtras.h"
33 #endif
34
35 #if PLATFORM(GTK)
36 typedef struct _GdkEventButton GdkEventButton;
37 typedef struct _GdkEventMotion GdkEventMotion;
38 #endif
39
40 #if PLATFORM(EFL)
41 typedef struct _Evas_Event_Mouse_Down Evas_Event_Mouse_Down;
42 typedef struct _Evas_Event_Mouse_Up Evas_Event_Mouse_Up;
43 typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move;
44 #endif
45
46 #if PLATFORM(WX)
47 class wxMouseEvent;
48 #endif
49
50 namespace WebCore {
51     
52     // These button numbers match the ones used in the DOM API, 0 through 2, except for NoButton which isn't specified.
53     enum MouseButton { NoButton = -1, LeftButton, MiddleButton, RightButton };
54
55 #if PLATFORM(BLACKBERRY)
56     enum MouseInputMethod { PointingDevice, TouchScreen };
57 #endif
58     
59     class PlatformMouseEvent : public PlatformEvent {
60     public:
61         PlatformMouseEvent()
62             : PlatformEvent(PlatformEvent::MouseMoved)
63             , m_button(NoButton)
64             , m_clickCount(0)
65             , m_modifierFlags(0)
66 #if PLATFORM(MAC)
67             , m_eventNumber(0)
68 #elif PLATFORM(WIN)
69             , m_didActivateWebView(false)
70 #endif
71         {
72         }
73
74         PlatformMouseEvent(const IntPoint& position, const IntPoint& globalPosition, MouseButton button, PlatformEvent::Type type,
75                            int clickCount, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, double timestamp)
76             : PlatformEvent(type, shiftKey, ctrlKey, altKey, metaKey, timestamp)
77             , m_position(position)
78             , m_globalPosition(globalPosition)
79             , m_button(button)
80             , m_clickCount(clickCount)
81             , m_modifierFlags(0)
82 #if PLATFORM(MAC)
83             , m_eventNumber(0)
84 #elif PLATFORM(WIN)
85             , m_didActivateWebView(false)
86 #endif
87         {
88         }
89
90         const IntPoint& position() const { return m_position; }
91         const IntPoint& globalPosition() const { return m_globalPosition; }
92 #if ENABLE(POINTER_LOCK)
93         const IntPoint& movementDelta() const { return m_movementDelta; }
94 #endif
95
96         MouseButton button() const { return m_button; }
97         int clickCount() const { return m_clickCount; }
98         unsigned modifierFlags() const { return m_modifierFlags; }
99         
100
101 #if PLATFORM(GTK) 
102         explicit PlatformMouseEvent(GdkEventButton*);
103         explicit PlatformMouseEvent(GdkEventMotion*);
104         void setClickCount(int count) { m_clickCount = count; }
105 #endif
106
107 #if PLATFORM(EFL)
108         void setClickCount(unsigned int);
109         PlatformMouseEvent(const Evas_Event_Mouse_Down*, IntPoint);
110         PlatformMouseEvent(const Evas_Event_Mouse_Up*, IntPoint);
111         PlatformMouseEvent(const Evas_Event_Mouse_Move*, IntPoint);
112 #endif
113
114 #if PLATFORM(MAC)
115         int eventNumber() const { return m_eventNumber; }
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 #if PLATFORM(WX)
125         PlatformMouseEvent(const wxMouseEvent&, const wxPoint& globalPoint, int clickCount);
126 #endif
127
128 #if PLATFORM(BLACKBERRY)
129         PlatformMouseEvent(const IntPoint& eventPosition, const IntPoint& globalPosition, const PlatformEvent::Type, int clickCount, MouseButton, bool shiftKey, bool ctrlKey, bool altKey, MouseInputMethod = PointingDevice);
130         MouseInputMethod inputMethod() const { return m_inputMethod; }
131 #endif
132     protected:
133         IntPoint m_position;
134         IntPoint m_globalPosition;
135 #if ENABLE(POINTER_LOCK)
136         IntPoint m_movementDelta;
137 #endif
138         MouseButton m_button;
139         int m_clickCount;
140         unsigned m_modifierFlags;
141
142 #if PLATFORM(MAC)
143         int m_eventNumber;
144 #elif PLATFORM(WIN)
145         bool m_didActivateWebView;
146 #elif PLATFORM(BLACKBERRY)
147         MouseInputMethod m_inputMethod;
148 #endif
149     };
150
151 } // namespace WebCore
152
153 #endif // PlatformMouseEvent_h