Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Side by Side Diff: Source/core/events/MouseEvent.cpp

Issue 1232003009: Implement DragEvent and move MouseEvent.dataTransfer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix plugin failure of LayoutTest Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/events/MouseEvent.h ('k') | Source/core/events/MouseEvent.idl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2001 Peter Kelly (pmk@post.com) 2 * Copyright (C) 2001 Peter Kelly (pmk@post.com)
3 * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de) 3 * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
4 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) 4 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5 * Copyright (C) 2003, 2005, 2006, 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2005, 2006, 2008 Apple Inc. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details. 15 * Library General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Library General Public License 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 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, 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301, USA. 20 * Boston, MA 02110-1301, USA.
21 */ 21 */
22 22
23 #include "config.h" 23 #include "config.h"
24 #include "core/events/MouseEvent.h" 24 #include "core/events/MouseEvent.h"
25 25
26 #include "bindings/core/v8/DOMWrapperWorld.h" 26 #include "bindings/core/v8/DOMWrapperWorld.h"
27 #include "bindings/core/v8/ScriptState.h" 27 #include "bindings/core/v8/ScriptState.h"
28 #include "core/clipboard/DataTransfer.h"
29 #include "core/dom/Element.h" 28 #include "core/dom/Element.h"
30 #include "core/events/EventDispatcher.h" 29 #include "core/events/EventDispatcher.h"
31 #include "platform/PlatformMouseEvent.h" 30 #include "platform/PlatformMouseEvent.h"
32 31
33 namespace blink { 32 namespace blink {
34 33
35 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(ScriptState* scriptState, const AtomicString& type, const MouseEventInit& initializer) 34 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(ScriptState* scriptState, const AtomicString& type, const MouseEventInit& initializer)
36 { 35 {
37 if (scriptState && scriptState->world().isIsolatedWorld()) 36 if (scriptState && scriptState->world().isIsolatedWorld())
38 UIEventWithKeyState::didCreateEventInIsolatedWorld(initializer.ctrlKey() , initializer.altKey(), initializer.shiftKey(), initializer.metaKey()); 37 UIEventWithKeyState::didCreateEventInIsolatedWorld(initializer.ctrlKey() , initializer.altKey(), initializer.shiftKey(), initializer.metaKey());
39 return adoptRefWillBeNoop(new MouseEvent(type, initializer)); 38 return adoptRefWillBeNoop(new MouseEvent(type, initializer));
40 } 39 }
41 40
42 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& eventT ype, PassRefPtrWillBeRawPtr<AbstractView> view, const PlatformMouseEvent& event, int detail, PassRefPtrWillBeRawPtr<Node> relatedTarget) 41 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& eventT ype, PassRefPtrWillBeRawPtr<AbstractView> view, const PlatformMouseEvent& event, int detail, PassRefPtrWillBeRawPtr<Node> relatedTarget)
43 { 42 {
44 ASSERT(event.type() == PlatformEvent::MouseMoved || event.button() != NoButt on); 43 ASSERT(event.type() == PlatformEvent::MouseMoved || event.button() != NoButt on);
45 44
46 bool isMouseEnterOrLeave = eventType == EventTypeNames::mouseenter || eventT ype == EventTypeNames::mouseleave; 45 bool isMouseEnterOrLeave = eventType == EventTypeNames::mouseenter || eventT ype == EventTypeNames::mouseleave;
47 bool isCancelable = !isMouseEnterOrLeave; 46 bool isCancelable = !isMouseEnterOrLeave;
48 bool isBubbling = !isMouseEnterOrLeave; 47 bool isBubbling = !isMouseEnterOrLeave;
49 48
50 return MouseEvent::create( 49 return MouseEvent::create(
51 eventType, isBubbling, isCancelable, view, 50 eventType, isBubbling, isCancelable, view,
52 detail, event.globalPosition().x(), event.globalPosition().y(), event.po sition().x(), event.position().y(), 51 detail, event.globalPosition().x(), event.globalPosition().y(), event.po sition().x(), event.position().y(),
53 event.movementDelta().x(), event.movementDelta().y(), 52 event.movementDelta().x(), event.movementDelta().y(),
54 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), even t.button(), 53 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), even t.button(),
55 platformModifiersToButtons(event.modifiers()), 54 platformModifiersToButtons(event.modifiers()),
56 relatedTarget, nullptr, false, event.syntheticEventType(), event.timesta mp()); 55 relatedTarget, false, event.syntheticEventType(), event.timestamp());
57 } 56 }
58 57
59 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtrWillBeRawPtr<AbstractView> view, 58 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtrWillBeRawPtr<AbstractView> view,
60 int detail, int screenX, int screenY, int windowX, int windowY, 59 int detail, int screenX, int screenY, int windowX, int windowY,
61 int movementX, int movementY, 60 int movementX, int movementY,
62 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, 61 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey,
63 short button, unsigned short buttons, 62 short button, unsigned short buttons,
64 PassRefPtrWillBeRawPtr<EventTarget> relatedTarget, DataTransfer* dataTransfe r, bool isSimulated, PlatformMouseEvent::SyntheticEventType syntheticEventType, 63 PassRefPtrWillBeRawPtr<EventTarget> relatedTarget, bool isSimulated, Platfor mMouseEvent::SyntheticEventType syntheticEventType,
65 double uiCreateTime) 64 double uiCreateTime)
66 { 65 {
67 return adoptRefWillBeNoop(new MouseEvent(type, canBubble, cancelable, view, 66 return adoptRefWillBeNoop(new MouseEvent(type, canBubble, cancelable, view,
68 detail, screenX, screenY, windowX, windowY, 67 detail, screenX, screenY, windowX, windowY,
69 movementX, movementY, 68 movementX, movementY,
70 ctrlKey, altKey, shiftKey, metaKey, button, buttons, relatedTarget, data Transfer, isSimulated, syntheticEventType, uiCreateTime)); 69 ctrlKey, altKey, shiftKey, metaKey, button, buttons, relatedTarget, isSi mulated, syntheticEventType, uiCreateTime));
71 } 70 }
72 71
73 MouseEvent::MouseEvent() 72 MouseEvent::MouseEvent()
74 : m_button(0) 73 : m_button(0)
75 , m_buttons(0) 74 , m_buttons(0)
76 , m_relatedTarget(nullptr) 75 , m_relatedTarget(nullptr)
77 , m_dataTransfer(nullptr)
78 , m_syntheticEventType(PlatformMouseEvent::RealOrIndistinguishable) 76 , m_syntheticEventType(PlatformMouseEvent::RealOrIndistinguishable)
79 { 77 {
80 } 78 }
81 79
82 MouseEvent::MouseEvent(const AtomicString& eventType, bool canBubble, bool cance lable, PassRefPtrWillBeRawPtr<AbstractView> view, 80 MouseEvent::MouseEvent(const AtomicString& eventType, bool canBubble, bool cance lable, PassRefPtrWillBeRawPtr<AbstractView> view,
83 int detail, int screenX, int screenY, int windowX, int windowY, 81 int detail, int screenX, int screenY, int windowX, int windowY,
84 int movementX, int movementY, 82 int movementX, int movementY,
85 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, 83 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey,
86 short button, unsigned short buttons, PassRefPtrWillBeRawPtr<EventTarget> re latedTarget, 84 short button, unsigned short buttons, PassRefPtrWillBeRawPtr<EventTarget> re latedTarget,
87 DataTransfer* dataTransfer, bool isSimulated, PlatformMouseEvent::SyntheticE ventType syntheticEventType, 85 bool isSimulated, PlatformMouseEvent::SyntheticEventType syntheticEventType,
88 double uiCreateTime) 86 double uiCreateTime)
89 : MouseRelatedEvent(eventType, canBubble, cancelable, view, detail, IntPoint (screenX, screenY), 87 : MouseRelatedEvent(eventType, canBubble, cancelable, view, detail, IntPoint (screenX, screenY),
90 IntPoint(windowX, windowY), 88 IntPoint(windowX, windowY),
91 IntPoint(movementX, movementY), 89 IntPoint(movementX, movementY),
92 ctrlKey, altKey, shiftKey, metaKey, isSimulated, 90 ctrlKey, altKey, shiftKey, metaKey, isSimulated,
93 syntheticEventType == PlatformMouseEvent::FromTouch ? InputDevice::fires TouchEventsInputDevice() : InputDevice::doesntFireTouchEventsInputDevice()) 91 syntheticEventType == PlatformMouseEvent::FromTouch ? InputDevice::fires TouchEventsInputDevice() : InputDevice::doesntFireTouchEventsInputDevice())
94 , m_button(button) 92 , m_button(button)
95 , m_buttons(buttons) 93 , m_buttons(buttons)
96 , m_relatedTarget(relatedTarget) 94 , m_relatedTarget(relatedTarget)
97 , m_dataTransfer(dataTransfer)
98 , m_syntheticEventType(syntheticEventType) 95 , m_syntheticEventType(syntheticEventType)
99 { 96 {
100 setUICreateTime(uiCreateTime); 97 setUICreateTime(uiCreateTime);
101 } 98 }
102 99
103 MouseEvent::MouseEvent(const AtomicString& eventType, const MouseEventInit& init ializer) 100 MouseEvent::MouseEvent(const AtomicString& eventType, const MouseEventInit& init ializer)
104 : MouseRelatedEvent(eventType, initializer.bubbles(), initializer.cancelable (), initializer.view(), initializer.detail(), IntPoint(initializer.screenX(), in itializer.screenY()), 101 : MouseRelatedEvent(eventType, initializer.bubbles(), initializer.cancelable (), initializer.view(), initializer.detail(), IntPoint(initializer.screenX(), in itializer.screenY()),
105 IntPoint(0 /* pageX */, 0 /* pageY */), 102 IntPoint(0 /* pageX */, 0 /* pageY */),
106 IntPoint(initializer.movementX(), initializer.movementY()), 103 IntPoint(initializer.movementX(), initializer.movementY()),
107 initializer.ctrlKey(), initializer.altKey(), initializer.shiftKey(), ini tializer.metaKey(), false /* isSimulated */, initializer.sourceDevice()) 104 initializer.ctrlKey(), initializer.altKey(), initializer.shiftKey(), ini tializer.metaKey(), false /* isSimulated */, initializer.sourceDevice())
108 , m_button(initializer.button()) 105 , m_button(initializer.button())
109 , m_buttons(initializer.buttons()) 106 , m_buttons(initializer.buttons())
110 , m_relatedTarget(initializer.relatedTarget()) 107 , m_relatedTarget(initializer.relatedTarget())
111 , m_dataTransfer(nullptr)
112 , m_syntheticEventType(PlatformMouseEvent::RealOrIndistinguishable) 108 , m_syntheticEventType(PlatformMouseEvent::RealOrIndistinguishable)
113 { 109 {
114 initCoordinates(IntPoint(initializer.clientX(), initializer.clientY())); 110 initCoordinates(IntPoint(initializer.clientX(), initializer.clientY()));
115 } 111 }
116 112
117 MouseEvent::~MouseEvent() 113 MouseEvent::~MouseEvent()
118 { 114 {
119 } 115 }
120 116
121 unsigned short MouseEvent::platformModifiersToButtons(unsigned modifiers) 117 unsigned short MouseEvent::platformModifiersToButtons(unsigned modifiers)
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 m_altKey = altKey; 153 m_altKey = altKey;
158 m_shiftKey = shiftKey; 154 m_shiftKey = shiftKey;
159 m_metaKey = metaKey; 155 m_metaKey = metaKey;
160 m_button = button; 156 m_button = button;
161 m_buttons = buttons; 157 m_buttons = buttons;
162 m_relatedTarget = relatedTarget; 158 m_relatedTarget = relatedTarget;
163 159
164 initCoordinates(IntPoint(clientX, clientY)); 160 initCoordinates(IntPoint(clientX, clientY));
165 161
166 // FIXME: m_isSimulated is not set to false here. 162 // FIXME: m_isSimulated is not set to false here.
167 // FIXME: m_dataTransfer is not set to nullptr here.
168 } 163 }
169 164
170 const AtomicString& MouseEvent::interfaceName() const 165 const AtomicString& MouseEvent::interfaceName() const
171 { 166 {
172 return EventNames::MouseEvent; 167 return EventNames::MouseEvent;
173 } 168 }
174 169
175 bool MouseEvent::isMouseEvent() const 170 bool MouseEvent::isMouseEvent() const
176 { 171 {
177 return true; 172 return true;
178 } 173 }
179 174
180 bool MouseEvent::isDragEvent() const
181 {
182 const AtomicString& t = type();
183 return t == EventTypeNames::dragenter || t == EventTypeNames::dragover || t == EventTypeNames::dragleave || t == EventTypeNames::drop
184 || t == EventTypeNames::dragstart|| t == EventTypeNames::drag || t == EventTypeNames::dragend;
185 }
186
187 int MouseEvent::which() const 175 int MouseEvent::which() const
188 { 176 {
189 // For the DOM, the return values for left, middle and right mouse buttons a re 0, 1, 2, respectively. 177 // For the DOM, the return values for left, middle and right mouse buttons a re 0, 1, 2, respectively.
190 // For the Netscape "which" property, the return values for left, middle and right mouse buttons are 1, 2, 3, respectively. 178 // For the Netscape "which" property, the return values for left, middle and right mouse buttons are 1, 2, 3, respectively.
191 // So we must add 1. 179 // So we must add 1.
192 return m_button + 1; 180 return m_button + 1;
193 } 181 }
194 182
195 Node* MouseEvent::toElement() const 183 Node* MouseEvent::toElement() const
196 { 184 {
197 // MSIE extension - "the object toward which the user is moving the mouse po inter" 185 // MSIE extension - "the object toward which the user is moving the mouse po inter"
198 if (type() == EventTypeNames::mouseout || type() == EventTypeNames::mouselea ve) 186 if (type() == EventTypeNames::mouseout || type() == EventTypeNames::mouselea ve)
199 return relatedTarget() ? relatedTarget()->toNode() : 0; 187 return relatedTarget() ? relatedTarget()->toNode() : 0;
200 188
201 return target() ? target()->toNode() : 0; 189 return target() ? target()->toNode() : 0;
202 } 190 }
203 191
204 Node* MouseEvent::fromElement() const 192 Node* MouseEvent::fromElement() const
205 { 193 {
206 // MSIE extension - "object from which activation or the mouse pointer is ex iting during the event" (huh?) 194 // MSIE extension - "object from which activation or the mouse pointer is ex iting during the event" (huh?)
207 if (type() != EventTypeNames::mouseout && type() != EventTypeNames::mouselea ve) 195 if (type() != EventTypeNames::mouseout && type() != EventTypeNames::mouselea ve)
208 return relatedTarget() ? relatedTarget()->toNode() : 0; 196 return relatedTarget() ? relatedTarget()->toNode() : 0;
209 197
210 return target() ? target()->toNode() : 0; 198 return target() ? target()->toNode() : 0;
211 } 199 }
212 200
213 DEFINE_TRACE(MouseEvent) 201 DEFINE_TRACE(MouseEvent)
214 { 202 {
215 visitor->trace(m_relatedTarget); 203 visitor->trace(m_relatedTarget);
216 visitor->trace(m_dataTransfer);
217 MouseRelatedEvent::trace(visitor); 204 MouseRelatedEvent::trace(visitor);
218 } 205 }
219 206
220 PassRefPtrWillBeRawPtr<SimulatedMouseEvent> SimulatedMouseEvent::create(const At omicString& eventType, PassRefPtrWillBeRawPtr<AbstractView> view, PassRefPtrWill BeRawPtr<Event> underlyingEvent) 207 PassRefPtrWillBeRawPtr<SimulatedMouseEvent> SimulatedMouseEvent::create(const At omicString& eventType, PassRefPtrWillBeRawPtr<AbstractView> view, PassRefPtrWill BeRawPtr<Event> underlyingEvent)
221 { 208 {
222 return adoptRefWillBeNoop(new SimulatedMouseEvent(eventType, view, underlyin gEvent)); 209 return adoptRefWillBeNoop(new SimulatedMouseEvent(eventType, view, underlyin gEvent));
223 } 210 }
224 211
225 SimulatedMouseEvent::~SimulatedMouseEvent() 212 SimulatedMouseEvent::~SimulatedMouseEvent()
226 { 213 {
227 } 214 }
228 215
229 SimulatedMouseEvent::SimulatedMouseEvent(const AtomicString& eventType, PassRefP trWillBeRawPtr<AbstractView> view, PassRefPtrWillBeRawPtr<Event> underlyingEvent ) 216 SimulatedMouseEvent::SimulatedMouseEvent(const AtomicString& eventType, PassRefP trWillBeRawPtr<AbstractView> view, PassRefPtrWillBeRawPtr<Event> underlyingEvent )
230 : MouseEvent(eventType, true, true, view, 0, 0, 0, 0, 0, 0, 0, false, false, false, false, 0, 0, 217 : MouseEvent(eventType, true, true, view, 0, 0, 0, 0, 0, 0, 0, false, false, false, false, 0, 0,
231 nullptr, nullptr, true, PlatformMouseEvent::RealOrIndistinguishable) 218 nullptr, true, PlatformMouseEvent::RealOrIndistinguishable)
232 { 219 {
233 setTrusted(true); 220 setTrusted(true);
234 if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEve nt.get())) { 221 if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEve nt.get())) {
235 m_ctrlKey = keyStateEvent->ctrlKey(); 222 m_ctrlKey = keyStateEvent->ctrlKey();
236 m_altKey = keyStateEvent->altKey(); 223 m_altKey = keyStateEvent->altKey();
237 m_shiftKey = keyStateEvent->shiftKey(); 224 m_shiftKey = keyStateEvent->shiftKey();
238 m_metaKey = keyStateEvent->metaKey(); 225 m_metaKey = keyStateEvent->metaKey();
239 } 226 }
240 setUnderlyingEvent(underlyingEvent); 227 setUnderlyingEvent(underlyingEvent);
241 228
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 doubleClickEvent->setTrusted(event().isTrusted()); 295 doubleClickEvent->setTrusted(event().isTrusted());
309 if (event().defaultHandled()) 296 if (event().defaultHandled())
310 doubleClickEvent->setDefaultHandled(); 297 doubleClickEvent->setDefaultHandled();
311 EventDispatcher::dispatchEvent(dispatcher.node(), MouseEventDispatchMediator ::create(doubleClickEvent)); 298 EventDispatcher::dispatchEvent(dispatcher.node(), MouseEventDispatchMediator ::create(doubleClickEvent));
312 if (doubleClickEvent->defaultHandled() || doubleClickEvent->defaultPrevented ()) 299 if (doubleClickEvent->defaultHandled() || doubleClickEvent->defaultPrevented ())
313 return false; 300 return false;
314 return !swallowEvent; 301 return !swallowEvent;
315 } 302 }
316 303
317 } // namespace blink 304 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/events/MouseEvent.h ('k') | Source/core/events/MouseEvent.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698