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

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

Issue 2860663006: Remove WebTouchEvent from TouchEventManager APIs (Closed)
Patch Set: Add TODO for clarification of the fields Created 3 years, 5 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 15 matching lines...) Expand all
26 26
27 namespace { 27 namespace {
28 28
29 size_t ToPointerTypeIndex(WebPointerProperties::PointerType t) { 29 size_t ToPointerTypeIndex(WebPointerProperties::PointerType t) {
30 return static_cast<size_t>(t); 30 return static_cast<size_t>(t);
31 } 31 }
32 bool HasPointerEventListener(const EventHandlerRegistry& registry) { 32 bool HasPointerEventListener(const EventHandlerRegistry& registry) {
33 return registry.HasEventHandlers(EventHandlerRegistry::kPointerEvent); 33 return registry.HasEventHandlers(EventHandlerRegistry::kPointerEvent);
34 } 34 }
35 35
36 Vector<WebPointerEvent> GetCoalescedWebPointerEventsWithNoTransformation(
37 const Vector<WebTouchEvent>& coalesced_events,
38 int id) {
39 Vector<WebPointerEvent> related_pointer_events;
40 for (const auto& touch_event : coalesced_events) {
41 for (unsigned i = 0; i < touch_event.touches_length; ++i) {
42 if (touch_event.touches[i].id == id &&
43 touch_event.touches[i].state != WebTouchPoint::kStateStationary) {
44 related_pointer_events.push_back(
45 WebPointerEvent(touch_event, touch_event.touches[i]));
46 }
47 }
48 }
49 return related_pointer_events;
50 }
51
36 Vector<std::pair<WebTouchPoint, TimeTicks>> GetCoalescedPoints( 52 Vector<std::pair<WebTouchPoint, TimeTicks>> GetCoalescedPoints(
37 const Vector<WebTouchEvent>& coalesced_events, 53 const Vector<WebTouchEvent>& coalesced_events,
38 int id) { 54 int id) {
39 Vector<std::pair<WebTouchPoint, TimeTicks>> related_points; 55 Vector<std::pair<WebTouchPoint, TimeTicks>> related_points;
40 for (const auto& touch_event : coalesced_events) { 56 for (const auto& touch_event : coalesced_events) {
41 for (unsigned i = 0; i < touch_event.touches_length; ++i) { 57 for (unsigned i = 0; i < touch_event.touches_length; ++i) {
42 if (touch_event.touches[i].id == id && 58 if (touch_event.touches[i].id == id &&
43 touch_event.touches[i].state != WebTouchPoint::kStateStationary) { 59 touch_event.touches[i].state != WebTouchPoint::kStateStationary) {
44 related_points.push_back(std::pair<WebTouchPoint, TimeTicks>( 60 related_points.push_back(std::pair<WebTouchPoint, TimeTicks>(
45 touch_event.TouchPointInRootFrame(i), 61 touch_event.TouchPointInRootFrame(i),
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 // associated with so just pick the first finger. 333 // associated with so just pick the first finger.
318 RefPtr<UserGestureToken> possible_gesture_token; 334 RefPtr<UserGestureToken> possible_gesture_token;
319 if (event.GetType() == WebInputEvent::kTouchEnd && 335 if (event.GetType() == WebInputEvent::kTouchEnd &&
320 !in_canceled_state_for_pointer_type_touch_ && event.touches_length && 336 !in_canceled_state_for_pointer_type_touch_ && event.touches_length &&
321 first_pointer_event_target.target_frame) { 337 first_pointer_event_target.target_frame) {
322 possible_gesture_token = UserGestureToken::Create( 338 possible_gesture_token = UserGestureToken::Create(
323 first_pointer_event_target.target_frame->GetDocument()); 339 first_pointer_event_target.target_frame->GetDocument());
324 } 340 }
325 UserGestureIndicator holder(possible_gesture_token); 341 UserGestureIndicator holder(possible_gesture_token);
326 342
327 HeapVector<EventHandlingUtil::PointerEventTarget> pointer_event_targets;
328 343
329 for (unsigned touch_point_idx = 0; touch_point_idx < event.touches_length; 344 for (unsigned touch_point_idx = 0; touch_point_idx < event.touches_length;
330 ++touch_point_idx) { 345 ++touch_point_idx) {
331 // Do any necessary hit-tests and compute the event targets for all pointers 346 // Do any necessary hit-tests and compute the event targets for all pointers
332 // in the event. 347 // in the event.
333 const auto& touch_point = event.TouchPointInRootFrame(touch_point_idx); 348 const auto& touch_point = event.TouchPointInRootFrame(touch_point_idx);
334 EventHandlingUtil::PointerEventTarget pointer_event_target = 349 EventHandlingUtil::PointerEventTarget pointer_event_target =
335 touch_point_idx ? ComputePointerEventTarget(touch_point) 350 touch_point_idx ? ComputePointerEventTarget(touch_point)
336 : first_pointer_event_target; 351 : first_pointer_event_target;
337 pointer_event_targets.push_back(pointer_event_target);
338 352
339 DispatchTouchPointerEvent( 353 if (touch_point.state != blink::WebTouchPoint::kStateStationary) {
340 touch_point, pointer_event_target, 354 DispatchTouchPointerEvent(
341 GetCoalescedPoints(coalesced_events, touch_point.id), 355 touch_point, pointer_event_target,
342 static_cast<WebInputEvent::Modifiers>(event.GetModifiers()), 356 GetCoalescedPoints(coalesced_events, touch_point.id),
343 event.TimeStampSeconds(), event.unique_touch_event_id); 357 static_cast<WebInputEvent::Modifiers>(event.GetModifiers()),
358 event.TimeStampSeconds(), event.unique_touch_event_id);
359
360 touch_event_manager_->HandleTouchPoint(
361 WebPointerEvent(event, event.touches[touch_point_idx]),
362 GetCoalescedWebPointerEventsWithNoTransformation(
363 coalesced_events, event.touches[touch_point_idx].id),
364 pointer_event_target);
365 }
344 } 366 }
345 367
346 return touch_event_manager_->HandleTouchEvent(event, coalesced_events, 368 // Calling this function |FlushEvents| will be moved to MainThreadEventQueue
347 pointer_event_targets); 369 // class. It will be called before rAF and also whenever we run in low latency
370 // mode as mentioned in crbug.com/728250.
371 return touch_event_manager_->FlushEvents();
348 } 372 }
349 373
350 EventHandlingUtil::PointerEventTarget 374 EventHandlingUtil::PointerEventTarget
351 PointerEventManager::ComputePointerEventTarget( 375 PointerEventManager::ComputePointerEventTarget(
352 const WebTouchPoint& touch_point) { 376 const WebTouchPoint& touch_point) {
353 EventHandlingUtil::PointerEventTarget pointer_event_target; 377 EventHandlingUtil::PointerEventTarget pointer_event_target;
354 378
355 int pointer_id = pointer_event_factory_.GetPointerEventId(touch_point); 379 int pointer_id = pointer_event_factory_.GetPointerEventId(touch_point);
356 // Do the hit test either when the touch first starts or when the touch 380 // Do the hit test either when the touch first starts or when the touch
357 // is not captured. |m_pendingPointerCaptureTarget| indicates the target 381 // is not captured. |m_pendingPointerCaptureTarget| indicates the target
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 const WebTouchPoint& touch_point, 427 const WebTouchPoint& touch_point,
404 const EventHandlingUtil::PointerEventTarget& pointer_event_target, 428 const EventHandlingUtil::PointerEventTarget& pointer_event_target,
405 const Vector<std::pair<WebTouchPoint, TimeTicks>>& coalesced_events, 429 const Vector<std::pair<WebTouchPoint, TimeTicks>>& coalesced_events,
406 WebInputEvent::Modifiers modifiers, 430 WebInputEvent::Modifiers modifiers,
407 double timestamp, 431 double timestamp,
408 uint32_t unique_touch_event_id) { 432 uint32_t unique_touch_event_id) {
409 // Iterate through the touch points, sending PointerEvents to the targets as 433 // Iterate through the touch points, sending PointerEvents to the targets as
410 // required. 434 // required.
411 // Do not send pointer events for stationary touches or null targetFrame 435 // Do not send pointer events for stationary touches or null targetFrame
412 if (pointer_event_target.target_node && pointer_event_target.target_frame && 436 if (pointer_event_target.target_node && pointer_event_target.target_frame &&
413 touch_point.state != WebTouchPoint::kStateStationary &&
414 !in_canceled_state_for_pointer_type_touch_) { 437 !in_canceled_state_for_pointer_type_touch_) {
415 PointerEvent* pointer_event = pointer_event_factory_.Create( 438 PointerEvent* pointer_event = pointer_event_factory_.Create(
416 touch_point, coalesced_events, 439 touch_point, coalesced_events,
417 static_cast<WebInputEvent::Modifiers>(modifiers), 440 static_cast<WebInputEvent::Modifiers>(modifiers),
418 TimeTicks::FromSeconds(timestamp), pointer_event_target.target_frame, 441 TimeTicks::FromSeconds(timestamp), pointer_event_target.target_frame,
419 pointer_event_target.target_node 442 pointer_event_target.target_node
420 ? pointer_event_target.target_node->GetDocument().domWindow() 443 ? pointer_event_target.target_node->GetDocument().domWindow()
421 : nullptr); 444 : nullptr);
422 445
423 WebInputEventResult result = 446 WebInputEventResult result =
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 if (first_id > unique_touch_event_id) 774 if (first_id > unique_touch_event_id)
752 return false; 775 return false;
753 touch_ids_for_canceled_pointerdowns_.TakeFirst(); 776 touch_ids_for_canceled_pointerdowns_.TakeFirst();
754 if (first_id == unique_touch_event_id) 777 if (first_id == unique_touch_event_id)
755 return true; 778 return true;
756 } 779 }
757 return false; 780 return false;
758 } 781 }
759 782
760 } // namespace blink 783 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698