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 31 #if PLATFORM(GTK) 32 typedef struct _GdkEventButton GdkEventButton; 33 typedef struct _GdkEventMotion GdkEventMotion; 34 #endif 35 36 #if PLATFORM(EFL) 37 typedef struct _Evas_Event_Mouse_Down Evas_Event_Mouse_Down; 38 typedef struct _Evas_Event_Mouse_Up Evas_Event_Mouse_Up; 39 typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move; 40 #endif 41 42 #if PLATFORM(QT) 43 QT_BEGIN_NAMESPACE 44 class QInputEvent; 45 class QGraphicsSceneMouseEvent; 46 QT_END_NAMESPACE 47 #endif 48 49 #if PLATFORM(WIN) 50 typedef struct HWND__* HWND; 51 typedef unsigned UINT; 52 typedef unsigned WPARAM; 53 typedef long LPARAM; 54 #endif 55 56 #if PLATFORM(WX) 57 class wxMouseEvent; 58 #endif 59 60 #if PLATFORM(HAIKU) 61 class BMessage; 62 #endif 63 64 #if PLATFORM(BREWMP) 65 typedef unsigned short uint16; 66 typedef unsigned long int uint32; 67 #define AEEEvent uint16 68 #endif 69 70 namespace WebCore { 71 72 // These button numbers match the ones used in the DOM API, 0 through 2, except for NoButton which isn't specified. 73 enum MouseButton { NoButton = -1, LeftButton, MiddleButton, RightButton }; 74 enum MouseEventType { MouseEventMoved, MouseEventPressed, MouseEventReleased, MouseEventScroll }; 75 76 class PlatformMouseEvent { 77 public: PlatformMouseEvent()78 PlatformMouseEvent() 79 : m_button(NoButton) 80 , m_eventType(MouseEventMoved) 81 , m_clickCount(0) 82 , m_shiftKey(false) 83 , m_ctrlKey(false) 84 , m_altKey(false) 85 , m_metaKey(false) 86 , m_timestamp(0) 87 , m_modifierFlags(0) 88 #if PLATFORM(MAC) 89 , m_eventNumber(0) 90 #elif PLATFORM(WIN) 91 , m_didActivateWebView(false) 92 #endif 93 { 94 } 95 PlatformMouseEvent(const IntPoint & position,const IntPoint & globalPosition,MouseButton button,MouseEventType eventType,int clickCount,bool shift,bool ctrl,bool alt,bool meta,double timestamp)96 PlatformMouseEvent(const IntPoint& position, const IntPoint& globalPosition, MouseButton button, MouseEventType eventType, 97 int clickCount, bool shift, bool ctrl, bool alt, bool meta, double timestamp) 98 : m_position(position) 99 , m_globalPosition(globalPosition) 100 , m_button(button) 101 , m_eventType(eventType) 102 , m_clickCount(clickCount) 103 , m_shiftKey(shift) 104 , m_ctrlKey(ctrl) 105 , m_altKey(alt) 106 , m_metaKey(meta) 107 , m_timestamp(timestamp) 108 , m_modifierFlags(0) 109 #if PLATFORM(MAC) 110 , m_eventNumber(0) 111 #elif PLATFORM(WIN) 112 , m_didActivateWebView(false) 113 #endif 114 { 115 } 116 pos()117 const IntPoint& pos() const { return m_position; } x()118 int x() const { return m_position.x(); } y()119 int y() const { return m_position.y(); } globalX()120 int globalX() const { return m_globalPosition.x(); } globalY()121 int globalY() const { return m_globalPosition.y(); } button()122 MouseButton button() const { return m_button; } eventType()123 MouseEventType eventType() const { return m_eventType; } clickCount()124 int clickCount() const { return m_clickCount; } shiftKey()125 bool shiftKey() const { return m_shiftKey; } ctrlKey()126 bool ctrlKey() const { return m_ctrlKey; } altKey()127 bool altKey() const { return m_altKey; } metaKey()128 bool metaKey() const { return m_metaKey; } modifierFlags()129 unsigned modifierFlags() const { return m_modifierFlags; } 130 131 // Time in seconds. timestamp()132 double timestamp() const { return m_timestamp; } 133 134 #if PLATFORM(GTK) 135 PlatformMouseEvent(GdkEventButton*); 136 PlatformMouseEvent(GdkEventMotion*); setClickCount(int count)137 void setClickCount(int count) { m_clickCount = count; } 138 #endif 139 140 #if PLATFORM(EFL) 141 void setClickCount(unsigned int); 142 PlatformMouseEvent(const Evas_Event_Mouse_Down*, IntPoint); 143 PlatformMouseEvent(const Evas_Event_Mouse_Up*, IntPoint); 144 PlatformMouseEvent(const Evas_Event_Mouse_Move*, IntPoint); 145 #endif 146 147 #if PLATFORM(MAC) 148 #if defined(__OBJC__) 149 PlatformMouseEvent(NSEvent *, NSView *windowView); 150 #endif 151 PlatformMouseEvent(int x, int y, int globalX, int globalY, MouseButton button, MouseEventType eventType, 152 int clickCount, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, double timestamp, 153 unsigned modifierFlags, int eventNumber); eventNumber()154 int eventNumber() const { return m_eventNumber; } 155 #endif 156 157 #if PLATFORM(QT) 158 PlatformMouseEvent(QInputEvent*, int clickCount); 159 PlatformMouseEvent(QGraphicsSceneMouseEvent*, int clickCount); 160 #endif 161 162 #if PLATFORM(WIN) 163 PlatformMouseEvent(HWND, UINT, WPARAM, LPARAM, bool didActivateWebView = false); setClickCount(int count)164 void setClickCount(int count) { m_clickCount = count; } didActivateWebView()165 bool didActivateWebView() const { return m_didActivateWebView; } 166 #endif 167 168 #if PLATFORM(WX) 169 PlatformMouseEvent(const wxMouseEvent&, const wxPoint& globalPoint, int clickCount); 170 #endif 171 172 #if PLATFORM(HAIKU) 173 PlatformMouseEvent(const BMessage*); 174 #endif 175 176 #if PLATFORM(BREWMP) 177 PlatformMouseEvent(AEEEvent, uint16 wParam, uint32 dwParam); 178 #endif 179 180 protected: 181 IntPoint m_position; 182 IntPoint m_globalPosition; 183 MouseButton m_button; 184 MouseEventType m_eventType; 185 int m_clickCount; 186 bool m_shiftKey; 187 bool m_ctrlKey; 188 bool m_altKey; 189 bool m_metaKey; 190 double m_timestamp; // unit: seconds 191 unsigned m_modifierFlags; 192 193 #if PLATFORM(MAC) 194 int m_eventNumber; 195 #elif PLATFORM(WIN) 196 bool m_didActivateWebView; 197 #endif 198 }; 199 200 #if PLATFORM(MAC) && defined(__OBJC__) 201 IntPoint globalPoint(const NSPoint& windowPoint, NSWindow *); 202 IntPoint pointForEvent(NSEvent *, NSView *windowView); 203 IntPoint globalPointForEvent(NSEvent *); 204 #endif 205 206 } // namespace WebCore 207 208 #endif // PlatformMouseEvent_h 209