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

Side by Side Diff: content/renderer/input/input_handler_proxy.cc

Issue 1052773002: cc: Add a rails argument to InputHandler::ScrollBy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix comiple Created 5 years, 8 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 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 "content/renderer/input/input_handler_proxy.h" 5 #include "content/renderer/input/input_handler_proxy.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 "Event.Latency.RendererImpl.GestureFlingStart", 161 "Event.Latency.RendererImpl.GestureFlingStart",
162 delta.InMicroseconds(), 1, 1000000, 100); 162 delta.InMicroseconds(), 1, 1000000, 100);
163 break; 163 break;
164 default: 164 default:
165 NOTREACHED(); 165 NOTREACHED();
166 break; 166 break;
167 } 167 }
168 } 168 }
169 } 169 }
170 170
171 cc::InputHandler::RailsMode ConvertRailsMode(
172 blink::WebInputEvent::RailsMode rails_mode) {
173 switch (rails_mode) {
174 case blink::WebInputEvent::RailsModeFree:
175 return cc::InputHandler::RAILS_MODE_FREE;
176 case blink::WebInputEvent::RailsModeHorizontal:
177 return cc::InputHandler::RAILS_MODE_HORIZONTAL;
178 case blink::WebInputEvent::RailsModeVertical:
179 return cc::InputHandler::RAILS_MODE_VERTICAL;
180 default:
181 NOTREACHED();
182 break;
183 }
184 return cc::InputHandler::RAILS_MODE_FREE;
185 }
186
171 } // namespace 187 } // namespace
172 188
173 namespace content { 189 namespace content {
174 190
175 InputHandlerProxy::InputHandlerProxy(cc::InputHandler* input_handler, 191 InputHandlerProxy::InputHandlerProxy(cc::InputHandler* input_handler,
176 InputHandlerProxyClient* client) 192 InputHandlerProxyClient* client)
177 : client_(client), 193 : client_(client),
178 input_handler_(input_handler), 194 input_handler_(input_handler),
179 deferred_fling_cancel_time_seconds_(0), 195 deferred_fling_cancel_time_seconds_(0),
180 #ifndef NDEBUG 196 #ifndef NDEBUG
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 break; 340 break;
325 } 341 }
326 342
327 return DID_NOT_HANDLE; 343 return DID_NOT_HANDLE;
328 } 344 }
329 345
330 InputHandlerProxy::EventDisposition InputHandlerProxy::HandleMouseWheel( 346 InputHandlerProxy::EventDisposition InputHandlerProxy::HandleMouseWheel(
331 const WebMouseWheelEvent& wheel_event) { 347 const WebMouseWheelEvent& wheel_event) {
332 InputHandlerProxy::EventDisposition result = DID_NOT_HANDLE; 348 InputHandlerProxy::EventDisposition result = DID_NOT_HANDLE;
333 cc::InputHandlerScrollResult scroll_result; 349 cc::InputHandlerScrollResult scroll_result;
334 350 const gfx::Vector2dF scroll_delta(-wheel_event.deltaX, -wheel_event.deltaY);
335 // TODO(ccameron): The rail information should be pushed down into 351 const cc::InputHandler::RailsMode rails_mode =
336 // InputHandler. 352 ConvertRailsMode(wheel_event.railsMode);
337 gfx::Vector2dF scroll_delta(
338 wheel_event.railsMode != WebInputEvent::RailsModeVertical
339 ? -wheel_event.deltaX
340 : 0,
341 wheel_event.railsMode != WebInputEvent::RailsModeHorizontal
342 ? -wheel_event.deltaY
343 : 0);
344 353
345 if (wheel_event.scrollByPage) { 354 if (wheel_event.scrollByPage) {
346 // TODO(jamesr): We don't properly handle scroll by page in the compositor 355 // TODO(jamesr): We don't properly handle scroll by page in the compositor
347 // thread, so punt it to the main thread. http://crbug.com/236639 356 // thread, so punt it to the main thread. http://crbug.com/236639
348 result = DID_NOT_HANDLE; 357 result = DID_NOT_HANDLE;
349 } else if (!wheel_event.canScroll) { 358 } else if (!wheel_event.canScroll) {
350 // Wheel events with |canScroll| == false will not trigger scrolling, 359 // Wheel events with |canScroll| == false will not trigger scrolling,
351 // only event handlers. Forward to the main thread. 360 // only event handlers. Forward to the main thread.
352 result = DID_NOT_HANDLE; 361 result = DID_NOT_HANDLE;
353 } else if (smooth_scroll_enabled_) { 362 } else if (smooth_scroll_enabled_) {
(...skipping 13 matching lines...) Expand all
367 } else { 376 } else {
368 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( 377 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin(
369 gfx::Point(wheel_event.x, wheel_event.y), cc::InputHandler::WHEEL); 378 gfx::Point(wheel_event.x, wheel_event.y), cc::InputHandler::WHEEL);
370 switch (scroll_status) { 379 switch (scroll_status) {
371 case cc::InputHandler::SCROLL_STARTED: { 380 case cc::InputHandler::SCROLL_STARTED: {
372 TRACE_EVENT_INSTANT2("input", 381 TRACE_EVENT_INSTANT2("input",
373 "InputHandlerProxy::handle_input wheel scroll", 382 "InputHandlerProxy::handle_input wheel scroll",
374 TRACE_EVENT_SCOPE_THREAD, "deltaX", 383 TRACE_EVENT_SCOPE_THREAD, "deltaX",
375 scroll_delta.x(), "deltaY", scroll_delta.y()); 384 scroll_delta.x(), "deltaY", scroll_delta.y());
376 gfx::Point scroll_point(wheel_event.x, wheel_event.y); 385 gfx::Point scroll_point(wheel_event.x, wheel_event.y);
377 scroll_result = input_handler_->ScrollBy(scroll_point, scroll_delta); 386 scroll_result =
387 input_handler_->ScrollBy(scroll_point, scroll_delta, rails_mode);
378 HandleOverscroll(scroll_point, scroll_result); 388 HandleOverscroll(scroll_point, scroll_result);
379 input_handler_->ScrollEnd(); 389 input_handler_->ScrollEnd();
380 result = scroll_result.did_scroll ? DID_HANDLE : DROP_EVENT; 390 result = scroll_result.did_scroll ? DID_HANDLE : DROP_EVENT;
381 break; 391 break;
382 } 392 }
383 case cc::InputHandler::SCROLL_IGNORED: 393 case cc::InputHandler::SCROLL_IGNORED:
384 // TODO(jamesr): This should be DROP_EVENT, but in cases where we fail 394 // TODO(jamesr): This should be DROP_EVENT, but in cases where we fail
385 // to properly sync scrollability it's safer to send the event to the 395 // to properly sync scrollability it's safer to send the event to the
386 // main thread. Change back to DROP_EVENT once we have synchronization 396 // main thread. Change back to DROP_EVENT once we have synchronization
387 // bugs sorted out. 397 // bugs sorted out.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 DCHECK(expect_scroll_update_end_); 462 DCHECK(expect_scroll_update_end_);
453 #endif 463 #endif
454 464
455 if (!gesture_scroll_on_impl_thread_ && !gesture_pinch_on_impl_thread_) 465 if (!gesture_scroll_on_impl_thread_ && !gesture_pinch_on_impl_thread_)
456 return DID_NOT_HANDLE; 466 return DID_NOT_HANDLE;
457 467
458 gfx::Point scroll_point(gesture_event.x, gesture_event.y); 468 gfx::Point scroll_point(gesture_event.x, gesture_event.y);
459 gfx::Vector2dF scroll_delta(-gesture_event.data.scrollUpdate.deltaX, 469 gfx::Vector2dF scroll_delta(-gesture_event.data.scrollUpdate.deltaX,
460 -gesture_event.data.scrollUpdate.deltaY); 470 -gesture_event.data.scrollUpdate.deltaY);
461 cc::InputHandlerScrollResult scroll_result = input_handler_->ScrollBy( 471 cc::InputHandlerScrollResult scroll_result = input_handler_->ScrollBy(
462 scroll_point, scroll_delta); 472 scroll_point, scroll_delta, cc::InputHandler::RAILS_MODE_FREE);
463 HandleOverscroll(scroll_point, scroll_result); 473 HandleOverscroll(scroll_point, scroll_result);
464 return scroll_result.did_scroll ? DID_HANDLE : DROP_EVENT; 474 return scroll_result.did_scroll ? DID_HANDLE : DROP_EVENT;
465 } 475 }
466 476
467 InputHandlerProxy::EventDisposition InputHandlerProxy::HandleGestureScrollEnd( 477 InputHandlerProxy::EventDisposition InputHandlerProxy::HandleGestureScrollEnd(
468 const WebGestureEvent& gesture_event) { 478 const WebGestureEvent& gesture_event) {
469 #ifndef NDEBUG 479 #ifndef NDEBUG
470 DCHECK(expect_scroll_update_end_); 480 DCHECK(expect_scroll_update_end_);
471 expect_scroll_update_end_ = false; 481 expect_scroll_update_end_ = false;
472 #endif 482 #endif
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 clipped_increment.height); 938 clipped_increment.height);
929 939
930 bool did_scroll = false; 940 bool did_scroll = false;
931 941
932 switch (fling_parameters_.sourceDevice) { 942 switch (fling_parameters_.sourceDevice) {
933 case blink::WebGestureDeviceTouchpad: 943 case blink::WebGestureDeviceTouchpad:
934 did_scroll = TouchpadFlingScroll(clipped_increment); 944 did_scroll = TouchpadFlingScroll(clipped_increment);
935 break; 945 break;
936 case blink::WebGestureDeviceTouchscreen: { 946 case blink::WebGestureDeviceTouchscreen: {
937 clipped_increment = ToClientScrollIncrement(clipped_increment); 947 clipped_increment = ToClientScrollIncrement(clipped_increment);
938 cc::InputHandlerScrollResult scroll_result = input_handler_->ScrollBy( 948 cc::InputHandlerScrollResult scroll_result =
939 fling_parameters_.point, clipped_increment); 949 input_handler_->ScrollBy(fling_parameters_.point, clipped_increment,
950 cc::InputHandler::RAILS_MODE_FREE);
940 HandleOverscroll(fling_parameters_.point, scroll_result); 951 HandleOverscroll(fling_parameters_.point, scroll_result);
941 did_scroll = scroll_result.did_scroll; 952 did_scroll = scroll_result.did_scroll;
942 } break; 953 } break;
943 } 954 }
944 955
945 if (did_scroll) { 956 if (did_scroll) {
946 fling_parameters_.cumulativeScroll.width += clipped_increment.width; 957 fling_parameters_.cumulativeScroll.width += clipped_increment.width;
947 fling_parameters_.cumulativeScroll.height += clipped_increment.height; 958 fling_parameters_.cumulativeScroll.height += clipped_increment.height;
948 } 959 }
949 960
950 // It's possible the provided |increment| is sufficiently small as to not 961 // It's possible the provided |increment| is sufficiently small as to not
951 // trigger a scroll, e.g., with a trivial time delta between fling updates. 962 // trigger a scroll, e.g., with a trivial time delta between fling updates.
952 // Return true in this case to prevent early fling termination. 963 // Return true in this case to prevent early fling termination.
953 if (std::abs(clipped_increment.width) < kScrollEpsilon && 964 if (std::abs(clipped_increment.width) < kScrollEpsilon &&
954 std::abs(clipped_increment.height) < kScrollEpsilon) 965 std::abs(clipped_increment.height) < kScrollEpsilon)
955 return true; 966 return true;
956 967
957 return did_scroll; 968 return did_scroll;
958 } 969 }
959 970
960 } // namespace content 971 } // namespace content
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_unittest_scroll.cc ('k') | content/renderer/input/input_handler_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698