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" |
11 #include "core/frame/UseCounter.h" | 11 #include "core/frame/UseCounter.h" |
12 #include "core/html/HTMLCanvasElement.h" | 12 #include "core/html/HTMLCanvasElement.h" |
13 #include "core/input/EventHandler.h" | 13 #include "core/input/EventHandler.h" |
14 #include "core/input/TouchActionUtil.h" | 14 #include "core/input/TouchActionUtil.h" |
| 15 #include "core/layout/HitTestCanvasResult.h" |
15 #include "core/page/ChromeClient.h" | 16 #include "core/page/ChromeClient.h" |
16 #include "core/page/Page.h" | 17 #include "core/page/Page.h" |
17 #include "platform/PlatformTouchEvent.h" | 18 #include "platform/PlatformTouchEvent.h" |
18 | 19 |
19 namespace blink { | 20 namespace blink { |
20 | 21 |
21 namespace { | 22 namespace { |
22 | 23 |
23 size_t toPointerTypeIndex(WebPointerProperties::PointerType t) { return static_c
ast<size_t>(t); } | 24 size_t toPointerTypeIndex(WebPointerProperties::PointerType t) { return static_c
ast<size_t>(t); } |
24 | 25 |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 // before firing the event. | 418 // before firing the event. |
418 if (touchInfo.point.state() == PlatformTouchPoint::TouchPressed | 419 if (touchInfo.point.state() == PlatformTouchPoint::TouchPressed |
419 || !m_pendingPointerCaptureTarget.contains(pointerId)) { | 420 || !m_pendingPointerCaptureTarget.contains(pointerId)) { |
420 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEv
ent | HitTestRequest::ReadOnly | HitTestRequest::Active; | 421 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEv
ent | HitTestRequest::ReadOnly | HitTestRequest::Active; |
421 LayoutPoint pagePoint = roundedLayoutPoint(m_frame->view()->rootFram
eToContents(touchInfo.point.pos())); | 422 LayoutPoint pagePoint = roundedLayoutPoint(m_frame->view()->rootFram
eToContents(touchInfo.point.pos())); |
422 HitTestResult hitTestTesult = m_frame->eventHandler().hitTestResultA
tPoint(pagePoint, hitType); | 423 HitTestResult hitTestTesult = m_frame->eventHandler().hitTestResultA
tPoint(pagePoint, hitType); |
423 Node* node = hitTestTesult.innerNode(); | 424 Node* node = hitTestTesult.innerNode(); |
424 if (node) { | 425 if (node) { |
425 touchInfo.targetFrame = node->document().frame(); | 426 touchInfo.targetFrame = node->document().frame(); |
426 if (isHTMLCanvasElement(node)) { | 427 if (isHTMLCanvasElement(node)) { |
427 std::pair<Element*, String> regionInfo = toHTMLCanvasElement
(node)->getControlAndIdIfHitRegionExists(hitTestTesult.pointInInnerNodeFrame()); | 428 HitTestCanvasResult* hitTestCanvasResult = toHTMLCanvasEleme
nt(node)->getControlAndIdIfHitRegionExists(hitTestTesult.pointInInnerNodeFrame()
); |
428 if (regionInfo.first) | 429 if (hitTestCanvasResult->getControl()) |
429 node = regionInfo.first; | 430 node = hitTestCanvasResult->getControl(); |
430 touchInfo.region = regionInfo.second; | 431 touchInfo.region = hitTestCanvasResult->getId(); |
431 } | 432 } |
432 // TODO(crbug.com/612456): We need to investigate whether pointe
r | 433 // TODO(crbug.com/612456): We need to investigate whether pointe
r |
433 // events should go to text nodes or not. If so we need to | 434 // events should go to text nodes or not. If so we need to |
434 // update the mouse code as well. Also this logic looks similar | 435 // update the mouse code as well. Also this logic looks similar |
435 // to the one in TouchEventManager. We should be able to | 436 // to the one in TouchEventManager. We should be able to |
436 // refactor it better after this investigation. | 437 // refactor it better after this investigation. |
437 if (node->isTextNode()) | 438 if (node->isTextNode()) |
438 node = FlatTreeTraversal::parent(*node); | 439 node = FlatTreeTraversal::parent(*node); |
439 touchInfo.touchNode = node; | 440 touchInfo.touchNode = node; |
440 | 441 |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 { | 805 { |
805 visitor->trace(m_frame); | 806 visitor->trace(m_frame); |
806 visitor->trace(m_nodeUnderPointer); | 807 visitor->trace(m_nodeUnderPointer); |
807 visitor->trace(m_pointerCaptureTarget); | 808 visitor->trace(m_pointerCaptureTarget); |
808 visitor->trace(m_pendingPointerCaptureTarget); | 809 visitor->trace(m_pendingPointerCaptureTarget); |
809 visitor->trace(m_touchEventManager); | 810 visitor->trace(m_touchEventManager); |
810 } | 811 } |
811 | 812 |
812 | 813 |
813 } // namespace blink | 814 } // namespace blink |
OLD | NEW |