Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(890)

Side by Side Diff: sky/engine/core/frame/NewEventHandler.cpp

Issue 887793002: Implement PointerEvent#dx (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Another nit Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sky/engine/core/frame/NewEventHandler.h ('k') | sky/engine/public/platform/WebInputEvent.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 69
70 HitTestResult NewEventHandler::performHitTest(const LayoutPoint& point) 70 HitTestResult NewEventHandler::performHitTest(const LayoutPoint& point)
71 { 71 {
72 HitTestResult result(point); 72 HitTestResult result(point);
73 if (!m_frame.contentRenderer()) 73 if (!m_frame.contentRenderer())
74 return result; 74 return result;
75 m_frame.contentRenderer()->hitTest(HitTestRequest(HitTestRequest::ReadOnly), result); 75 m_frame.contentRenderer()->hitTest(HitTestRequest(HitTestRequest::ReadOnly), result);
76 return result; 76 return result;
77 } 77 }
78 78
79 bool NewEventHandler::dispatchPointerEvent(Node& target, const WebPointerEvent& event) 79 bool NewEventHandler::dispatchPointerEvent(PointerState& state, const WebPointer Event& event)
80 { 80 {
81 RefPtr<PointerEvent> pointerEvent = PointerEvent::create(event); 81 RefPtr<PointerEvent> pointerEvent = PointerEvent::create(event);
82 pointerEvent->setDX(event.x - state.x);
83 pointerEvent->setDY(event.y - state.y);
84 state.x = event.x;
85 state.y = event.y;
82 // TODO(abarth): Keep track of how many pointers are targeting the same node 86 // TODO(abarth): Keep track of how many pointers are targeting the same node
83 // and only mark the first one as primary. 87 // and only mark the first one as primary.
84 return target.dispatchEvent(pointerEvent.release()); 88 return state.target->dispatchEvent(pointerEvent.release());
85 } 89 }
86 90
87 bool NewEventHandler::dispatchGestureEvent(Node& target, const WebGestureEvent& event) 91 bool NewEventHandler::dispatchGestureEvent(Node& target, const WebGestureEvent& event)
88 { 92 {
89 RefPtr<GestureEvent> gestureEvent = GestureEvent::create(event); 93 RefPtr<GestureEvent> gestureEvent = GestureEvent::create(event);
90 return target.dispatchEvent(gestureEvent.release()); 94 return target.dispatchEvent(gestureEvent.release());
91 } 95 }
92 96
93 bool NewEventHandler::dispatchKeyboardEvent(Node& target, const WebKeyboardEvent & event) 97 bool NewEventHandler::dispatchKeyboardEvent(Node& target, const WebKeyboardEvent & event)
94 { 98 {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 return target && !dispatchWheelEvent(*target, event); 185 return target && !dispatchWheelEvent(*target, event);
182 } 186 }
183 187
184 bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event) 188 bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event)
185 { 189 {
186 // In principle, we shouldn't get another pointer down for the same 190 // In principle, we shouldn't get another pointer down for the same
187 // pointer ID, but for mice, we don't get a pointer cancel when you 191 // pointer ID, but for mice, we don't get a pointer cancel when you
188 // drag outside the window frame on Linux. For now, send the pointer 192 // drag outside the window frame on Linux. For now, send the pointer
189 // cancel at this point. 193 // cancel at this point.
190 if (event.kind == WebPointerEvent::Mouse 194 if (event.kind == WebPointerEvent::Mouse
191 && m_targetForPointer.find(event.pointer) != m_targetForPointer.end()) { 195 && m_stateForPointer.find(event.pointer) != m_stateForPointer.end()) {
192 WebPointerEvent fakeCancel = event; 196 WebPointerEvent fakeCancel = event;
193 fakeCancel.type = WebInputEvent::PointerCancel; 197 fakeCancel.type = WebInputEvent::PointerCancel;
194 handlePointerCancelEvent(fakeCancel); 198 handlePointerCancelEvent(fakeCancel);
195 } 199 }
196 200
197 ASSERT(m_targetForPointer.find(event.pointer) == m_targetForPointer.end()); 201 ASSERT(m_stateForPointer.find(event.pointer) == m_stateForPointer.end());
198 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); 202 HitTestResult hitTestResult = performHitTest(positionForEvent(event));
199 RefPtr<Node> target = targetForHitTestResult(hitTestResult); 203 RefPtr<Node> target = targetForHitTestResult(hitTestResult);
200 if (!target) 204 if (!target)
201 return false; 205 return false;
202 m_targetForPointer[event.pointer] = target; 206 PointerState& state = m_stateForPointer[event.pointer];
203 bool eventSwallowed = !dispatchPointerEvent(*target, event); 207 state.target = target;
208 bool eventSwallowed = !dispatchPointerEvent(state, event);
204 // TODO(abarth): Set the target for the pointer to something determined when 209 // TODO(abarth): Set the target for the pointer to something determined when
205 // dispatching the event. 210 // dispatching the event.
206 updateSelectionForPointerDown(hitTestResult, event); 211 updateSelectionForPointerDown(hitTestResult, event);
207 return eventSwallowed; 212 return eventSwallowed;
208 } 213 }
209 214
210 bool NewEventHandler::handlePointerUpEvent(const WebPointerEvent& event) 215 bool NewEventHandler::handlePointerUpEvent(const WebPointerEvent& event)
211 { 216 {
212 auto it = m_targetForPointer.find(event.pointer); 217 auto it = m_stateForPointer.find(event.pointer);
213 if (it == m_targetForPointer.end()) 218 if (it == m_stateForPointer.end())
214 return false; 219 return false;
215 RefPtr<Node> target = it->second; 220 PointerState stateCopy = it->second;
216 m_targetForPointer.erase(it); 221 m_stateForPointer.erase(it);
217 ASSERT(target); 222 ASSERT(stateCopy.target);
218 bool eventSwallowed = !dispatchPointerEvent(*target, event); 223 bool eventSwallowed = !dispatchPointerEvent(stateCopy, event);
219 // When the user releases the primary pointer, we need to dispatch a tap 224 // When the user releases the primary pointer, we need to dispatch a tap
220 // event to the common ancestor for where the pointer went down and where 225 // event to the common ancestor for where the pointer went down and where
221 // it came up. 226 // it came up.
222 if (!dispatchClickEvent(*target, event)) 227 if (!eventSwallowed && !dispatchClickEvent(*stateCopy.target, event))
223 eventSwallowed = true; 228 eventSwallowed = true;
224 return eventSwallowed; 229 return eventSwallowed;
225 } 230 }
226 231
227 bool NewEventHandler::handlePointerMoveEvent(const WebPointerEvent& event) 232 bool NewEventHandler::handlePointerMoveEvent(const WebPointerEvent& event)
228 { 233 {
229 auto it = m_targetForPointer.find(event.pointer); 234 auto it = m_stateForPointer.find(event.pointer);
230 if (it == m_targetForPointer.end()) 235 if (it == m_stateForPointer.end())
231 return false; 236 return false;
232 RefPtr<Node> target = it->second; 237 PointerState& state = it->second;
233 ASSERT(target); 238 ASSERT(state.target);
234 return dispatchPointerEvent(*target.get(), event); 239 return dispatchPointerEvent(state, event);
235 } 240 }
236 241
237 bool NewEventHandler::handlePointerCancelEvent(const WebPointerEvent& event) 242 bool NewEventHandler::handlePointerCancelEvent(const WebPointerEvent& event)
238 { 243 {
239 auto it = m_targetForPointer.find(event.pointer); 244 auto it = m_stateForPointer.find(event.pointer);
240 if (it == m_targetForPointer.end()) 245 if (it == m_stateForPointer.end())
241 return false; 246 return false;
242 RefPtr<Node> target = it->second; 247 PointerState stateCopy = it->second;
243 m_targetForPointer.erase(it); 248 m_stateForPointer.erase(it);
244 ASSERT(target); 249 ASSERT(stateCopy.target);
245 return dispatchPointerEvent(*target, event); 250 return dispatchPointerEvent(stateCopy, event);
246 } 251 }
247 252
248 } 253 }
OLDNEW
« no previous file with comments | « sky/engine/core/frame/NewEventHandler.h ('k') | sky/engine/public/platform/WebInputEvent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698