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/GestureEvent.h" |
14 #include "sky/engine/core/events/KeyboardEvent.h" | 14 #include "sky/engine/core/events/KeyboardEvent.h" |
15 #include "sky/engine/core/events/PointerEvent.h" | 15 #include "sky/engine/core/events/PointerEvent.h" |
| 16 #include "sky/engine/core/events/WheelEvent.h" |
16 #include "sky/engine/core/frame/LocalFrame.h" | 17 #include "sky/engine/core/frame/LocalFrame.h" |
17 #include "sky/engine/core/frame/FrameView.h" | 18 #include "sky/engine/core/frame/FrameView.h" |
18 #include "sky/engine/core/rendering/RenderObject.h" | 19 #include "sky/engine/core/rendering/RenderObject.h" |
19 #include "sky/engine/core/rendering/RenderView.h" | 20 #include "sky/engine/core/rendering/RenderView.h" |
20 #include "sky/engine/platform/KeyboardCodes.h" | 21 #include "sky/engine/platform/KeyboardCodes.h" |
21 #include "sky/engine/platform/geometry/FloatPoint.h" | 22 #include "sky/engine/platform/geometry/FloatPoint.h" |
22 #include "sky/engine/public/platform/WebInputEvent.h" | 23 #include "sky/engine/public/platform/WebInputEvent.h" |
23 | 24 |
24 namespace blink { | 25 namespace blink { |
25 | 26 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 RefPtr<GestureEvent> gestureEvent = GestureEvent::create(event); | 89 RefPtr<GestureEvent> gestureEvent = GestureEvent::create(event); |
89 return target.dispatchEvent(gestureEvent.release()); | 90 return target.dispatchEvent(gestureEvent.release()); |
90 } | 91 } |
91 | 92 |
92 bool NewEventHandler::dispatchKeyboardEvent(Node& target, const WebKeyboardEvent
& event) | 93 bool NewEventHandler::dispatchKeyboardEvent(Node& target, const WebKeyboardEvent
& event) |
93 { | 94 { |
94 RefPtr<KeyboardEvent> keyboardEvent = KeyboardEvent::create(event); | 95 RefPtr<KeyboardEvent> keyboardEvent = KeyboardEvent::create(event); |
95 return target.dispatchEvent(keyboardEvent.release()); | 96 return target.dispatchEvent(keyboardEvent.release()); |
96 } | 97 } |
97 | 98 |
| 99 bool NewEventHandler::dispatchWheelEvent(Node& target, const WebWheelEvent& even
t) |
| 100 { |
| 101 RefPtr<WheelEvent> wheelEvent = WheelEvent::create(event); |
| 102 return target.dispatchEvent(wheelEvent.release()); |
| 103 } |
| 104 |
98 bool NewEventHandler::dispatchClickEvent(Node& capturingTarget, const WebPointer
Event& event) | 105 bool NewEventHandler::dispatchClickEvent(Node& capturingTarget, const WebPointer
Event& event) |
99 { | 106 { |
100 ASSERT(event.type == WebInputEvent::PointerUp); | 107 ASSERT(event.type == WebInputEvent::PointerUp); |
101 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); | 108 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); |
102 Node* releaseTarget = targetForHitTestResult(hitTestResult); | 109 Node* releaseTarget = targetForHitTestResult(hitTestResult); |
103 Node* clickTarget = NodeRenderingTraversal::commonAncestor(*releaseTarget, c
apturingTarget); | 110 Node* clickTarget = NodeRenderingTraversal::commonAncestor(*releaseTarget, c
apturingTarget); |
104 if (!clickTarget) | 111 if (!clickTarget) |
105 return true; | 112 return true; |
106 // TODO(abarth): Make a proper gesture event that includes information from
the event. | 113 // TODO(abarth): Make a proper gesture event that includes information from
the event. |
107 return clickTarget->dispatchEvent(Event::createCancelableBubble(EventTypeNam
es::click)); | 114 return clickTarget->dispatchEvent(Event::createCancelableBubble(EventTypeNam
es::click)); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 // If the keydown event was handled, we don't want to "generate" a keypress | 167 // If the keydown event was handled, we don't want to "generate" a keypress |
161 // event for that keystroke. However, we'll receive a Char event from the | 168 // event for that keystroke. However, we'll receive a Char event from the |
162 // embedder regardless, so we set m_suppressNextCharEvent, will will prevent | 169 // embedder regardless, so we set m_suppressNextCharEvent, will will prevent |
163 // us from dispatching the keypress event when we receive that Char event. | 170 // us from dispatching the keypress event when we receive that Char event. |
164 if (handled && event.type == WebInputEvent::KeyDown) | 171 if (handled && event.type == WebInputEvent::KeyDown) |
165 m_suppressNextCharEvent = true; | 172 m_suppressNextCharEvent = true; |
166 | 173 |
167 return handled; | 174 return handled; |
168 } | 175 } |
169 | 176 |
| 177 bool NewEventHandler::handleWheelEvent(const WebWheelEvent& event) |
| 178 { |
| 179 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); |
| 180 RefPtr<Node> target = targetForHitTestResult(hitTestResult); |
| 181 return target && !dispatchWheelEvent(*target, event); |
| 182 } |
| 183 |
170 bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event) | 184 bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event) |
171 { | 185 { |
172 // In principle, we shouldn't get another pointer down for the same | 186 // In principle, we shouldn't get another pointer down for the same |
173 // pointer ID, but for mice, we don't get a pointer cancel when you | 187 // pointer ID, but for mice, we don't get a pointer cancel when you |
174 // drag outside the window frame on Linux. For now, send the pointer | 188 // drag outside the window frame on Linux. For now, send the pointer |
175 // cancel at this point. | 189 // cancel at this point. |
176 if (event.kind == WebPointerEvent::Mouse | 190 if (event.kind == WebPointerEvent::Mouse |
177 && m_targetForPointer.find(event.pointer) != m_targetForPointer.end()) { | 191 && m_targetForPointer.find(event.pointer) != m_targetForPointer.end()) { |
178 WebPointerEvent fakeCancel = event; | 192 WebPointerEvent fakeCancel = event; |
179 fakeCancel.type = WebInputEvent::PointerCancel; | 193 fakeCancel.type = WebInputEvent::PointerCancel; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 auto it = m_targetForPointer.find(event.pointer); | 239 auto it = m_targetForPointer.find(event.pointer); |
226 if (it == m_targetForPointer.end()) | 240 if (it == m_targetForPointer.end()) |
227 return false; | 241 return false; |
228 RefPtr<Node> target = it->second; | 242 RefPtr<Node> target = it->second; |
229 m_targetForPointer.erase(it); | 243 m_targetForPointer.erase(it); |
230 ASSERT(target); | 244 ASSERT(target); |
231 return dispatchPointerEvent(*target, event); | 245 return dispatchPointerEvent(*target, event); |
232 } | 246 } |
233 | 247 |
234 } | 248 } |
OLD | NEW |