summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-14 16:24:20 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-14 16:24:20 +0000
commitd6d8dc82f730516a28cebd90b509c9597b9d0058 (patch)
treec726919eca70461e615c4f241928a8d6b2ecf716 /content
parent3b9c4d6c1cac788bd5a90aa9c95c9334464eca44 (diff)
downloadchromium_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')
-rw-r--r--content/browser/renderer_host/overscroll_controller.cc6
-rw-r--r--content/browser/renderer_host/render_widget_host_impl.cc24
-rw-r--r--content/browser/renderer_host/web_input_event_aurax11.cc8
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;
}