diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-14 16:24:20 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-14 16:24:20 +0000 |
commit | d6d8dc82f730516a28cebd90b509c9597b9d0058 (patch) | |
tree | c726919eca70461e615c4f241928a8d6b2ecf716 /content | |
parent | 3b9c4d6c1cac788bd5a90aa9c95c9334464eca44 (diff) | |
download | chromium_src-d6d8dc82f730516a28cebd90b509c9597b9d0058.zip chromium_src-d6d8dc82f730516a28cebd90b509c9597b9d0058.tar.gz chromium_src-d6d8dc82f730516a28cebd90b509c9597b9d0058.tar.bz2 |
aura: Populate and use the newly added acceleration ratio fields in wheel-events.
Wheel-scroll event deltas can have acceleration (e.g. when doing repeated
scrolls). But for overscroll, it makes more sense to use the unaccelerated
deltas.
BUG=175604
Review URL: https://codereview.chromium.org/12223110
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182473 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
3 files changed, 36 insertions, 2 deletions
diff --git a/content/browser/renderer_host/overscroll_controller.cc b/content/browser/renderer_host/overscroll_controller.cc index feb4247..dceefa4 100644 --- a/content/browser/renderer_host/overscroll_controller.cc +++ b/content/browser/renderer_host/overscroll_controller.cc @@ -171,8 +171,10 @@ void OverscrollController::ProcessEventForOverscroll( case WebKit::WebInputEvent::MouseWheel: { const WebKit::WebMouseWheelEvent& wheel = static_cast<const WebKit::WebMouseWheelEvent&>(event); - if (wheel.hasPreciseScrollingDeltas) - ProcessOverscroll(wheel.deltaX, wheel.deltaY); + if (wheel.hasPreciseScrollingDeltas) { + ProcessOverscroll(wheel.deltaX * wheel.accelerationRatioX, + wheel.deltaY * wheel.accelerationRatioY); + } break; } case WebKit::WebInputEvent::GestureScrollUpdate: { diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc index 5435407..ff96af2 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc @@ -114,6 +114,16 @@ bool IsLastTouchEvent(const WebKit::WebTouchEvent& touch) { touch.touches[0].state == WebKit::WebTouchPoint::StateCancelled); } +float GetUnacceleratedDelta(float accelerated_delta, float acceleration_ratio) { + return accelerated_delta * acceleration_ratio; +} + +float GetAccelerationRatio(float accelerated_delta, float unaccelerated_delta) { + if (unaccelerated_delta == 0.f || accelerated_delta == 0.f) + return 1.f; + return unaccelerated_delta / accelerated_delta; +} + } // namespace @@ -966,10 +976,24 @@ void RenderWidgetHostImpl::ForwardWheelEvent( } else { WebMouseWheelEvent* last_wheel_event = &coalesced_mouse_wheel_events_.back(); + float unaccelerated_x = + GetUnacceleratedDelta(last_wheel_event->deltaX, + last_wheel_event->accelerationRatioX) + + GetUnacceleratedDelta(wheel_event.deltaX, + wheel_event.accelerationRatioX); + float unaccelerated_y = + GetUnacceleratedDelta(last_wheel_event->deltaY, + last_wheel_event->accelerationRatioY) + + GetUnacceleratedDelta(wheel_event.deltaY, + wheel_event.accelerationRatioY); last_wheel_event->deltaX += wheel_event.deltaX; last_wheel_event->deltaY += wheel_event.deltaY; last_wheel_event->wheelTicksX += wheel_event.wheelTicksX; last_wheel_event->wheelTicksY += wheel_event.wheelTicksY; + last_wheel_event->accelerationRatioX = + GetAccelerationRatio(last_wheel_event->deltaX, unaccelerated_x); + last_wheel_event->accelerationRatioY = + GetAccelerationRatio(last_wheel_event->deltaY, unaccelerated_y); DCHECK_GE(wheel_event.timeStampSeconds, last_wheel_event->timeStampSeconds); last_wheel_event->timeStampSeconds = wheel_event.timeStampSeconds; diff --git a/content/browser/renderer_host/web_input_event_aurax11.cc b/content/browser/renderer_host/web_input_event_aurax11.cc index 122c345..8e4d193 100644 --- a/content/browser/renderer_host/web_input_event_aurax11.cc +++ b/content/browser/renderer_host/web_input_event_aurax11.cc @@ -145,9 +145,17 @@ WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); webkit_event.hasPreciseScrollingDeltas = true; webkit_event.deltaX = event->x_offset(); + if (event->x_offset_ordinal() != 0.f && event->x_offset() != 0.f) { + webkit_event.accelerationRatioX = + event->x_offset_ordinal() / event->x_offset(); + } webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; webkit_event.deltaY = event->y_offset(); webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; + if (event->y_offset_ordinal() != 0.f && event->y_offset() != 0.f) { + webkit_event.accelerationRatioY = + event->y_offset_ordinal() / event->y_offset(); + } return webkit_event; } |