| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "sky/engine/config.h" | 5 #include "sky/engine/config.h" |
| 6 #include "sky/engine/core/frame/NewEventHandler.h" | 6 #include "sky/engine/core/frame/NewEventHandler.h" |
| 7 | 7 |
| 8 #include "sky/engine/core/dom/Document.h" | 8 #include "sky/engine/core/dom/Document.h" |
| 9 #include "sky/engine/core/dom/NodeRenderingTraversal.h" | 9 #include "sky/engine/core/dom/NodeRenderingTraversal.h" |
| 10 #include "sky/engine/core/editing/Editor.h" | 10 #include "sky/engine/core/editing/Editor.h" |
| 11 #include "sky/engine/core/editing/FrameSelection.h" | 11 #include "sky/engine/core/editing/FrameSelection.h" |
| 12 #include "sky/engine/core/editing/htmlediting.h" | 12 #include "sky/engine/core/editing/htmlediting.h" |
| 13 #include "sky/engine/core/events/GestureEvent.h" |
| 13 #include "sky/engine/core/events/PointerEvent.h" | 14 #include "sky/engine/core/events/PointerEvent.h" |
| 14 #include "sky/engine/core/frame/LocalFrame.h" | 15 #include "sky/engine/core/frame/LocalFrame.h" |
| 15 #include "sky/engine/core/frame/FrameView.h" | 16 #include "sky/engine/core/frame/FrameView.h" |
| 16 #include "sky/engine/core/page/EventWithHitTestResults.h" | 17 #include "sky/engine/core/page/EventWithHitTestResults.h" |
| 17 #include "sky/engine/core/rendering/RenderObject.h" | 18 #include "sky/engine/core/rendering/RenderObject.h" |
| 18 #include "sky/engine/core/rendering/RenderView.h" | 19 #include "sky/engine/core/rendering/RenderView.h" |
| 19 #include "sky/engine/platform/geometry/FloatPoint.h" | 20 #include "sky/engine/platform/geometry/FloatPoint.h" |
| 20 #include "sky/engine/public/platform/WebInputEvent.h" | 21 #include "sky/engine/public/platform/WebInputEvent.h" |
| 21 | 22 |
| 22 namespace blink { | 23 namespace blink { |
| 23 | 24 |
| 24 static VisiblePosition visiblePositionForHitTestResult(const HitTestResult& hitT
estResult) | 25 static VisiblePosition visiblePositionForHitTestResult(const HitTestResult& hitT
estResult) |
| 25 { | 26 { |
| 26 Node* innerNode = hitTestResult.innerNode(); | 27 Node* innerNode = hitTestResult.innerNode(); |
| 27 VisiblePosition position(innerNode->renderer()->positionForPoint(hitTestResu
lt.localPoint())); | 28 VisiblePosition position(innerNode->renderer()->positionForPoint(hitTestResu
lt.localPoint())); |
| 28 if (!position.isNull()) | 29 if (!position.isNull()) |
| 29 return position; | 30 return position; |
| 30 return VisiblePosition(firstPositionInOrBeforeNode(innerNode), DOWNSTREAM); | 31 return VisiblePosition(firstPositionInOrBeforeNode(innerNode), DOWNSTREAM); |
| 31 } | 32 } |
| 32 | 33 |
| 33 static LayoutPoint positionForEvent(const WebPointerEvent& event) | 34 template<typename EventType> |
| 35 static LayoutPoint positionForEvent(const EventType& event) |
| 34 { | 36 { |
| 35 return roundedLayoutPoint(FloatPoint(event.x, event.y)); | 37 return roundedLayoutPoint(FloatPoint(event.x, event.y)); |
| 36 } | 38 } |
| 37 | 39 |
| 38 NewEventHandler::NewEventHandler(LocalFrame& frame) | 40 NewEventHandler::NewEventHandler(LocalFrame& frame) |
| 39 : m_frame(frame) | 41 : m_frame(frame) |
| 40 { | 42 { |
| 41 } | 43 } |
| 42 | 44 |
| 43 NewEventHandler::~NewEventHandler() | 45 NewEventHandler::~NewEventHandler() |
| (...skipping 20 matching lines...) Expand all Loading... |
| 64 } | 66 } |
| 65 | 67 |
| 66 bool NewEventHandler::dispatchPointerEvent(Node& target, const WebPointerEvent&
event) | 68 bool NewEventHandler::dispatchPointerEvent(Node& target, const WebPointerEvent&
event) |
| 67 { | 69 { |
| 68 RefPtr<PointerEvent> pointerEvent = PointerEvent::create(event); | 70 RefPtr<PointerEvent> pointerEvent = PointerEvent::create(event); |
| 69 // TODO(abarth): Keep track of how many pointers are targeting the same node | 71 // TODO(abarth): Keep track of how many pointers are targeting the same node |
| 70 // and only mark the first one as primary. | 72 // and only mark the first one as primary. |
| 71 return target.dispatchEvent(pointerEvent.release()); | 73 return target.dispatchEvent(pointerEvent.release()); |
| 72 } | 74 } |
| 73 | 75 |
| 76 bool NewEventHandler::dispatchGestureEvent(Node& target, const WebGestureEvent&
event) |
| 77 { |
| 78 RefPtr<GestureEvent> gestureEvent = GestureEvent::create(event); |
| 79 return target.dispatchEvent(gestureEvent.release()); |
| 80 } |
| 81 |
| 74 bool NewEventHandler::dispatchClickEvent(Node& capturingTarget, const WebPointer
Event& event) | 82 bool NewEventHandler::dispatchClickEvent(Node& capturingTarget, const WebPointer
Event& event) |
| 75 { | 83 { |
| 76 ASSERT(event.type == WebInputEvent::PointerUp); | 84 ASSERT(event.type == WebInputEvent::PointerUp); |
| 77 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); | 85 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); |
| 78 Node* releaseTarget = targetForHitTestResult(hitTestResult); | 86 Node* releaseTarget = targetForHitTestResult(hitTestResult); |
| 79 Node* clickTarget = NodeRenderingTraversal::commonAncestor(*releaseTarget, c
apturingTarget); | 87 Node* clickTarget = NodeRenderingTraversal::commonAncestor(*releaseTarget, c
apturingTarget); |
| 80 if (!clickTarget) | 88 if (!clickTarget) |
| 81 return true; | 89 return true; |
| 82 // TODO(abarth): Make a proper gesture event that includes information from
the event. | 90 // TODO(abarth): Make a proper gesture event that includes information from
the event. |
| 83 return clickTarget->dispatchEvent(Event::createCancelableBubble(EventTypeNam
es::click)); | 91 return clickTarget->dispatchEvent(Event::createCancelableBubble(EventTypeNam
es::click)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 102 if (event.type == WebInputEvent::PointerDown) | 110 if (event.type == WebInputEvent::PointerDown) |
| 103 return handlePointerDownEvent(event); | 111 return handlePointerDownEvent(event); |
| 104 if (event.type == WebInputEvent::PointerUp) | 112 if (event.type == WebInputEvent::PointerUp) |
| 105 return handlePointerUpEvent(event); | 113 return handlePointerUpEvent(event); |
| 106 if (event.type == WebInputEvent::PointerMove) | 114 if (event.type == WebInputEvent::PointerMove) |
| 107 return handlePointerMoveEvent(event); | 115 return handlePointerMoveEvent(event); |
| 108 ASSERT(event.type == WebInputEvent::PointerCancel); | 116 ASSERT(event.type == WebInputEvent::PointerCancel); |
| 109 return handlePointerCancelEvent(event); | 117 return handlePointerCancelEvent(event); |
| 110 } | 118 } |
| 111 | 119 |
| 120 bool NewEventHandler::handleGestureEvent(const WebGestureEvent& event) |
| 121 { |
| 122 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); |
| 123 RefPtr<Node> target = targetForHitTestResult(hitTestResult); |
| 124 return !dispatchGestureEvent(*target, event); |
| 125 } |
| 126 |
| 112 bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event) | 127 bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event) |
| 113 { | 128 { |
| 114 ASSERT(m_targetForPointer.find(event.pointer) == m_targetForPointer.end()); | 129 ASSERT(m_targetForPointer.find(event.pointer) == m_targetForPointer.end()); |
| 115 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); | 130 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); |
| 116 RefPtr<Node> target = targetForHitTestResult(hitTestResult); | 131 RefPtr<Node> target = targetForHitTestResult(hitTestResult); |
| 117 m_targetForPointer[event.pointer] = target; | 132 m_targetForPointer[event.pointer] = target; |
| 118 bool eventSwallowed = !dispatchPointerEvent(*target, event); | 133 bool eventSwallowed = !dispatchPointerEvent(*target, event); |
| 119 // TODO(abarth): Set the target for the pointer to something determined when | 134 // TODO(abarth): Set the target for the pointer to something determined when |
| 120 // dispatching the event. | 135 // dispatching the event. |
| 121 updateSelectionForPointerDown(hitTestResult, event); | 136 updateSelectionForPointerDown(hitTestResult, event); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 143 return target && dispatchPointerEvent(*target.get(), event); | 158 return target && dispatchPointerEvent(*target.get(), event); |
| 144 } | 159 } |
| 145 | 160 |
| 146 bool NewEventHandler::handlePointerCancelEvent(const WebPointerEvent& event) | 161 bool NewEventHandler::handlePointerCancelEvent(const WebPointerEvent& event) |
| 147 { | 162 { |
| 148 RefPtr<Node> target = m_targetForPointer[event.pointer]; | 163 RefPtr<Node> target = m_targetForPointer[event.pointer]; |
| 149 return target && dispatchPointerEvent(*target, event); | 164 return target && dispatchPointerEvent(*target, event); |
| 150 } | 165 } |
| 151 | 166 |
| 152 } | 167 } |
| OLD | NEW |