| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/input/PointerEventManager.h" | 5 #include "core/input/PointerEventManager.h" |
| 6 | 6 |
| 7 #include "core/dom/shadow/FlatTreeTraversal.h" | 7 #include "core/dom/shadow/FlatTreeTraversal.h" |
| 8 #include "core/events/MouseEvent.h" | 8 #include "core/events/MouseEvent.h" |
| 9 #include "core/input/EventHandler.h" | 9 #include "core/input/EventHandler.h" |
| 10 | 10 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 ASSERT_NOT_REACHED(); | 51 ASSERT_NOT_REACHED(); |
| 52 return emptyAtom; | 52 return emptyAtom; |
| 53 } | 53 } |
| 54 | 54 |
| 55 bool isInDocument(PassRefPtrWillBeRawPtr<EventTarget> n) | 55 bool isInDocument(PassRefPtrWillBeRawPtr<EventTarget> n) |
| 56 { | 56 { |
| 57 return n && n->toNode() && n->toNode()->inDocument(); | 57 return n && n->toNode() && n->toNode()->inDocument(); |
| 58 } | 58 } |
| 59 | 59 |
| 60 WebInputEventResult dispatchPointerEvent( | 60 WebInputEventResult dispatchPointerEvent( |
| 61 PassRefPtrWillBeRawPtr<EventTarget> target, | 61 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, |
| 62 PassRefPtrWillBeRawPtr<PointerEvent> pointerevent, | 62 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, |
| 63 bool checkForListener = false) | 63 bool checkForListener = false) |
| 64 { | 64 { |
| 65 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| 66 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; |
| 65 if (!RuntimeEnabledFeatures::pointerEventEnabled()) | 67 if (!RuntimeEnabledFeatures::pointerEventEnabled()) |
| 66 return WebInputEventResult::NotHandled; | 68 return WebInputEventResult::NotHandled; |
| 67 if (!checkForListener || target->hasEventListeners(pointerevent->type())) { | 69 if (!checkForListener || target->hasEventListeners(pointerEvent->type())) { |
| 68 bool dispatchResult = target->dispatchEvent(pointerevent); | 70 bool dispatchResult = target->dispatchEvent(pointerEvent); |
| 69 return EventHandler::eventToEventResult(pointerevent, dispatchResult); | 71 return EventHandler::eventToEventResult(pointerEvent, dispatchResult); |
| 70 } | 72 } |
| 71 return WebInputEventResult::NotHandled; | 73 return WebInputEventResult::NotHandled; |
| 72 } | 74 } |
| 73 | 75 |
| 74 WebInputEventResult dispatchMouseEvent( | 76 WebInputEventResult dispatchMouseEvent( |
| 75 PassRefPtrWillBeRawPtr<EventTarget> target, | 77 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, |
| 76 const AtomicString& mouseEventType, | 78 const AtomicString& mouseEventType, |
| 77 const PlatformMouseEvent& mouseEvent, | 79 const PlatformMouseEvent& mouseEvent, |
| 78 PassRefPtrWillBeRawPtr<EventTarget> relatedTarget, | 80 PassRefPtrWillBeRawPtr<EventTarget> prpRelatedTarget, |
| 79 int detail = 0, | 81 int detail = 0, |
| 80 bool checkForListener = false) | 82 bool checkForListener = false) |
| 81 { | 83 { |
| 84 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| 85 RefPtrWillBeRawPtr<EventTarget> relatedTarget = prpRelatedTarget; |
| 82 if (target->toNode() | 86 if (target->toNode() |
| 83 && (!checkForListener || target->hasEventListeners(mouseEventType))) { | 87 && (!checkForListener || target->hasEventListeners(mouseEventType))) { |
| 84 RefPtrWillBeRawPtr<Node> targetNode = target->toNode(); | 88 RefPtrWillBeRawPtr<Node> targetNode = target->toNode(); |
| 85 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(mouseEventType
, | 89 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(mouseEventType
, |
| 86 targetNode->document().domWindow(), mouseEvent, detail, | 90 targetNode->document().domWindow(), mouseEvent, detail, |
| 87 relatedTarget ? relatedTarget->toNode() : nullptr); | 91 relatedTarget ? relatedTarget->toNode() : nullptr); |
| 88 bool res = target->dispatchEvent(event); | 92 bool res = target->dispatchEvent(event); |
| 89 return EventHandler::eventToEventResult(event, res); | 93 return EventHandler::eventToEventResult(event, res); |
| 90 } | 94 } |
| 91 return WebInputEventResult::NotHandled; | 95 return WebInputEventResult::NotHandled; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 109 const PlatformMouseEvent& mouseEvent, | 113 const PlatformMouseEvent& mouseEvent, |
| 110 PassRefPtrWillBeRawPtr<AbstractView> view) | 114 PassRefPtrWillBeRawPtr<AbstractView> view) |
| 111 { | 115 { |
| 112 // Pointer event type does not matter as it will be overridden in the sendNo
deTransitionEvents | 116 // Pointer event type does not matter as it will be overridden in the sendNo
deTransitionEvents |
| 113 sendNodeTransitionEvents(exitedNode, enteredNode, | 117 sendNodeTransitionEvents(exitedNode, enteredNode, |
| 114 m_pointerEventFactory.create(EventTypeNames::pointerout, mouseEvent, nul
lptr, view), | 118 m_pointerEventFactory.create(EventTypeNames::pointerout, mouseEvent, nul
lptr, view), |
| 115 mouseEvent, true); | 119 mouseEvent, true); |
| 116 } | 120 } |
| 117 | 121 |
| 118 void PointerEventManager::sendNodeTransitionEvents( | 122 void PointerEventManager::sendNodeTransitionEvents( |
| 119 PassRefPtrWillBeRawPtr<EventTarget> exitedTarget, | 123 PassRefPtrWillBeRawPtr<EventTarget> prpExitedTarget, |
| 120 PassRefPtrWillBeRawPtr<EventTarget> enteredTarget, | 124 PassRefPtrWillBeRawPtr<EventTarget> prpEnteredTarget, |
| 121 PassRefPtrWillBeRawPtr<PointerEvent> pointerEvent, | 125 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, |
| 122 const PlatformMouseEvent& mouseEvent, bool sendMouseEvent) | 126 const PlatformMouseEvent& mouseEvent, bool sendMouseEvent) |
| 123 { | 127 { |
| 128 RefPtrWillBeRawPtr<EventTarget> exitedTarget = prpExitedTarget; |
| 129 RefPtrWillBeRawPtr<EventTarget> enteredTarget = prpEnteredTarget; |
| 130 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; |
| 124 if (exitedTarget == enteredTarget) | 131 if (exitedTarget == enteredTarget) |
| 125 return; | 132 return; |
| 126 | 133 |
| 127 // Dispatch pointerout/mouseout events | 134 // Dispatch pointerout/mouseout events |
| 128 if (isInDocument(exitedTarget)) { | 135 if (isInDocument(exitedTarget)) { |
| 129 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.create( | 136 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.create( |
| 130 pointerEvent, EventTypeNames::pointerout, enteredTarget)); | 137 pointerEvent, EventTypeNames::pointerout, enteredTarget)); |
| 131 if (sendMouseEvent) { | 138 if (sendMouseEvent) { |
| 132 dispatchMouseEvent(exitedTarget, | 139 dispatchMouseEvent(exitedTarget, |
| 133 EventTypeNames::mouseout, mouseEvent, enteredTarget); | 140 EventTypeNames::mouseout, mouseEvent, enteredTarget); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 !enteredNodeHasCapturingAncestor); | 238 !enteredNodeHasCapturingAncestor); |
| 232 if (sendMouseEvent) { | 239 if (sendMouseEvent) { |
| 233 dispatchMouseEvent(enteredAncestors[i-1].get(), | 240 dispatchMouseEvent(enteredAncestors[i-1].get(), |
| 234 EventTypeNames::mouseenter, mouseEvent, exitedTarget, | 241 EventTypeNames::mouseenter, mouseEvent, exitedTarget, |
| 235 0, !enteredNodeHasCapturingAncestor); | 242 0, !enteredNodeHasCapturingAncestor); |
| 236 } | 243 } |
| 237 } | 244 } |
| 238 } | 245 } |
| 239 | 246 |
| 240 void PointerEventManager::setNodeUnderPointer( | 247 void PointerEventManager::setNodeUnderPointer( |
| 241 PassRefPtrWillBeRawPtr<PointerEvent> pointerevent, | 248 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, |
| 242 PassRefPtrWillBeRawPtr<EventTarget> target) | 249 PassRefPtrWillBeRawPtr<EventTarget> prpTarget) |
| 243 { | 250 { |
| 244 if (m_nodeUnderPointer.contains(pointerevent->pointerId())) { | 251 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; |
| 252 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| 253 if (m_nodeUnderPointer.contains(pointerEvent->pointerId())) { |
| 245 sendNodeTransitionEvents(m_nodeUnderPointer.get( | 254 sendNodeTransitionEvents(m_nodeUnderPointer.get( |
| 246 pointerevent->pointerId()), target, pointerevent); | 255 pointerEvent->pointerId()), target, pointerEvent); |
| 247 if (!target) | 256 if (!target) |
| 248 m_nodeUnderPointer.remove(pointerevent->pointerId()); | 257 m_nodeUnderPointer.remove(pointerEvent->pointerId()); |
| 249 else | 258 else |
| 250 m_nodeUnderPointer.set(pointerevent->pointerId(), target); | 259 m_nodeUnderPointer.set(pointerEvent->pointerId(), target); |
| 251 } else if (target) { | 260 } else if (target) { |
| 252 sendNodeTransitionEvents(nullptr, target, pointerevent); | 261 sendNodeTransitionEvents(nullptr, target, pointerEvent); |
| 253 m_nodeUnderPointer.add(pointerevent->pointerId(), target); | 262 m_nodeUnderPointer.add(pointerEvent->pointerId(), target); |
| 254 } | 263 } |
| 255 } | 264 } |
| 256 | 265 |
| 257 void PointerEventManager::sendTouchCancelPointerEvent(PassRefPtrWillBeRawPtr<Eve
ntTarget> target, | 266 void PointerEventManager::sendTouchCancelPointerEvent(PassRefPtrWillBeRawPtr<Eve
ntTarget> target, |
| 258 const PlatformTouchPoint& point) | 267 const PlatformTouchPoint& point) |
| 259 { | 268 { |
| 260 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = | 269 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = |
| 261 m_pointerEventFactory.createPointerCancel(point); | 270 m_pointerEventFactory.createPointerCancel(point); |
| 262 | 271 |
| 263 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v
s pointer event capturing | 272 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v
s pointer event capturing |
| 264 target->dispatchEvent(pointerEvent.get()); | 273 target->dispatchEvent(pointerEvent.get()); |
| 265 | 274 |
| 266 m_pointerEventFactory.remove(pointerEvent); | 275 m_pointerEventFactory.remove(pointerEvent); |
| 267 setNodeUnderPointer(pointerEvent, nullptr); | 276 setNodeUnderPointer(pointerEvent, nullptr); |
| 268 } | 277 } |
| 269 | 278 |
| 270 WebInputEventResult PointerEventManager::sendTouchPointerEvent( | 279 WebInputEventResult PointerEventManager::sendTouchPointerEvent( |
| 271 PassRefPtrWillBeRawPtr<EventTarget> target, | 280 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, |
| 272 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, | 281 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, |
| 273 const double width, const double height, | 282 const double width, const double height, |
| 274 const double clientX, const double clientY) | 283 const double clientX, const double clientY) |
| 275 { | 284 { |
| 285 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| 276 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = | 286 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = |
| 277 m_pointerEventFactory.create( | 287 m_pointerEventFactory.create( |
| 278 pointerEventNameForTouchPointState(touchPoint.state()), | 288 pointerEventNameForTouchPointState(touchPoint.state()), |
| 279 touchPoint, modifiers, width, height, clientX, clientY); | 289 touchPoint, modifiers, width, height, clientX, clientY); |
| 280 | 290 |
| 281 setNodeUnderPointer(pointerEvent, target); | 291 setNodeUnderPointer(pointerEvent, target); |
| 282 | 292 |
| 283 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v
s pointer event capturing | 293 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v
s pointer event capturing |
| 284 WebInputEventResult result = dispatchPointerEvent(target, pointerEvent.get()
); | 294 WebInputEventResult result = dispatchPointerEvent(target, pointerEvent.get()
); |
| 285 | 295 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 | 368 |
| 359 DEFINE_TRACE(PointerEventManager) | 369 DEFINE_TRACE(PointerEventManager) |
| 360 { | 370 { |
| 361 #if ENABLE(OILPAN) | 371 #if ENABLE(OILPAN) |
| 362 visitor->trace(m_nodeUnderPointer); | 372 visitor->trace(m_nodeUnderPointer); |
| 363 #endif | 373 #endif |
| 364 } | 374 } |
| 365 | 375 |
| 366 | 376 |
| 367 } // namespace blink | 377 } // namespace blink |
| OLD | NEW |