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/DocumentUserGestureToken.h" | 7 #include "core/dom/DocumentUserGestureToken.h" |
8 #include "core/dom/ElementTraversal.h" | 8 #include "core/dom/ElementTraversal.h" |
9 #include "core/dom/shadow/FlatTreeTraversal.h" | 9 #include "core/dom/shadow/FlatTreeTraversal.h" |
10 #include "core/events/MouseEvent.h" | 10 #include "core/events/MouseEvent.h" |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 pointerEvent); | 210 pointerEvent); |
211 boundaryEventDispatcher.sendBoundaryEvents(exitedTarget, enteredTarget); | 211 boundaryEventDispatcher.sendBoundaryEvents(exitedTarget, enteredTarget); |
212 } | 212 } |
213 | 213 |
214 void PointerEventManager::setNodeUnderPointer(PointerEvent* pointerEvent, | 214 void PointerEventManager::setNodeUnderPointer(PointerEvent* pointerEvent, |
215 EventTarget* target) { | 215 EventTarget* target) { |
216 if (m_nodeUnderPointer.contains(pointerEvent->pointerId())) { | 216 if (m_nodeUnderPointer.contains(pointerEvent->pointerId())) { |
217 EventTargetAttributes node = | 217 EventTargetAttributes node = |
218 m_nodeUnderPointer.get(pointerEvent->pointerId()); | 218 m_nodeUnderPointer.get(pointerEvent->pointerId()); |
219 if (!target) { | 219 if (!target) { |
220 m_nodeUnderPointer.remove(pointerEvent->pointerId()); | 220 m_nodeUnderPointer.erase(pointerEvent->pointerId()); |
221 } else if (target != | 221 } else if (target != |
222 m_nodeUnderPointer.get(pointerEvent->pointerId()).target) { | 222 m_nodeUnderPointer.get(pointerEvent->pointerId()).target) { |
223 m_nodeUnderPointer.set(pointerEvent->pointerId(), | 223 m_nodeUnderPointer.set(pointerEvent->pointerId(), |
224 EventTargetAttributes(target, false)); | 224 EventTargetAttributes(target, false)); |
225 } | 225 } |
226 sendBoundaryEvents(node.target, target, pointerEvent); | 226 sendBoundaryEvents(node.target, target, pointerEvent); |
227 } else if (target) { | 227 } else if (target) { |
228 m_nodeUnderPointer.add(pointerEvent->pointerId(), | 228 m_nodeUnderPointer.add(pointerEvent->pointerId(), |
229 EventTargetAttributes(target, false)); | 229 EventTargetAttributes(target, false)); |
230 sendBoundaryEvents(nullptr, target, pointerEvent); | 230 sendBoundaryEvents(nullptr, target, pointerEvent); |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 pointerEvent, EventTypeNames::lostpointercapture)); | 582 pointerEvent, EventTypeNames::lostpointercapture)); |
583 } | 583 } |
584 | 584 |
585 if (pendingPointerCaptureTarget) { | 585 if (pendingPointerCaptureTarget) { |
586 setNodeUnderPointer(pointerEvent, pendingPointerCaptureTarget); | 586 setNodeUnderPointer(pointerEvent, pendingPointerCaptureTarget); |
587 dispatchPointerEvent(pendingPointerCaptureTarget, | 587 dispatchPointerEvent(pendingPointerCaptureTarget, |
588 m_pointerEventFactory.createPointerCaptureEvent( | 588 m_pointerEventFactory.createPointerCaptureEvent( |
589 pointerEvent, EventTypeNames::gotpointercapture)); | 589 pointerEvent, EventTypeNames::gotpointercapture)); |
590 m_pointerCaptureTarget.set(pointerId, pendingPointerCaptureTarget); | 590 m_pointerCaptureTarget.set(pointerId, pendingPointerCaptureTarget); |
591 } else { | 591 } else { |
592 m_pointerCaptureTarget.remove(pointerId); | 592 m_pointerCaptureTarget.erase(pointerId); |
593 } | 593 } |
594 } | 594 } |
595 | 595 |
596 void PointerEventManager::removeTargetFromPointerCapturingMapping( | 596 void PointerEventManager::removeTargetFromPointerCapturingMapping( |
597 PointerCapturingMap& map, | 597 PointerCapturingMap& map, |
598 const EventTarget* target) { | 598 const EventTarget* target) { |
599 // We could have kept a reverse mapping to make this deletion possibly | 599 // We could have kept a reverse mapping to make this deletion possibly |
600 // faster but it adds some code complication which might not be worth of | 600 // faster but it adds some code complication which might not be worth of |
601 // the performance improvement considering there might not be a lot of | 601 // the performance improvement considering there might not be a lot of |
602 // active pointer or pointer captures at the same time. | 602 // active pointer or pointer captures at the same time. |
603 PointerCapturingMap tmp = map; | 603 PointerCapturingMap tmp = map; |
604 for (PointerCapturingMap::iterator it = tmp.begin(); it != tmp.end(); ++it) { | 604 for (PointerCapturingMap::iterator it = tmp.begin(); it != tmp.end(); ++it) { |
605 if (it->value == target) | 605 if (it->value == target) |
606 map.remove(it->key); | 606 map.erase(it->key); |
607 } | 607 } |
608 } | 608 } |
609 | 609 |
610 EventTarget* PointerEventManager::getCapturingNode(int pointerId) { | 610 EventTarget* PointerEventManager::getCapturingNode(int pointerId) { |
611 if (m_pointerCaptureTarget.contains(pointerId)) | 611 if (m_pointerCaptureTarget.contains(pointerId)) |
612 return m_pointerCaptureTarget.get(pointerId); | 612 return m_pointerCaptureTarget.get(pointerId); |
613 return nullptr; | 613 return nullptr; |
614 } | 614 } |
615 | 615 |
616 void PointerEventManager::removePointer(PointerEvent* pointerEvent) { | 616 void PointerEventManager::removePointer(PointerEvent* pointerEvent) { |
617 int pointerId = pointerEvent->pointerId(); | 617 int pointerId = pointerEvent->pointerId(); |
618 if (m_pointerEventFactory.remove(pointerId)) { | 618 if (m_pointerEventFactory.remove(pointerId)) { |
619 m_pendingPointerCaptureTarget.remove(pointerId); | 619 m_pendingPointerCaptureTarget.erase(pointerId); |
620 m_pointerCaptureTarget.remove(pointerId); | 620 m_pointerCaptureTarget.erase(pointerId); |
621 m_nodeUnderPointer.remove(pointerId); | 621 m_nodeUnderPointer.erase(pointerId); |
622 } | 622 } |
623 } | 623 } |
624 | 624 |
625 void PointerEventManager::elementRemoved(EventTarget* target) { | 625 void PointerEventManager::elementRemoved(EventTarget* target) { |
626 removeTargetFromPointerCapturingMapping(m_pendingPointerCaptureTarget, | 626 removeTargetFromPointerCapturingMapping(m_pendingPointerCaptureTarget, |
627 target); | 627 target); |
628 } | 628 } |
629 | 629 |
630 void PointerEventManager::setPointerCapture(int pointerId, | 630 void PointerEventManager::setPointerCapture(int pointerId, |
631 EventTarget* target) { | 631 EventTarget* target) { |
(...skipping 20 matching lines...) Expand all Loading... |
652 return m_pendingPointerCaptureTarget.get(pointerId) == target; | 652 return m_pendingPointerCaptureTarget.get(pointerId) == target; |
653 } | 653 } |
654 | 654 |
655 bool PointerEventManager::hasProcessedPointerCapture( | 655 bool PointerEventManager::hasProcessedPointerCapture( |
656 int pointerId, | 656 int pointerId, |
657 const EventTarget* target) const { | 657 const EventTarget* target) const { |
658 return m_pointerCaptureTarget.get(pointerId) == target; | 658 return m_pointerCaptureTarget.get(pointerId) == target; |
659 } | 659 } |
660 | 660 |
661 void PointerEventManager::releasePointerCapture(int pointerId) { | 661 void PointerEventManager::releasePointerCapture(int pointerId) { |
662 m_pendingPointerCaptureTarget.remove(pointerId); | 662 m_pendingPointerCaptureTarget.erase(pointerId); |
663 } | 663 } |
664 | 664 |
665 bool PointerEventManager::isActive(const int pointerId) const { | 665 bool PointerEventManager::isActive(const int pointerId) const { |
666 return m_pointerEventFactory.isActive(pointerId); | 666 return m_pointerEventFactory.isActive(pointerId); |
667 } | 667 } |
668 | 668 |
669 // This function checks the type of the pointer event to be touch as touch | 669 // This function checks the type of the pointer event to be touch as touch |
670 // pointer events are the only ones that are directly dispatched from the main | 670 // pointer events are the only ones that are directly dispatched from the main |
671 // page managers to their target (event if target is in an iframe) and only | 671 // page managers to their target (event if target is in an iframe) and only |
672 // those managers will keep track of these pointer events. | 672 // those managers will keep track of these pointer events. |
(...skipping 25 matching lines...) Expand all Loading... |
698 if (firstId > uniqueTouchEventId) | 698 if (firstId > uniqueTouchEventId) |
699 return false; | 699 return false; |
700 m_touchIdsForCanceledPointerdowns.takeFirst(); | 700 m_touchIdsForCanceledPointerdowns.takeFirst(); |
701 if (firstId == uniqueTouchEventId) | 701 if (firstId == uniqueTouchEventId) |
702 return true; | 702 return true; |
703 } | 703 } |
704 return false; | 704 return false; |
705 } | 705 } |
706 | 706 |
707 } // namespace blink | 707 } // namespace blink |
OLD | NEW |