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

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

Issue 727593003: Implement MouseEvent buttons attribute. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 1 month 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
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.
(...skipping 22 matching lines...) Expand all
33 MouseEventInit::MouseEventInit() 33 MouseEventInit::MouseEventInit()
34 : screenX(0) 34 : screenX(0)
35 , screenY(0) 35 , screenY(0)
36 , clientX(0) 36 , clientX(0)
37 , clientY(0) 37 , clientY(0)
38 , ctrlKey(false) 38 , ctrlKey(false)
39 , altKey(false) 39 , altKey(false)
40 , shiftKey(false) 40 , shiftKey(false)
41 , metaKey(false) 41 , metaKey(false)
42 , button(0) 42 , button(0)
43 , buttons(0)
43 , relatedTarget(nullptr) 44 , relatedTarget(nullptr)
44 { 45 {
45 } 46 }
46 47
47 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& type, const MouseEventInit& initializer) 48 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& type, const MouseEventInit& initializer)
48 { 49 {
49 return adoptRefWillBeNoop(new MouseEvent(type, initializer)); 50 return adoptRefWillBeNoop(new MouseEvent(type, initializer));
50 } 51 }
51 52
52 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& eventT ype, PassRefPtrWillBeRawPtr<AbstractView> view, const PlatformMouseEvent& event, int detail, PassRefPtrWillBeRawPtr<Node> relatedTarget) 53 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& eventT ype, PassRefPtrWillBeRawPtr<AbstractView> view, const PlatformMouseEvent& event, int detail, PassRefPtrWillBeRawPtr<Node> relatedTarget)
53 { 54 {
54 ASSERT(event.type() == PlatformEvent::MouseMoved || event.button() != NoButt on); 55 ASSERT(event.type() == PlatformEvent::MouseMoved || event.button() != NoButt on);
55 56
56 bool isMouseEnterOrLeave = eventType == EventTypeNames::mouseenter || eventT ype == EventTypeNames::mouseleave; 57 bool isMouseEnterOrLeave = eventType == EventTypeNames::mouseenter || eventT ype == EventTypeNames::mouseleave;
57 bool isCancelable = !isMouseEnterOrLeave; 58 bool isCancelable = !isMouseEnterOrLeave;
58 bool isBubbling = !isMouseEnterOrLeave; 59 bool isBubbling = !isMouseEnterOrLeave;
59 60
60 return MouseEvent::create( 61 return MouseEvent::create(
61 eventType, isBubbling, isCancelable, view, 62 eventType, isBubbling, isCancelable, view,
62 detail, event.globalPosition().x(), event.globalPosition().y(), event.po sition().x(), event.position().y(), 63 detail, event.globalPosition().x(), event.globalPosition().y(), event.po sition().x(), event.position().y(),
63 event.movementDelta().x(), event.movementDelta().y(), 64 event.movementDelta().x(), event.movementDelta().y(),
64 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), even t.button(), 65 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), even t.button(), event.buttons(),
65 relatedTarget, nullptr, false, event.syntheticEventType()); 66 relatedTarget, nullptr, false, event.syntheticEventType());
66 } 67 }
67 68
68 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtrWillBeRawPtr<AbstractView> view, 69 PassRefPtrWillBeRawPtr<MouseEvent> MouseEvent::create(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtrWillBeRawPtr<AbstractView> view,
69 int detail, int screenX, int screenY, int pageX, int pageY, 70 int detail, int screenX, int screenY, int pageX, int pageY,
70 int movementX, int movementY, 71 int movementX, int movementY,
71 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, unsigned short butto n, 72 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey,
73 unsigned short button, unsigned short buttons,
72 PassRefPtrWillBeRawPtr<EventTarget> relatedTarget, PassRefPtrWillBeRawPtr<Da taTransfer> dataTransfer, bool isSimulated, PlatformMouseEvent::SyntheticEventTy pe syntheticEventType) 74 PassRefPtrWillBeRawPtr<EventTarget> relatedTarget, PassRefPtrWillBeRawPtr<Da taTransfer> dataTransfer, bool isSimulated, PlatformMouseEvent::SyntheticEventTy pe syntheticEventType)
73 { 75 {
74 return adoptRefWillBeNoop(new MouseEvent(type, canBubble, cancelable, view, 76 return adoptRefWillBeNoop(new MouseEvent(type, canBubble, cancelable, view,
75 detail, screenX, screenY, pageX, pageY, 77 detail, screenX, screenY, pageX, pageY,
76 movementX, movementY, 78 movementX, movementY,
77 ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, dataTransfer, isSimulated, syntheticEventType)); 79 ctrlKey, altKey, shiftKey, metaKey, button, buttons,
80 relatedTarget, dataTransfer, isSimulated, syntheticEventType));
78 } 81 }
79 82
80 MouseEvent::MouseEvent() 83 MouseEvent::MouseEvent()
81 : m_button(0) 84 : m_button(0)
85 , m_buttons(0)
82 , m_buttonDown(false) 86 , m_buttonDown(false)
83 { 87 {
84 } 88 }
85 89
86 MouseEvent::MouseEvent(const AtomicString& eventType, bool canBubble, bool cance lable, PassRefPtrWillBeRawPtr<AbstractView> view, 90 MouseEvent::MouseEvent(const AtomicString& eventType, bool canBubble, bool cance lable, PassRefPtrWillBeRawPtr<AbstractView> view,
87 int detail, int screenX, int screenY, int pageX, int pageY, 91 int detail, int screenX, int screenY, int pageX, int pageY,
88 int movementX, int movementY, 92 int movementX, int movementY,
89 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, 93 bool ctrlKey, bool altKey, bool shiftKey, bool metaKey,
90 unsigned short button, PassRefPtrWillBeRawPtr<EventTarget> relatedTarget, 94 unsigned short button, unsigned short buttons, PassRefPtrWillBeRawPtr<EventT arget> relatedTarget,
91 PassRefPtrWillBeRawPtr<DataTransfer> dataTransfer, bool isSimulated, Platfor mMouseEvent::SyntheticEventType syntheticEventType) 95 PassRefPtrWillBeRawPtr<DataTransfer> dataTransfer, bool isSimulated, Platfor mMouseEvent::SyntheticEventType syntheticEventType)
92 : MouseRelatedEvent(eventType, canBubble, cancelable, view, detail, IntPoint (screenX, screenY), 96 : MouseRelatedEvent(eventType, canBubble, cancelable, view, detail, IntPoint (screenX, screenY),
93 IntPoint(pageX, pageY), 97 IntPoint(pageX, pageY),
94 IntPoint(movementX, movementY), 98 IntPoint(movementX, movementY),
95 ctrlKey, altKey, shiftKey, metaKey, isSimulated) 99 ctrlKey, altKey, shiftKey, metaKey, isSimulated)
96 , m_button(button == (unsigned short)-1 ? 0 : button) 100 , m_button(button == (unsigned short)-1 ? 0 : button)
101 , m_buttons(buttons)
97 , m_buttonDown(button != (unsigned short)-1) 102 , m_buttonDown(button != (unsigned short)-1)
98 , m_relatedTarget(relatedTarget) 103 , m_relatedTarget(relatedTarget)
99 , m_dataTransfer(dataTransfer) 104 , m_dataTransfer(dataTransfer)
100 , m_syntheticEventType(syntheticEventType) 105 , m_syntheticEventType(syntheticEventType)
101 { 106 {
102 } 107 }
103 108
104 MouseEvent::MouseEvent(const AtomicString& eventType, const MouseEventInit& init ializer) 109 MouseEvent::MouseEvent(const AtomicString& eventType, const MouseEventInit& init ializer)
105 : MouseRelatedEvent(eventType, initializer.bubbles, initializer.cancelable, initializer.view, initializer.detail, IntPoint(initializer.screenX, initializer. screenY), 110 : MouseRelatedEvent(eventType, initializer.bubbles, initializer.cancelable, initializer.view, initializer.detail, IntPoint(initializer.screenX, initializer. screenY),
106 IntPoint(0 /* pageX */, 0 /* pageY */), 111 IntPoint(0 /* pageX */, 0 /* pageY */),
107 IntPoint(0 /* movementX */, 0 /* movementY */), 112 IntPoint(0 /* movementX */, 0 /* movementY */),
108 initializer.ctrlKey, initializer.altKey, initializer.shiftKey, initializ er.metaKey, false /* isSimulated */) 113 initializer.ctrlKey, initializer.altKey, initializer.shiftKey, initializ er.metaKey, false /* isSimulated */)
109 , m_button(initializer.button == (unsigned short)-1 ? 0 : initializer.button ) 114 , m_button(initializer.button == (unsigned short)-1 ? 0 : initializer.button )
115 , m_buttons(initializer.buttons)
110 , m_buttonDown(initializer.button != (unsigned short)-1) 116 , m_buttonDown(initializer.button != (unsigned short)-1)
111 , m_relatedTarget(initializer.relatedTarget) 117 , m_relatedTarget(initializer.relatedTarget)
112 , m_dataTransfer(nullptr) 118 , m_dataTransfer(nullptr)
113 { 119 {
114 initCoordinates(IntPoint(initializer.clientX, initializer.clientY)); 120 initCoordinates(IntPoint(initializer.clientX, initializer.clientY));
115 } 121 }
116 122
117 MouseEvent::~MouseEvent() 123 MouseEvent::~MouseEvent()
118 { 124 {
119 } 125 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 PassRefPtrWillBeRawPtr<SimulatedMouseEvent> SimulatedMouseEvent::create(const At omicString& eventType, PassRefPtrWillBeRawPtr<AbstractView> view, PassRefPtrWill BeRawPtr<Event> underlyingEvent) 204 PassRefPtrWillBeRawPtr<SimulatedMouseEvent> SimulatedMouseEvent::create(const At omicString& eventType, PassRefPtrWillBeRawPtr<AbstractView> view, PassRefPtrWill BeRawPtr<Event> underlyingEvent)
199 { 205 {
200 return adoptRefWillBeNoop(new SimulatedMouseEvent(eventType, view, underlyin gEvent)); 206 return adoptRefWillBeNoop(new SimulatedMouseEvent(eventType, view, underlyin gEvent));
201 } 207 }
202 208
203 SimulatedMouseEvent::~SimulatedMouseEvent() 209 SimulatedMouseEvent::~SimulatedMouseEvent()
204 { 210 {
205 } 211 }
206 212
207 SimulatedMouseEvent::SimulatedMouseEvent(const AtomicString& eventType, PassRefP trWillBeRawPtr<AbstractView> view, PassRefPtrWillBeRawPtr<Event> underlyingEvent ) 213 SimulatedMouseEvent::SimulatedMouseEvent(const AtomicString& eventType, PassRefP trWillBeRawPtr<AbstractView> view, PassRefPtrWillBeRawPtr<Event> underlyingEvent )
208 : MouseEvent(eventType, true, true, view, 0, 0, 0, 0, 0, 0, 0, false, false, false, false, 0, 214 : MouseEvent(eventType, true, true, view, 0, 0, 0, 0, 0, 0, 0, false, false, false, false, 0, 0,
209 nullptr, nullptr, true, PlatformMouseEvent::RealOrIndistinguishable) 215 nullptr, nullptr, true, PlatformMouseEvent::RealOrIndistinguishable)
210 { 216 {
211 if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEve nt.get())) { 217 if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEve nt.get())) {
212 m_ctrlKey = keyStateEvent->ctrlKey(); 218 m_ctrlKey = keyStateEvent->ctrlKey();
213 m_altKey = keyStateEvent->altKey(); 219 m_altKey = keyStateEvent->altKey();
214 m_shiftKey = keyStateEvent->shiftKey(); 220 m_shiftKey = keyStateEvent->shiftKey();
215 m_metaKey = keyStateEvent->metaKey(); 221 m_metaKey = keyStateEvent->metaKey();
216 } 222 }
217 setUnderlyingEvent(underlyingEvent); 223 setUnderlyingEvent(underlyingEvent);
218 224
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 bool swallowEvent = event()->defaultHandled() || event()->defaultPrevented() ; 271 bool swallowEvent = event()->defaultHandled() || event()->defaultPrevented() ;
266 272
267 if (event()->type() != EventTypeNames::click || event()->detail() != 2) 273 if (event()->type() != EventTypeNames::click || event()->detail() != 2)
268 return !swallowEvent; 274 return !swallowEvent;
269 275
270 // Special case: If it's a double click event, we also send the dblclick eve nt. This is not part 276 // Special case: If it's a double click event, we also send the dblclick eve nt. This is not part
271 // of the DOM specs, but is used for compatibility with the ondblclick="" at tribute. This is treated 277 // of the DOM specs, but is used for compatibility with the ondblclick="" at tribute. This is treated
272 // as a separate event in other DOM-compliant browsers like Firefox, and so we do the same. 278 // as a separate event in other DOM-compliant browsers like Firefox, and so we do the same.
273 RefPtrWillBeRawPtr<MouseEvent> doubleClickEvent = MouseEvent::create(); 279 RefPtrWillBeRawPtr<MouseEvent> doubleClickEvent = MouseEvent::create();
274 doubleClickEvent->initMouseEvent(EventTypeNames::dblclick, event()->bubbles( ), event()->cancelable(), event()->view(), 280 doubleClickEvent->initMouseEvent(EventTypeNames::dblclick, event()->bubbles( ), event()->cancelable(), event()->view(),
275 event()->detail(), event()->screenX(), even t()->screenY(), event()->clientX(), event()->clientY(), 281 event()->detail(), event()->screenX(), event()->screenY(), event()->clie ntX(), event()->clientY(),
276 event()->ctrlKey(), event()->altKey(), even t()->shiftKey(), event()->metaKey(), 282 event()->ctrlKey(), event()->altKey(), event()->shiftKey(), event()->met aKey(),
277 event()->button(), relatedTarget); 283 event()->button(), relatedTarget);
278 if (event()->defaultHandled()) 284 if (event()->defaultHandled())
279 doubleClickEvent->setDefaultHandled(); 285 doubleClickEvent->setDefaultHandled();
280 EventDispatcher::dispatchEvent(dispatcher->node(), MouseEventDispatchMediato r::create(doubleClickEvent)); 286 EventDispatcher::dispatchEvent(dispatcher->node(), MouseEventDispatchMediato r::create(doubleClickEvent));
281 if (doubleClickEvent->defaultHandled() || doubleClickEvent->defaultPrevented ()) 287 if (doubleClickEvent->defaultHandled() || doubleClickEvent->defaultPrevented ())
282 return false; 288 return false;
283 return !swallowEvent; 289 return !swallowEvent;
284 } 290 }
285 291
286 } // namespace blink 292 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698