| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 PassRefPtrWillBeRawPtr<EventTarget> PointerEventManager::getEffectiveTargetForPo
interEvent( | 93 PassRefPtrWillBeRawPtr<EventTarget> PointerEventManager::getEffectiveTargetForPo
interEvent( |
| 94 PassRefPtrWillBeRawPtr<EventTarget> target, int pointerId) | 94 PassRefPtrWillBeRawPtr<EventTarget> target, int pointerId) |
| 95 { | 95 { |
| 96 if (EventTarget* capturingTarget = getCapturingNode(pointerId)) | 96 if (EventTarget* capturingTarget = getCapturingNode(pointerId)) |
| 97 return capturingTarget; | 97 return capturingTarget; |
| 98 return target; | 98 return target; |
| 99 } | 99 } |
| 100 | 100 |
| 101 // Sends node transition events (pointer|mouse)(out|leave|over|enter) to the cor
responding targets | 101 // Sends node transition events (pointer|mouse)(out|leave|over|enter) to the cor
responding targets |
| 102 void PointerEventManager::sendNodeTransitionEvents( | 102 void PointerEventManager::sendNodeTransitionEvents( |
| 103 PassRefPtrWillBeRawPtr<Node> exitedNode, | 103 PassRefPtrWillBeRawPtr<Node> prpExitedNode, |
| 104 PassRefPtrWillBeRawPtr<Node> enteredNode, | 104 PassRefPtrWillBeRawPtr<Node> prpEnteredNode, |
| 105 const PlatformMouseEvent& mouseEvent, | 105 const PlatformMouseEvent& mouseEvent, |
| 106 PassRefPtrWillBeRawPtr<AbstractView> view) | 106 PassRefPtrWillBeRawPtr<AbstractView> view) |
| 107 { | 107 { |
| 108 RefPtrWillBeRawPtr<Node> exitedNode = prpExitedNode; |
| 109 RefPtrWillBeRawPtr<Node> enteredNode = prpEnteredNode; |
| 108 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = | 110 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = |
| 109 m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent, | 111 m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent, |
| 110 nullptr, view); | 112 nullptr, view); |
| 111 processPendingPointerCapture(pointerEvent, enteredNode, mouseEvent, true); | 113 processPendingPointerCapture(pointerEvent, enteredNode, mouseEvent, true); |
| 112 | 114 |
| 113 // Pointer event type does not matter as it will be overridden in the sendNo
deTransitionEvents | 115 // Pointer event type does not matter as it will be overridden in the sendNo
deTransitionEvents |
| 114 sendNodeTransitionEvents(exitedNode, enteredNode, pointerEvent, mouseEvent, | 116 sendNodeTransitionEvents(exitedNode, enteredNode, pointerEvent, mouseEvent, |
| 115 true); | 117 true); |
| 116 } | 118 } |
| 117 | 119 |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 EventTargetAttributes(target, false)); | 267 EventTargetAttributes(target, false)); |
| 266 } | 268 } |
| 267 sendNodeTransitionEvents(node.target, target, pointerEvent); | 269 sendNodeTransitionEvents(node.target, target, pointerEvent); |
| 268 } else if (target) { | 270 } else if (target) { |
| 269 m_nodeUnderPointer.add(pointerEvent->pointerId(), | 271 m_nodeUnderPointer.add(pointerEvent->pointerId(), |
| 270 EventTargetAttributes(target, false)); | 272 EventTargetAttributes(target, false)); |
| 271 sendNodeTransitionEvents(nullptr, target, pointerEvent); | 273 sendNodeTransitionEvents(nullptr, target, pointerEvent); |
| 272 } | 274 } |
| 273 } | 275 } |
| 274 | 276 |
| 275 void PointerEventManager::sendTouchCancelPointerEvent(PassRefPtrWillBeRawPtr<Eve
ntTarget> target, | 277 void PointerEventManager::sendTouchCancelPointerEvent(PassRefPtrWillBeRawPtr<Eve
ntTarget> prpTarget, const PlatformTouchPoint& point) |
| 276 const PlatformTouchPoint& point) | |
| 277 { | 278 { |
| 278 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = | 279 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| 279 m_pointerEventFactory.createPointerCancel(point); | 280 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create
PointerCancel(point); |
| 280 | 281 |
| 281 processPendingPointerCapture(pointerEvent, target); | 282 processPendingPointerCapture(pointerEvent, target); |
| 282 | 283 |
| 283 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v
s pointer event capturing | 284 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v
s pointer event capturing |
| 284 dispatchPointerEvent( | 285 dispatchPointerEvent( |
| 285 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()), | 286 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()), |
| 286 pointerEvent.get()); | 287 pointerEvent.get()); |
| 287 | 288 |
| 288 setNodeUnderPointer(pointerEvent, nullptr); | 289 setNodeUnderPointer(pointerEvent, nullptr); |
| 289 | 290 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 315 if (touchPoint.state() == PlatformTouchPoint::TouchReleased | 316 if (touchPoint.state() == PlatformTouchPoint::TouchReleased |
| 316 || touchPoint.state() == PlatformTouchPoint::TouchCancelled) { | 317 || touchPoint.state() == PlatformTouchPoint::TouchCancelled) { |
| 317 setNodeUnderPointer(pointerEvent, nullptr); | 318 setNodeUnderPointer(pointerEvent, nullptr); |
| 318 removePointer(pointerEvent); | 319 removePointer(pointerEvent); |
| 319 } | 320 } |
| 320 | 321 |
| 321 return result; | 322 return result; |
| 322 } | 323 } |
| 323 | 324 |
| 324 WebInputEventResult PointerEventManager::sendMousePointerEvent( | 325 WebInputEventResult PointerEventManager::sendMousePointerEvent( |
| 325 PassRefPtrWillBeRawPtr<Node> target, const AtomicString& mouseEventType, | 326 PassRefPtrWillBeRawPtr<Node> prpTarget, const AtomicString& mouseEventType, |
| 326 int clickCount, const PlatformMouseEvent& mouseEvent, | 327 int clickCount, const PlatformMouseEvent& mouseEvent, |
| 327 PassRefPtrWillBeRawPtr<Node> relatedTarget, | 328 PassRefPtrWillBeRawPtr<Node> relatedTarget, |
| 328 PassRefPtrWillBeRawPtr<AbstractView> view) | 329 PassRefPtrWillBeRawPtr<AbstractView> view) |
| 329 { | 330 { |
| 331 RefPtrWillBeRawPtr<Node> target = prpTarget; |
| 330 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = | 332 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = |
| 331 m_pointerEventFactory.create(mouseEventType, mouseEvent, | 333 m_pointerEventFactory.create(mouseEventType, mouseEvent, |
| 332 relatedTarget, view); | 334 relatedTarget, view); |
| 333 | 335 |
| 334 processPendingPointerCapture(pointerEvent, target, mouseEvent, true); | 336 processPendingPointerCapture(pointerEvent, target, mouseEvent, true); |
| 335 | 337 |
| 336 // TODO(crbug.com/587955): We should call setNodeUnderPointer here but it ca
uses sending | 338 // TODO(crbug.com/587955): We should call setNodeUnderPointer here but it ca
uses sending |
| 337 // transition events that should be first removed from EventHandler. | 339 // transition events that should be first removed from EventHandler. |
| 338 | 340 |
| 339 RefPtrWillBeRawPtr<EventTarget> effectiveTarget = | 341 RefPtrWillBeRawPtr<EventTarget> effectiveTarget = |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 } | 444 } |
| 443 | 445 |
| 444 EventTarget* PointerEventManager::getCapturingNode(int pointerId) | 446 EventTarget* PointerEventManager::getCapturingNode(int pointerId) |
| 445 { | 447 { |
| 446 if (m_pointerCaptureTarget.contains(pointerId)) | 448 if (m_pointerCaptureTarget.contains(pointerId)) |
| 447 return m_pointerCaptureTarget.get(pointerId); | 449 return m_pointerCaptureTarget.get(pointerId); |
| 448 return nullptr; | 450 return nullptr; |
| 449 } | 451 } |
| 450 | 452 |
| 451 void PointerEventManager::removePointer( | 453 void PointerEventManager::removePointer( |
| 452 const PassRefPtrWillBeRawPtr<PointerEvent> pointerEvent) | 454 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent) |
| 453 { | 455 { |
| 456 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; |
| 454 if (m_pointerEventFactory.remove(pointerEvent)) { | 457 if (m_pointerEventFactory.remove(pointerEvent)) { |
| 455 int pointerId = pointerEvent->pointerId(); | 458 int pointerId = pointerEvent->pointerId(); |
| 456 m_pendingPointerCaptureTarget.remove(pointerId); | 459 m_pendingPointerCaptureTarget.remove(pointerId); |
| 457 m_pointerCaptureTarget.remove(pointerId); | 460 m_pointerCaptureTarget.remove(pointerId); |
| 458 m_nodeUnderPointer.remove(pointerId); | 461 m_nodeUnderPointer.remove(pointerId); |
| 459 } | 462 } |
| 460 } | 463 } |
| 461 | 464 |
| 462 void PointerEventManager::elementRemoved(EventTarget* target) | 465 void PointerEventManager::elementRemoved(EventTarget* target) |
| 463 { | 466 { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 492 { | 495 { |
| 493 #if ENABLE(OILPAN) | 496 #if ENABLE(OILPAN) |
| 494 visitor->trace(m_nodeUnderPointer); | 497 visitor->trace(m_nodeUnderPointer); |
| 495 visitor->trace(m_pointerCaptureTarget); | 498 visitor->trace(m_pointerCaptureTarget); |
| 496 visitor->trace(m_pendingPointerCaptureTarget); | 499 visitor->trace(m_pendingPointerCaptureTarget); |
| 497 #endif | 500 #endif |
| 498 } | 501 } |
| 499 | 502 |
| 500 | 503 |
| 501 } // namespace blink | 504 } // namespace blink |
| OLD | NEW |