Commit d6d8dc82 authored by sadrul@chromium.org's avatar sadrul@chromium.org

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
parent 3b9c4d6c
...@@ -171,8 +171,10 @@ void OverscrollController::ProcessEventForOverscroll( ...@@ -171,8 +171,10 @@ void OverscrollController::ProcessEventForOverscroll(
case WebKit::WebInputEvent::MouseWheel: { case WebKit::WebInputEvent::MouseWheel: {
const WebKit::WebMouseWheelEvent& wheel = const WebKit::WebMouseWheelEvent& wheel =
static_cast<const WebKit::WebMouseWheelEvent&>(event); static_cast<const WebKit::WebMouseWheelEvent&>(event);
if (wheel.hasPreciseScrollingDeltas) if (wheel.hasPreciseScrollingDeltas) {
ProcessOverscroll(wheel.deltaX, wheel.deltaY); ProcessOverscroll(wheel.deltaX * wheel.accelerationRatioX,
wheel.deltaY * wheel.accelerationRatioY);
}
break; break;
} }
case WebKit::WebInputEvent::GestureScrollUpdate: { case WebKit::WebInputEvent::GestureScrollUpdate: {
......
...@@ -114,6 +114,16 @@ bool IsLastTouchEvent(const WebKit::WebTouchEvent& touch) { ...@@ -114,6 +114,16 @@ bool IsLastTouchEvent(const WebKit::WebTouchEvent& touch) {
touch.touches[0].state == WebKit::WebTouchPoint::StateCancelled); 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 } // namespace
...@@ -966,10 +976,24 @@ void RenderWidgetHostImpl::ForwardWheelEvent( ...@@ -966,10 +976,24 @@ void RenderWidgetHostImpl::ForwardWheelEvent(
} else { } else {
WebMouseWheelEvent* last_wheel_event = WebMouseWheelEvent* last_wheel_event =
&coalesced_mouse_wheel_events_.back(); &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->deltaX += wheel_event.deltaX;
last_wheel_event->deltaY += wheel_event.deltaY; last_wheel_event->deltaY += wheel_event.deltaY;
last_wheel_event->wheelTicksX += wheel_event.wheelTicksX; last_wheel_event->wheelTicksX += wheel_event.wheelTicksX;
last_wheel_event->wheelTicksY += wheel_event.wheelTicksY; 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, DCHECK_GE(wheel_event.timeStampSeconds,
last_wheel_event->timeStampSeconds); last_wheel_event->timeStampSeconds);
last_wheel_event->timeStampSeconds = wheel_event.timeStampSeconds; last_wheel_event->timeStampSeconds = wheel_event.timeStampSeconds;
......
...@@ -145,9 +145,17 @@ WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( ...@@ -145,9 +145,17 @@ WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent(
webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); webkit_event.timeStampSeconds = event->time_stamp().InSecondsF();
webkit_event.hasPreciseScrollingDeltas = true; webkit_event.hasPreciseScrollingDeltas = true;
webkit_event.deltaX = event->x_offset(); 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.wheelTicksX = webkit_event.deltaX / kPixelsPerTick;
webkit_event.deltaY = event->y_offset(); webkit_event.deltaY = event->y_offset();
webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; 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; return webkit_event;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment