OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 2001 Peter Kelly (pmk@post.com) | |
3 * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de) | |
4 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) | |
5 * Copyright (C) 2003, 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. | |
6 * | |
7 * This library is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Library General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2 of the License, or (at your option) any later version. | |
11 * | |
12 * This library is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Library General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Library General Public License | |
18 * along with this library; see the file COPYING.LIB. If not, write to | |
19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
20 * Boston, MA 02110-1301, USA. | |
21 * | |
22 */ | |
23 | |
24 #ifndef MouseEvent_h | |
25 #define MouseEvent_h | |
26 | |
27 #include "core/events/EventDispatchMediator.h" | |
28 #include "core/events/MouseRelatedEvent.h" | |
29 | |
30 namespace WebCore { | |
31 | |
32 class Clipboard; | |
33 class EventDispatcher; | |
34 class PlatformMouseEvent; | |
35 | |
36 struct MouseEventInit : public UIEventInit { | |
37 MouseEventInit(); | |
38 | |
39 int screenX; | |
40 int screenY; | |
41 int clientX; | |
42 int clientY; | |
43 bool ctrlKey; | |
44 bool altKey; | |
45 bool shiftKey; | |
46 bool metaKey; | |
47 unsigned short button; | |
48 RefPtr<EventTarget> relatedTarget; | |
49 }; | |
50 | |
51 class MouseEvent : public MouseRelatedEvent { | |
52 public: | |
53 static PassRefPtr<MouseEvent> create() | |
54 { | |
55 return adoptRef(new MouseEvent); | |
56 } | |
57 | |
58 static PassRefPtr<MouseEvent> create(const AtomicString& type, bool canBubbl
e, bool cancelable, PassRefPtr<AbstractView>, | |
59 int detail, int screenX, int screenY, int pageX, int pageY, | |
60 int movementX, int movementY, | |
61 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, unsigned short b
utton, | |
62 PassRefPtr<EventTarget> relatedTarget); | |
63 | |
64 static PassRefPtr<MouseEvent> create(const AtomicString& type, bool canBubbl
e, bool cancelable, PassRefPtr<AbstractView>, | |
65 int detail, int screenX, int screenY, int pageX, int pageY, | |
66 int movementX, int movementY, | |
67 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, unsigned short b
utton, | |
68 PassRefPtr<EventTarget> relatedTarget, PassRefPtr<Clipboard>, bool isSim
ulated = false); | |
69 | |
70 static PassRefPtr<MouseEvent> create(const AtomicString& eventType, PassRefP
tr<AbstractView>, const PlatformMouseEvent&, int detail, PassRefPtr<Node> relate
dTarget); | |
71 | |
72 static PassRefPtr<MouseEvent> create(const AtomicString& eventType, const Mo
useEventInit&); | |
73 | |
74 virtual ~MouseEvent(); | |
75 | |
76 void initMouseEvent(const AtomicString& type, bool canBubble, bool cancelabl
e, PassRefPtr<AbstractView>, | |
77 int detail, int screenX, int screenY, int clientX, int clientY, | |
78 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, | |
79 unsigned short button, PassRefPtr<EventTarget> relatedTarget); | |
80 | |
81 // WinIE uses 1,4,2 for left/middle/right but not for click (just for moused
own/up, maybe others), | |
82 // but we will match the standard DOM. | |
83 unsigned short button() const { return m_button; } | |
84 bool buttonDown() const { return m_buttonDown; } | |
85 EventTarget* relatedTarget() const { return m_relatedTarget.get(); } | |
86 void setRelatedTarget(PassRefPtr<EventTarget> relatedTarget) { m_relatedTarg
et = relatedTarget; } | |
87 | |
88 Clipboard* clipboard() const { return m_clipboard.get(); } | |
89 | |
90 Node* toElement() const; | |
91 Node* fromElement() const; | |
92 | |
93 Clipboard* dataTransfer() const { return isDragEvent() ? m_clipboard.get() :
0; } | |
94 | |
95 virtual const AtomicString& interfaceName() const; | |
96 | |
97 virtual bool isMouseEvent() const; | |
98 virtual bool isDragEvent() const; | |
99 virtual int which() const; | |
100 | |
101 protected: | |
102 MouseEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRe
fPtr<AbstractView>, | |
103 int detail, int screenX, int screenY, int pageX, int pageY, | |
104 int movementX, int movementY, | |
105 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, unsigned short b
utton, | |
106 PassRefPtr<EventTarget> relatedTarget, PassRefPtr<Clipboard>, bool isSim
ulated); | |
107 | |
108 MouseEvent(const AtomicString& type, const MouseEventInit&); | |
109 | |
110 MouseEvent(); | |
111 | |
112 private: | |
113 unsigned short m_button; | |
114 bool m_buttonDown; | |
115 RefPtr<EventTarget> m_relatedTarget; | |
116 RefPtr<Clipboard> m_clipboard; | |
117 }; | |
118 | |
119 class SimulatedMouseEvent : public MouseEvent { | |
120 public: | |
121 static PassRefPtr<SimulatedMouseEvent> create(const AtomicString& eventType,
PassRefPtr<AbstractView>, PassRefPtr<Event> underlyingEvent); | |
122 virtual ~SimulatedMouseEvent(); | |
123 | |
124 private: | |
125 SimulatedMouseEvent(const AtomicString& eventType, PassRefPtr<AbstractView>,
PassRefPtr<Event> underlyingEvent); | |
126 }; | |
127 | |
128 class MouseEventDispatchMediator : public EventDispatchMediator { | |
129 public: | |
130 enum MouseEventType { SyntheticMouseEvent, NonSyntheticMouseEvent}; | |
131 static PassRefPtr<MouseEventDispatchMediator> create(PassRefPtr<MouseEvent>,
MouseEventType = NonSyntheticMouseEvent); | |
132 | |
133 private: | |
134 explicit MouseEventDispatchMediator(PassRefPtr<MouseEvent>, MouseEventType); | |
135 MouseEvent* event() const; | |
136 | |
137 virtual bool dispatchEvent(EventDispatcher*) const OVERRIDE; | |
138 bool isSyntheticMouseEvent() const { return m_mouseEventType == SyntheticMou
seEvent; } | |
139 MouseEventType m_mouseEventType; | |
140 }; | |
141 | |
142 inline MouseEvent* toMouseEvent(Event* event) | |
143 { | |
144 ASSERT_WITH_SECURITY_IMPLICATION(!event || event->isMouseEvent()); | |
145 return static_cast<MouseEvent*>(event); | |
146 } | |
147 | |
148 } // namespace WebCore | |
149 | |
150 #endif // MouseEvent_h | |
OLD | NEW |