| 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 |