| 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/frame/FrameView.h" | 10 #include "core/frame/FrameView.h" |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 Node* relatedTarget, | 521 Node* relatedTarget, |
| 522 Node* lastNodeUnderMouse, | 522 Node* lastNodeUnderMouse, |
| 523 Node** newNodeUnderMouse) | 523 Node** newNodeUnderMouse) |
| 524 { | 524 { |
| 525 PointerEvent* pointerEvent = | 525 PointerEvent* pointerEvent = |
| 526 m_pointerEventFactory.create(mouseEventType, mouseEvent, | 526 m_pointerEventFactory.create(mouseEventType, mouseEvent, |
| 527 relatedTarget, m_frame->document()->domWindow()); | 527 relatedTarget, m_frame->document()->domWindow()); |
| 528 | 528 |
| 529 // This is for when the mouse is released outside of the page. | 529 // This is for when the mouse is released outside of the page. |
| 530 if (pointerEvent->type() == EventTypeNames::pointermove | 530 if (pointerEvent->type() == EventTypeNames::pointermove |
| 531 && !pointerEvent->buttons() | 531 && !pointerEvent->buttons()) { |
| 532 && pointerEvent->isPrimary()) { | 532 |
| 533 m_preventMouseEventForPointerType[toPointerTypeIndex( | 533 releasePointerCapture(pointerEvent->pointerId()); |
| 534 mouseEvent.pointerProperties().pointerType)] = false; | 534 // Send got/lostpointercapture rightaway if necessary. |
| 535 processPendingPointerCapture(pointerEvent); |
| 536 |
| 537 if (pointerEvent->isPrimary()) { |
| 538 m_preventMouseEventForPointerType[toPointerTypeIndex( |
| 539 mouseEvent.pointerProperties().pointerType)] = false; |
| 540 } |
| 535 } | 541 } |
| 536 | 542 |
| 537 EventTarget* pointerEventTarget = processCaptureAndPositionOfPointerEvent(po
interEvent, target, | 543 EventTarget* pointerEventTarget = processCaptureAndPositionOfPointerEvent(po
interEvent, target, |
| 538 lastNodeUnderMouse, mouseEvent, true, true); | 544 lastNodeUnderMouse, mouseEvent, true, true); |
| 539 | 545 |
| 540 if (pointerEventTarget) { | 546 if (pointerEventTarget) { |
| 541 // This is to prevent incorrect boundary events if capturing transition
was | 547 // This is to prevent incorrect boundary events if capturing transition
was |
| 542 // delayed. | 548 // delayed. |
| 543 *newNodeUnderMouse = pointerEventTarget->toNode(); | 549 *newNodeUnderMouse = pointerEventTarget->toNode(); |
| 544 DCHECK(*newNodeUnderMouse); | 550 DCHECK(*newNodeUnderMouse); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 568 mouseTarget = pointerEvent->eventPath()[i].node(); | 574 mouseTarget = pointerEvent->eventPath()[i].node(); |
| 569 break; | 575 break; |
| 570 } | 576 } |
| 571 } | 577 } |
| 572 } | 578 } |
| 573 result = EventHandler::mergeEventResult(result, | 579 result = EventHandler::mergeEventResult(result, |
| 574 dispatchMouseEvent(mouseTarget, mouseEventType, mouseEvent, | 580 dispatchMouseEvent(mouseTarget, mouseEventType, mouseEvent, |
| 575 nullptr, clickCount)); | 581 nullptr, clickCount)); |
| 576 } | 582 } |
| 577 | 583 |
| 578 if (pointerEvent->buttons() == 0) { | 584 if (pointerEvent->type() == EventTypeNames::pointerup |
| 585 || pointerEvent->type() == EventTypeNames::pointercancel) { |
| 586 |
| 579 releasePointerCapture(pointerEvent->pointerId()); | 587 releasePointerCapture(pointerEvent->pointerId()); |
| 580 | |
| 581 // Send got/lostpointercapture rightaway if necessary. | 588 // Send got/lostpointercapture rightaway if necessary. |
| 582 processPendingPointerCapture(pointerEvent); | 589 processPendingPointerCapture(pointerEvent); |
| 583 | 590 |
| 584 if (pointerEvent->isPrimary()) { | 591 if (pointerEvent->isPrimary()) { |
| 585 m_preventMouseEventForPointerType[toPointerTypeIndex( | 592 m_preventMouseEventForPointerType[toPointerTypeIndex( |
| 586 mouseEvent.pointerProperties().pointerType)] = false; | 593 mouseEvent.pointerProperties().pointerType)] = false; |
| 587 } | 594 } |
| 588 } | 595 } |
| 589 | 596 |
| 590 return result; | 597 return result; |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 793 { | 800 { |
| 794 visitor->trace(m_frame); | 801 visitor->trace(m_frame); |
| 795 visitor->trace(m_nodeUnderPointer); | 802 visitor->trace(m_nodeUnderPointer); |
| 796 visitor->trace(m_pointerCaptureTarget); | 803 visitor->trace(m_pointerCaptureTarget); |
| 797 visitor->trace(m_pendingPointerCaptureTarget); | 804 visitor->trace(m_pendingPointerCaptureTarget); |
| 798 visitor->trace(m_touchEventManager); | 805 visitor->trace(m_touchEventManager); |
| 799 } | 806 } |
| 800 | 807 |
| 801 | 808 |
| 802 } // namespace blink | 809 } // namespace blink |
| OLD | NEW |