Chromium Code Reviews| 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/ElementTraversal.h" | 7 #include "core/dom/ElementTraversal.h" |
| 8 #include "core/dom/shadow/FlatTreeTraversal.h" | 8 #include "core/dom/shadow/FlatTreeTraversal.h" |
| 9 #include "core/events/MouseEvent.h" | 9 #include "core/events/MouseEvent.h" |
| 10 #include "core/html/HTMLCanvasElement.h" | 10 #include "core/html/HTMLCanvasElement.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 72 HTMLCanvasElement* canvas = Traversal<HTMLCanvasElement>::firstAncestorOrSel f(*element); | 72 HTMLCanvasElement* canvas = Traversal<HTMLCanvasElement>::firstAncestorOrSel f(*element); |
| 73 // In this case, the event target is canvas and mouse rerouting doesn't happ en. | 73 // In this case, the event target is canvas and mouse rerouting doesn't happ en. |
| 74 if (canvas == element) | 74 if (canvas == element) |
| 75 return mouseEvent; | 75 return mouseEvent; |
| 76 String region = canvas->getIdFromControl(element); | 76 String region = canvas->getIdFromControl(element); |
| 77 PlatformMouseEvent newMouseEvent = mouseEvent; | 77 PlatformMouseEvent newMouseEvent = mouseEvent; |
| 78 newMouseEvent.setRegion(region); | 78 newMouseEvent.setRegion(region); |
| 79 return newMouseEvent; | 79 return newMouseEvent; |
| 80 } | 80 } |
| 81 | 81 |
| 82 void buildAncestorChain( | |
| 83 EventTarget* target, | |
| 84 HeapVector<Member<Node>, 20>* ancestors) | |
| 85 { | |
| 86 if (!isInDocument(target)) | |
| 87 return; | |
| 88 Node* targetNode = target->toNode(); | |
| 89 DCHECK(targetNode); | |
| 90 targetNode->updateDistribution(); | |
| 91 // Index 0 element in the ancestors arrays will be the corresponding | |
| 92 // target. So the root of their document will be their last element. | |
| 93 for (Node* node = targetNode; node; node = FlatTreeTraversal::parent(*node)) | |
| 94 ancestors->append(node); | |
| 95 } | |
| 96 | |
| 82 void buildAncestorChainsAndFindCommonAncestors( | 97 void buildAncestorChainsAndFindCommonAncestors( |
| 83 EventTarget* exitedTarget, EventTarget* enteredTarget, | 98 EventTarget* exitedTarget, EventTarget* enteredTarget, |
| 84 HeapVector<Member<Node>, 20>* exitedAncestorsOut, | 99 HeapVector<Member<Node>, 20>* exitedAncestorsOut, |
| 85 HeapVector<Member<Node>, 20>* enteredAncestorsOut, | 100 HeapVector<Member<Node>, 20>* enteredAncestorsOut, |
| 86 size_t* exitedAncestorsCommonParentIndexOut, | 101 size_t* exitedAncestorsCommonParentIndexOut, |
| 87 size_t* enteredAncestorsCommonParentIndexOut) | 102 size_t* enteredAncestorsCommonParentIndexOut) |
| 88 { | 103 { |
| 89 DCHECK(exitedAncestorsOut); | 104 DCHECK(exitedAncestorsOut); |
| 90 DCHECK(enteredAncestorsOut); | 105 DCHECK(enteredAncestorsOut); |
| 91 DCHECK(exitedAncestorsCommonParentIndexOut); | 106 DCHECK(exitedAncestorsCommonParentIndexOut); |
| 92 DCHECK(enteredAncestorsCommonParentIndexOut); | 107 DCHECK(enteredAncestorsCommonParentIndexOut); |
| 93 | 108 |
| 94 // Index 0 element in the ancestors arrays will be the corresponding | 109 buildAncestorChain(exitedTarget, exitedAncestorsOut); |
| 95 // target. So the root of their document will be their last element. | 110 buildAncestorChain(enteredTarget, enteredAncestorsOut); |
| 96 | |
| 97 if (isInDocument(exitedTarget)) { | |
| 98 Node* exitedNode = exitedTarget->toNode(); | |
| 99 DCHECK(exitedNode); | |
| 100 exitedNode->updateDistribution(); | |
| 101 for (Node* node = exitedNode; node; node = FlatTreeTraversal::parent(*no de)) | |
| 102 exitedAncestorsOut->append(node); | |
| 103 } | |
| 104 | |
| 105 if (isInDocument(enteredTarget)) { | |
| 106 Node* enteredNode = enteredTarget->toNode(); | |
| 107 DCHECK(enteredNode); | |
| 108 enteredNode->updateDistribution(); | |
| 109 for (Node* node = enteredNode; node; node = FlatTreeTraversal::parent(*n ode)) | |
| 110 enteredAncestorsOut->append(node); | |
| 111 } | |
| 112 | 111 |
| 113 *exitedAncestorsCommonParentIndexOut = exitedAncestorsOut->size(); | 112 *exitedAncestorsCommonParentIndexOut = exitedAncestorsOut->size(); |
| 114 *enteredAncestorsCommonParentIndexOut = enteredAncestorsOut->size(); | 113 *enteredAncestorsCommonParentIndexOut = enteredAncestorsOut->size(); |
| 115 while (*exitedAncestorsCommonParentIndexOut > 0 | 114 while (*exitedAncestorsCommonParentIndexOut > 0 |
| 116 && *enteredAncestorsCommonParentIndexOut > 0) { | 115 && *enteredAncestorsCommonParentIndexOut > 0) { |
| 117 if ((*exitedAncestorsOut)[(*exitedAncestorsCommonParentIndexOut)-1] | 116 if ((*exitedAncestorsOut)[(*exitedAncestorsCommonParentIndexOut)-1] |
| 118 != (*enteredAncestorsOut)[(*enteredAncestorsCommonParentIndexOut)-1] ) | 117 != (*enteredAncestorsOut)[(*enteredAncestorsCommonParentIndexOut)-1] ) |
| 119 break; | 118 break; |
| 120 (*exitedAncestorsCommonParentIndexOut)--; | 119 (*exitedAncestorsCommonParentIndexOut)--; |
| 121 (*enteredAncestorsCommonParentIndexOut)--; | 120 (*enteredAncestorsCommonParentIndexOut)--; |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 445 | 444 |
| 446 if (result != WebInputEventResult::NotHandled | 445 if (result != WebInputEventResult::NotHandled |
| 447 && pointerEvent->type() == EventTypeNames::pointerdown | 446 && pointerEvent->type() == EventTypeNames::pointerdown |
| 448 && pointerEvent->isPrimary()) { | 447 && pointerEvent->isPrimary()) { |
| 449 m_preventMouseEventForPointerType[toPointerTypeIndex( | 448 m_preventMouseEventForPointerType[toPointerTypeIndex( |
| 450 mouseEvent.pointerProperties().pointerType)] = true; | 449 mouseEvent.pointerProperties().pointerType)] = true; |
| 451 } | 450 } |
| 452 | 451 |
| 453 if (pointerEvent->isPrimary() && !m_preventMouseEventForPointerType[toPointe rTypeIndex( | 452 if (pointerEvent->isPrimary() && !m_preventMouseEventForPointerType[toPointe rTypeIndex( |
| 454 mouseEvent.pointerProperties().pointerType)]) { | 453 mouseEvent.pointerProperties().pointerType)]) { |
| 454 EventTarget* mouseTarget = effectiveTarget; | |
|
mustaq
2016/05/05 15:31:02
Can we ever have both of these false?
- isInDocume
Navid Zolghadr
2016/05/06 15:47:20
When pointer event feature is not enabled we are n
| |
| 455 if (!isInDocument(mouseTarget) && pointerEvent->hasEventPath()) { | |
| 456 for (size_t i = 0; i < pointerEvent->eventPath().size(); i++) { | |
| 457 if (isInDocument(pointerEvent->eventPath()[i].node())) { | |
| 458 mouseTarget = pointerEvent->eventPath()[i].node(); | |
| 459 break; | |
| 460 } | |
| 461 } | |
| 462 } | |
| 455 result = EventHandler::mergeEventResult(result, | 463 result = EventHandler::mergeEventResult(result, |
| 456 dispatchMouseEvent(effectiveTarget, mouseEventType, mouseEvent, | 464 dispatchMouseEvent(mouseTarget, mouseEventType, mouseEvent, |
| 457 nullptr, clickCount)); | 465 nullptr, clickCount)); |
| 458 } | 466 } |
| 459 | 467 |
| 460 if (pointerEvent->buttons() == 0) { | 468 if (pointerEvent->buttons() == 0) { |
| 461 releasePointerCapture(pointerEvent->pointerId()); | 469 releasePointerCapture(pointerEvent->pointerId()); |
| 462 if (pointerEvent->isPrimary()) { | 470 if (pointerEvent->isPrimary()) { |
| 463 m_preventMouseEventForPointerType[toPointerTypeIndex( | 471 m_preventMouseEventForPointerType[toPointerTypeIndex( |
| 464 mouseEvent.pointerProperties().pointerType)] = false; | 472 mouseEvent.pointerProperties().pointerType)] = false; |
| 465 } | 473 } |
| 466 } | 474 } |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 654 | 662 |
| 655 DEFINE_TRACE(PointerEventManager) | 663 DEFINE_TRACE(PointerEventManager) |
| 656 { | 664 { |
| 657 visitor->trace(m_nodeUnderPointer); | 665 visitor->trace(m_nodeUnderPointer); |
| 658 visitor->trace(m_pointerCaptureTarget); | 666 visitor->trace(m_pointerCaptureTarget); |
| 659 visitor->trace(m_pendingPointerCaptureTarget); | 667 visitor->trace(m_pendingPointerCaptureTarget); |
| 660 } | 668 } |
| 661 | 669 |
| 662 | 670 |
| 663 } // namespace blink | 671 } // namespace blink |
| OLD | NEW |