Chromium Code Reviews| Index: content/renderer/render_widget.cc |
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
| index ff314be36cba567af9beb0eb5d1a0de4e4ca688f..9509f5168fb48ddb19a0dc93e53f2b72254107ac 100644 |
| --- a/content/renderer/render_widget.cc |
| +++ b/content/renderer/render_widget.cc |
| @@ -2147,6 +2147,12 @@ bool RenderWidget::DoesRecordFullLayer() const { |
| } |
| #endif |
| +#if defined(OS_MACOSX) && !defined(OS_IOS) |
| +bool RenderWidget::IsElasticOverscrollEnabled() const { |
| + return compositor_deps_->IsElasticOverscrollEnabled(); |
| +} |
| +#endif |
| + |
| bool RenderWidget::CanComposeInline() { |
| return true; |
| } |
| @@ -2215,6 +2221,12 @@ void RenderWidget::didOverscroll( |
| const blink::WebFloatSize& accumulatedRootOverScroll, |
| const blink::WebFloatPoint& position, |
| const blink::WebFloatSize& velocity) { |
| + if (compositor_deps_->IsElasticOverscrollEnabled()) { |
| + unused_delta_on_wheel_overscroll_ = |
| + gfx::Vector2dF(-unusedDelta.width, -unusedDelta.height); |
| + return; |
| + } |
| + |
| DidOverscrollParams params; |
| // TODO(jdduke): Consider bundling the overscroll with the input event ack to |
| // save an IPC. |
| @@ -2289,19 +2301,13 @@ void RenderWidget::ObserveWheelEventAndResult( |
| if (!compositor_deps_->IsElasticOverscrollEnabled()) |
|
jdduke (slow)
2015/06/25 23:55:45
With https://codereview.chromium.org/1209043002/,
|
| return; |
| - // Blink does not accurately compute scroll bubbling or overscroll. For now, |
| - // assume that an unprocessed event was entirely an overscroll, and that a |
| - // processed event was entirely scroll. |
| - // TODO(ccameron): Retrieve an accurate scroll result from Blink. |
| - // http://crbug.com/442859 |
| cc::InputHandlerScrollResult scroll_result; |
| - if (event_processed) { |
| - scroll_result.did_scroll = true; |
| - } else { |
| - scroll_result.did_overscroll_root = true; |
| - scroll_result.unused_scroll_delta = |
| - gfx::Vector2dF(-wheel_event.deltaX, -wheel_event.deltaY); |
| - } |
| + scroll_result.did_scroll = event_processed; |
| + scroll_result.did_overscroll_root = |
| + !unused_delta_on_wheel_overscroll_.IsZero(); |
| + scroll_result.unused_scroll_delta = unused_delta_on_wheel_overscroll_; |
| + unused_delta_on_wheel_overscroll_.set_x(0); |
| + unused_delta_on_wheel_overscroll_.set_y(0); |
| RenderThreadImpl* render_thread = RenderThreadImpl::current(); |
| InputHandlerManager* input_handler_manager = |