OLD | NEW |
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 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 } | 325 } |
326 | 326 |
327 return DID_NOT_HANDLE; | 327 return DID_NOT_HANDLE; |
328 } | 328 } |
329 | 329 |
330 InputHandlerProxy::EventDisposition InputHandlerProxy::HandleMouseWheel( | 330 InputHandlerProxy::EventDisposition InputHandlerProxy::HandleMouseWheel( |
331 const WebMouseWheelEvent& wheel_event) { | 331 const WebMouseWheelEvent& wheel_event) { |
332 InputHandlerProxy::EventDisposition result = DID_NOT_HANDLE; | 332 InputHandlerProxy::EventDisposition result = DID_NOT_HANDLE; |
333 cc::InputHandlerScrollResult scroll_result; | 333 cc::InputHandlerScrollResult scroll_result; |
334 | 334 |
| 335 // TODO(ccameron): The rail information should be pushed down into |
| 336 // InputHandler. |
| 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 |
335 if (wheel_event.scrollByPage) { | 345 if (wheel_event.scrollByPage) { |
336 // TODO(jamesr): We don't properly handle scroll by page in the compositor | 346 // TODO(jamesr): We don't properly handle scroll by page in the compositor |
337 // thread, so punt it to the main thread. http://crbug.com/236639 | 347 // thread, so punt it to the main thread. http://crbug.com/236639 |
338 result = DID_NOT_HANDLE; | 348 result = DID_NOT_HANDLE; |
339 } else if (!wheel_event.canScroll) { | 349 } else if (!wheel_event.canScroll) { |
340 // Wheel events with |canScroll| == false will not trigger scrolling, | 350 // Wheel events with |canScroll| == false will not trigger scrolling, |
341 // only event handlers. Forward to the main thread. | 351 // only event handlers. Forward to the main thread. |
342 result = DID_NOT_HANDLE; | 352 result = DID_NOT_HANDLE; |
343 } else if (smooth_scroll_enabled_) { | 353 } else if (smooth_scroll_enabled_) { |
344 cc::InputHandler::ScrollStatus scroll_status = | 354 cc::InputHandler::ScrollStatus scroll_status = |
345 input_handler_->ScrollAnimated( | 355 input_handler_->ScrollAnimated(gfx::Point(wheel_event.x, wheel_event.y), |
346 gfx::Point(wheel_event.x, wheel_event.y), | 356 scroll_delta); |
347 gfx::Vector2dF(-wheel_event.deltaX, -wheel_event.deltaY)); | |
348 switch (scroll_status) { | 357 switch (scroll_status) { |
349 case cc::InputHandler::SCROLL_STARTED: | 358 case cc::InputHandler::SCROLL_STARTED: |
350 result = DID_HANDLE; | 359 result = DID_HANDLE; |
351 break; | 360 break; |
352 case cc::InputHandler::SCROLL_IGNORED: | 361 case cc::InputHandler::SCROLL_IGNORED: |
353 result = DROP_EVENT; | 362 result = DROP_EVENT; |
354 default: | 363 default: |
355 result = DID_NOT_HANDLE; | 364 result = DID_NOT_HANDLE; |
356 break; | 365 break; |
357 } | 366 } |
358 } else { | 367 } else { |
359 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( | 368 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( |
360 gfx::Point(wheel_event.x, wheel_event.y), cc::InputHandler::WHEEL); | 369 gfx::Point(wheel_event.x, wheel_event.y), cc::InputHandler::WHEEL); |
361 switch (scroll_status) { | 370 switch (scroll_status) { |
362 case cc::InputHandler::SCROLL_STARTED: { | 371 case cc::InputHandler::SCROLL_STARTED: { |
363 TRACE_EVENT_INSTANT2( | 372 TRACE_EVENT_INSTANT2("input", |
364 "input", "InputHandlerProxy::handle_input wheel scroll", | 373 "InputHandlerProxy::handle_input wheel scroll", |
365 TRACE_EVENT_SCOPE_THREAD, "deltaX", -wheel_event.deltaX, "deltaY", | 374 TRACE_EVENT_SCOPE_THREAD, "deltaX", |
366 -wheel_event.deltaY); | 375 scroll_delta.x(), "deltaY", scroll_delta.y()); |
367 gfx::Point scroll_point(wheel_event.x, wheel_event.y); | 376 gfx::Point scroll_point(wheel_event.x, wheel_event.y); |
368 gfx::Vector2dF scroll_delta(-wheel_event.deltaX, -wheel_event.deltaY); | |
369 scroll_result = input_handler_->ScrollBy(scroll_point, scroll_delta); | 377 scroll_result = input_handler_->ScrollBy(scroll_point, scroll_delta); |
370 HandleOverscroll(scroll_point, scroll_result); | 378 HandleOverscroll(scroll_point, scroll_result); |
371 input_handler_->ScrollEnd(); | 379 input_handler_->ScrollEnd(); |
372 result = scroll_result.did_scroll ? DID_HANDLE : DROP_EVENT; | 380 result = scroll_result.did_scroll ? DID_HANDLE : DROP_EVENT; |
373 break; | 381 break; |
374 } | 382 } |
375 case cc::InputHandler::SCROLL_IGNORED: | 383 case cc::InputHandler::SCROLL_IGNORED: |
376 // TODO(jamesr): This should be DROP_EVENT, but in cases where we fail | 384 // TODO(jamesr): This should be DROP_EVENT, but in cases where we fail |
377 // to properly sync scrollability it's safer to send the event to the | 385 // to properly sync scrollability it's safer to send the event to the |
378 // main thread. Change back to DROP_EVENT once we have synchronization | 386 // main thread. Change back to DROP_EVENT once we have synchronization |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
941 // trigger a scroll, e.g., with a trivial time delta between fling updates. | 949 // trigger a scroll, e.g., with a trivial time delta between fling updates. |
942 // Return true in this case to prevent early fling termination. | 950 // Return true in this case to prevent early fling termination. |
943 if (std::abs(clipped_increment.width) < kScrollEpsilon && | 951 if (std::abs(clipped_increment.width) < kScrollEpsilon && |
944 std::abs(clipped_increment.height) < kScrollEpsilon) | 952 std::abs(clipped_increment.height) < kScrollEpsilon) |
945 return true; | 953 return true; |
946 | 954 |
947 return did_scroll; | 955 return did_scroll; |
948 } | 956 } |
949 | 957 |
950 } // namespace content | 958 } // namespace content |
OLD | NEW |