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

Side by Side Diff: ui/events/blink/input_handler_proxy.cc

Issue 2256733003: Touchpad scroll latching enabled for Mac behind flag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ClearCurrentlyScrollingLayerForTesting added. Created 4 years, 3 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 | « content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ui/events/blink/input_handler_proxy.h" 5 #include "ui/events/blink/input_handler_proxy.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 return scroll_begin_event; 125 return scroll_begin_event;
126 } 126 }
127 127
128 cc::ScrollState CreateScrollStateForGesture(const WebGestureEvent& event) { 128 cc::ScrollState CreateScrollStateForGesture(const WebGestureEvent& event) {
129 cc::ScrollStateData scroll_state_data; 129 cc::ScrollStateData scroll_state_data;
130 switch (event.type) { 130 switch (event.type) {
131 case WebInputEvent::GestureScrollBegin: 131 case WebInputEvent::GestureScrollBegin:
132 scroll_state_data.position_x = event.x; 132 scroll_state_data.position_x = event.x;
133 scroll_state_data.position_y = event.y; 133 scroll_state_data.position_y = event.y;
134 scroll_state_data.is_beginning = true; 134 scroll_state_data.is_beginning = true;
135 // On Mac, a GestureScrollBegin in the inertial phase indicates a fling
136 // start.
137 if (event.data.scrollBegin.inertialPhase ==
138 WebGestureEvent::MomentumPhase) {
139 scroll_state_data.is_in_inertial_phase = true;
140 }
135 break; 141 break;
136 case WebInputEvent::GestureFlingStart: 142 case WebInputEvent::GestureFlingStart:
137 scroll_state_data.velocity_x = event.data.flingStart.velocityX; 143 scroll_state_data.velocity_x = event.data.flingStart.velocityX;
138 scroll_state_data.velocity_y = event.data.flingStart.velocityY; 144 scroll_state_data.velocity_y = event.data.flingStart.velocityY;
139 scroll_state_data.is_in_inertial_phase = true; 145 scroll_state_data.is_in_inertial_phase = true;
140 break; 146 break;
141 case WebInputEvent::GestureScrollUpdate: 147 case WebInputEvent::GestureScrollUpdate:
142 scroll_state_data.delta_x = -event.data.scrollUpdate.deltaX; 148 scroll_state_data.delta_x = -event.data.scrollUpdate.deltaX;
143 scroll_state_data.delta_y = -event.data.scrollUpdate.deltaY; 149 scroll_state_data.delta_y = -event.data.scrollUpdate.deltaY;
144 scroll_state_data.velocity_x = event.data.scrollUpdate.velocityX; 150 scroll_state_data.velocity_x = event.data.scrollUpdate.velocityX;
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 : 0); 489 : 0);
484 490
485 if (wheel_event.scrollByPage) { 491 if (wheel_event.scrollByPage) {
486 // TODO(jamesr): We don't properly handle scroll by page in the compositor 492 // TODO(jamesr): We don't properly handle scroll by page in the compositor
487 // thread, so punt it to the main thread. http://crbug.com/236639 493 // thread, so punt it to the main thread. http://crbug.com/236639
488 result = DID_NOT_HANDLE; 494 result = DID_NOT_HANDLE;
489 RecordMainThreadScrollingReasons( 495 RecordMainThreadScrollingReasons(
490 blink::WebGestureDeviceTouchpad, 496 blink::WebGestureDeviceTouchpad,
491 cc::MainThreadScrollingReason::kPageBasedScrolling); 497 cc::MainThreadScrollingReason::kPageBasedScrolling);
492 498
493 } else if (ShouldAnimate(wheel_event.hasPreciseScrollingDeltas)) {
494 cc::InputHandler::ScrollStatus scroll_status =
495 input_handler_->ScrollAnimated(gfx::Point(wheel_event.x, wheel_event.y),
496 scroll_delta);
497
498 RecordMainThreadScrollingReasons(
499 blink::WebGestureDeviceTouchpad,
500 scroll_status.main_thread_scrolling_reasons);
501
502 switch (scroll_status.thread) {
503 case cc::InputHandler::SCROLL_ON_IMPL_THREAD:
504 result = DID_HANDLE;
505 break;
506 case cc::InputHandler::SCROLL_IGNORED:
507 result = DROP_EVENT;
508 break;
509 default:
510 result = DID_NOT_HANDLE;
511 break;
512 }
513 } else { 499 } else {
500 DCHECK(!ShouldAnimate(wheel_event.hasPreciseScrollingDeltas));
514 cc::ScrollStateData scroll_state_begin_data; 501 cc::ScrollStateData scroll_state_begin_data;
515 scroll_state_begin_data.position_x = wheel_event.x; 502 scroll_state_begin_data.position_x = wheel_event.x;
516 scroll_state_begin_data.position_y = wheel_event.y; 503 scroll_state_begin_data.position_y = wheel_event.y;
517 scroll_state_begin_data.is_beginning = true; 504 scroll_state_begin_data.is_beginning = true;
518 cc::ScrollState scroll_state_begin(scroll_state_begin_data); 505 cc::ScrollState scroll_state_begin(scroll_state_begin_data);
519 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( 506 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin(
520 &scroll_state_begin, cc::InputHandler::WHEEL); 507 &scroll_state_begin, cc::InputHandler::WHEEL);
521 508
522 RecordMainThreadScrollingReasons( 509 RecordMainThreadScrollingReasons(
523 blink::WebGestureDeviceTouchpad, 510 blink::WebGestureDeviceTouchpad,
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 if (!gesture_scroll_on_impl_thread_ && !gesture_pinch_on_impl_thread_) 619 if (!gesture_scroll_on_impl_thread_ && !gesture_pinch_on_impl_thread_)
633 return DID_NOT_HANDLE; 620 return DID_NOT_HANDLE;
634 621
635 cc::ScrollState scroll_state = CreateScrollStateForGesture(gesture_event); 622 cc::ScrollState scroll_state = CreateScrollStateForGesture(gesture_event);
636 gfx::Point scroll_point(gesture_event.x, gesture_event.y); 623 gfx::Point scroll_point(gesture_event.x, gesture_event.y);
637 gfx::Vector2dF scroll_delta(-gesture_event.data.scrollUpdate.deltaX, 624 gfx::Vector2dF scroll_delta(-gesture_event.data.scrollUpdate.deltaX,
638 -gesture_event.data.scrollUpdate.deltaY); 625 -gesture_event.data.scrollUpdate.deltaY);
639 626
640 if (ShouldAnimate(gesture_event.data.scrollUpdate.deltaUnits != 627 if (ShouldAnimate(gesture_event.data.scrollUpdate.deltaUnits !=
641 blink::WebGestureEvent::ScrollUnits::Pixels)) { 628 blink::WebGestureEvent::ScrollUnits::Pixels)) {
629 DCHECK(!scroll_state.is_in_inertial_phase());
642 switch (input_handler_->ScrollAnimated(scroll_point, scroll_delta).thread) { 630 switch (input_handler_->ScrollAnimated(scroll_point, scroll_delta).thread) {
643 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: 631 case cc::InputHandler::SCROLL_ON_IMPL_THREAD:
644 return DID_HANDLE; 632 return DID_HANDLE;
645 case cc::InputHandler::SCROLL_IGNORED: 633 case cc::InputHandler::SCROLL_IGNORED:
646 return DROP_EVENT; 634 return DROP_EVENT;
647 default: 635 default:
648 return DID_NOT_HANDLE; 636 return DID_NOT_HANDLE;
649 } 637 }
650 } 638 }
651 cc::InputHandlerScrollResult scroll_result = 639 cc::InputHandlerScrollResult scroll_result =
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 // is made asynchronously, to minimize divergence between main thread and 1329 // is made asynchronously, to minimize divergence between main thread and
1342 // impl thread event handling paths. 1330 // impl thread event handling paths.
1343 base::ThreadTaskRunnerHandle::Get()->PostTask( 1331 base::ThreadTaskRunnerHandle::Get()->PostTask(
1344 FROM_HERE, 1332 FROM_HERE,
1345 base::Bind(&InputScrollElasticityController::ObserveGestureEventAndResult, 1333 base::Bind(&InputScrollElasticityController::ObserveGestureEventAndResult,
1346 scroll_elasticity_controller_->GetWeakPtr(), gesture_event, 1334 scroll_elasticity_controller_->GetWeakPtr(), gesture_event,
1347 scroll_result)); 1335 scroll_result));
1348 } 1336 }
1349 1337
1350 } // namespace ui 1338 } // namespace ui
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698