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

Side by Side Diff: third_party/WebKit/Source/core/input/PointerEventManager.cpp

Issue 2860663006: Remove WebTouchEvent from TouchEventManager APIs (Closed)
Patch Set: Fix more tests Created 3 years, 6 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
OLDNEW
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/UserGestureIndicator.h" 8 #include "core/dom/UserGestureIndicator.h"
9 #include "core/dom/shadow/FlatTreeTraversal.h" 9 #include "core/dom/shadow/FlatTreeTraversal.h"
10 #include "core/events/MouseEvent.h" 10 #include "core/events/MouseEvent.h"
(...skipping 11 matching lines...) Expand all
22 #include "public/platform/WebTouchEvent.h" 22 #include "public/platform/WebTouchEvent.h"
23 23
24 namespace blink { 24 namespace blink {
25 25
26 namespace { 26 namespace {
27 27
28 size_t ToPointerTypeIndex(WebPointerProperties::PointerType t) { 28 size_t ToPointerTypeIndex(WebPointerProperties::PointerType t) {
29 return static_cast<size_t>(t); 29 return static_cast<size_t>(t);
30 } 30 }
31 31
32 Vector<WebPointerEvent> GetCoalescedWebPointerEventsWithNoTransformation(
33 const Vector<WebTouchEvent>& coalesced_events,
34 int id) {
35 Vector<WebPointerEvent> related_pointer_events;
36 for (const auto& touch_event : coalesced_events) {
37 for (unsigned i = 0; i < touch_event.touches_length; ++i) {
38 if (touch_event.touches[i].id == id &&
39 touch_event.touches[i].state != WebTouchPoint::kStateStationary) {
40 related_pointer_events.push_back(
41 WebPointerEvent(touch_event, touch_event.touches[i]));
42 }
43 }
44 }
45 return related_pointer_events;
46 }
47
32 Vector<std::pair<WebTouchPoint, TimeTicks>> GetCoalescedPoints( 48 Vector<std::pair<WebTouchPoint, TimeTicks>> GetCoalescedPoints(
33 const Vector<WebTouchEvent>& coalesced_events, 49 const Vector<WebTouchEvent>& coalesced_events,
34 int id) { 50 int id) {
35 Vector<std::pair<WebTouchPoint, TimeTicks>> related_points; 51 Vector<std::pair<WebTouchPoint, TimeTicks>> related_points;
36 for (const auto& touch_event : coalesced_events) { 52 for (const auto& touch_event : coalesced_events) {
37 for (unsigned i = 0; i < touch_event.touches_length; ++i) { 53 for (unsigned i = 0; i < touch_event.touches_length; ++i) {
38 if (touch_event.touches[i].id == id && 54 if (touch_event.touches[i].id == id &&
39 touch_event.touches[i].state != WebTouchPoint::kStateStationary) { 55 touch_event.touches[i].state != WebTouchPoint::kStateStationary) {
40 related_points.push_back(std::pair<WebTouchPoint, TimeTicks>( 56 related_points.push_back(std::pair<WebTouchPoint, TimeTicks>(
41 touch_event.TouchPointInRootFrame(i), 57 touch_event.TouchPointInRootFrame(i),
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 // associated with so just pick the first finger. 327 // associated with so just pick the first finger.
312 RefPtr<UserGestureToken> possible_gesture_token; 328 RefPtr<UserGestureToken> possible_gesture_token;
313 if (event.GetType() == WebInputEvent::kTouchEnd && 329 if (event.GetType() == WebInputEvent::kTouchEnd &&
314 !in_canceled_state_for_pointer_type_touch_ && event.touches_length && 330 !in_canceled_state_for_pointer_type_touch_ && event.touches_length &&
315 first_pointer_event_target.target_frame) { 331 first_pointer_event_target.target_frame) {
316 possible_gesture_token = UserGestureToken::Create( 332 possible_gesture_token = UserGestureToken::Create(
317 first_pointer_event_target.target_frame->GetDocument()); 333 first_pointer_event_target.target_frame->GetDocument());
318 } 334 }
319 UserGestureIndicator holder(possible_gesture_token); 335 UserGestureIndicator holder(possible_gesture_token);
320 336
321 HeapVector<EventHandlingUtil::PointerEventTarget> pointer_event_targets;
322 337
323 for (unsigned touch_point_idx = 0; touch_point_idx < event.touches_length; 338 for (unsigned touch_point_idx = 0; touch_point_idx < event.touches_length;
324 ++touch_point_idx) { 339 ++touch_point_idx) {
325 // Do any necessary hit-tests and compute the event targets for all pointers 340 // Do any necessary hit-tests and compute the event targets for all pointers
326 // in the event. 341 // in the event.
327 const auto& touch_point = event.TouchPointInRootFrame(touch_point_idx); 342 const auto& touch_point = event.TouchPointInRootFrame(touch_point_idx);
328 EventHandlingUtil::PointerEventTarget pointer_event_target = 343 EventHandlingUtil::PointerEventTarget pointer_event_target =
329 touch_point_idx ? ComputePointerEventTarget(touch_point) 344 touch_point_idx ? ComputePointerEventTarget(touch_point)
330 : first_pointer_event_target; 345 : first_pointer_event_target;
331 pointer_event_targets.push_back(pointer_event_target);
332 346
333 DispatchTouchPointerEvent( 347 if (touch_point.state != blink::WebTouchPoint::kStateStationary) {
334 touch_point, pointer_event_target, 348 DispatchTouchPointerEvent(
335 GetCoalescedPoints(coalesced_events, touch_point.id), 349 touch_point, pointer_event_target,
336 static_cast<WebInputEvent::Modifiers>(event.GetModifiers()), 350 GetCoalescedPoints(coalesced_events, touch_point.id),
337 event.TimeStampSeconds(), event.unique_touch_event_id); 351 static_cast<WebInputEvent::Modifiers>(event.GetModifiers()),
352 event.TimeStampSeconds(), event.unique_touch_event_id);
353
354 touch_event_manager_->HandleTouchPoint(
355 WebPointerEvent(event, event.touches[touch_point_idx]),
356 GetCoalescedWebPointerEventsWithNoTransformation(
357 coalesced_events, event.touches[touch_point_idx].id),
358 pointer_event_target);
359 }
338 } 360 }
339 361
340 return touch_event_manager_->HandleTouchEvent(event, coalesced_events, 362 return touch_event_manager_->HandleVSyncSignal();
341 pointer_event_targets);
342 } 363 }
343 364
344 EventHandlingUtil::PointerEventTarget 365 EventHandlingUtil::PointerEventTarget
345 PointerEventManager::ComputePointerEventTarget( 366 PointerEventManager::ComputePointerEventTarget(
346 const WebTouchPoint& touch_point) { 367 const WebTouchPoint& touch_point) {
347 EventHandlingUtil::PointerEventTarget pointer_event_target; 368 EventHandlingUtil::PointerEventTarget pointer_event_target;
348 369
349 int pointer_id = pointer_event_factory_.GetPointerEventId(touch_point); 370 int pointer_id = pointer_event_factory_.GetPointerEventId(touch_point);
350 // Do the hit test either when the touch first starts or when the touch 371 // Do the hit test either when the touch first starts or when the touch
351 // is not captured. |m_pendingPointerCaptureTarget| indicates the target 372 // is not captured. |m_pendingPointerCaptureTarget| indicates the target
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 void PointerEventManager::DispatchTouchPointerEvent( 417 void PointerEventManager::DispatchTouchPointerEvent(
397 const WebTouchPoint& touch_point, 418 const WebTouchPoint& touch_point,
398 const EventHandlingUtil::PointerEventTarget& pointer_event_target, 419 const EventHandlingUtil::PointerEventTarget& pointer_event_target,
399 const Vector<std::pair<WebTouchPoint, TimeTicks>>& coalesced_events, 420 const Vector<std::pair<WebTouchPoint, TimeTicks>>& coalesced_events,
400 WebInputEvent::Modifiers modifiers, 421 WebInputEvent::Modifiers modifiers,
401 double timestamp, 422 double timestamp,
402 uint32_t unique_touch_event_id) { 423 uint32_t unique_touch_event_id) {
403 // Iterate through the touch points, sending PointerEvents to the targets as 424 // Iterate through the touch points, sending PointerEvents to the targets as
404 // required. 425 // required.
405 // Do not send pointer events for stationary touches or null targetFrame 426 // Do not send pointer events for stationary touches or null targetFrame
406 if (pointer_event_target.target_node && pointer_event_target.target_frame && 427 if (pointer_event_target.target_node && pointer_event_target.target_frame &&
mustaq 2017/06/08 20:02:52 Why are you not skipping the stationary points her
Navid Zolghadr 2017/06/08 21:18:40 I have moved the check outside of the function and
mustaq 2017/06/09 16:12:26 Sg, thanks. Please check the comments about stati
407 touch_point.state != WebTouchPoint::kStateStationary &&
408 !in_canceled_state_for_pointer_type_touch_) { 428 !in_canceled_state_for_pointer_type_touch_) {
409 PointerEvent* pointer_event = pointer_event_factory_.Create( 429 PointerEvent* pointer_event = pointer_event_factory_.Create(
410 touch_point, coalesced_events, 430 touch_point, coalesced_events,
411 static_cast<WebInputEvent::Modifiers>(modifiers), 431 static_cast<WebInputEvent::Modifiers>(modifiers),
412 TimeTicks::FromSeconds(timestamp), pointer_event_target.target_frame, 432 TimeTicks::FromSeconds(timestamp), pointer_event_target.target_frame,
413 pointer_event_target.target_node 433 pointer_event_target.target_node
414 ? pointer_event_target.target_node->GetDocument().domWindow() 434 ? pointer_event_target.target_node->GetDocument().domWindow()
415 : nullptr); 435 : nullptr);
416 436
417 WebInputEventResult result = 437 WebInputEventResult result =
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 if (first_id > unique_touch_event_id) 765 if (first_id > unique_touch_event_id)
746 return false; 766 return false;
747 touch_ids_for_canceled_pointerdowns_.TakeFirst(); 767 touch_ids_for_canceled_pointerdowns_.TakeFirst();
748 if (first_id == unique_touch_event_id) 768 if (first_id == unique_touch_event_id)
749 return true; 769 return true;
750 } 770 }
751 return false; 771 return false;
752 } 772 }
753 773
754 } // namespace blink 774 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698