| Index: cc/layers/viewport.cc
|
| diff --git a/cc/layers/viewport.cc b/cc/layers/viewport.cc
|
| index 1039a1e7d9c85df7330f56338e9a5e91942079fe..059e0a491a9f5bbc20a12448edf69d274d7b566c 100644
|
| --- a/cc/layers/viewport.cc
|
| +++ b/cc/layers/viewport.cc
|
| @@ -32,30 +32,40 @@
|
| InnerScrollLayer()->ScrollBy(pending_delta);
|
| }
|
|
|
| -gfx::Vector2dF Viewport::ScrollBy(const gfx::Vector2dF& delta,
|
| - const gfx::Point& viewport_point,
|
| - bool is_direct_manipulation,
|
| - bool affect_top_controls) {
|
| - gfx::Vector2dF pending_delta = delta;
|
| - if (affect_top_controls && ShouldTopControlsConsumeScroll(delta))
|
| - pending_delta -= ScrollTopControls(delta);
|
| +Viewport::ScrollResult Viewport::ScrollBy(const gfx::Vector2dF& delta,
|
| + const gfx::Point& viewport_point,
|
| + bool is_wheel_scroll,
|
| + bool affect_top_controls) {
|
| + gfx::Vector2dF content_delta = delta;
|
| + ScrollResult result;
|
| +
|
| + if (affect_top_controls && ShouldTopControlsConsumeScroll(delta)) {
|
| + result.top_controls_applied_delta = ScrollTopControls(delta);
|
| + content_delta -= result.top_controls_applied_delta;
|
| + }
|
| +
|
| + gfx::Vector2dF pending_content_delta = content_delta;
|
|
|
| if (OuterScrollLayer()) {
|
| - pending_delta -=
|
| - host_impl_->ScrollLayer(OuterScrollLayer(), pending_delta,
|
| - viewport_point, is_direct_manipulation);
|
| + pending_content_delta -= host_impl_->ScrollLayer(OuterScrollLayer(),
|
| + pending_content_delta,
|
| + viewport_point,
|
| + is_wheel_scroll);
|
| }
|
|
|
| // TODO(bokan): This shouldn't be needed but removing it causes subtle
|
| // viewport movement during top controls manipulation.
|
| - if (gfx::ToRoundedVector2d(pending_delta).IsZero())
|
| - return delta;
|
| -
|
| - pending_delta -=
|
| - host_impl_->ScrollLayer(InnerScrollLayer(), pending_delta, viewport_point,
|
| - is_direct_manipulation);
|
| - pending_delta = AdjustOverscroll(pending_delta);
|
| - return delta - pending_delta;
|
| + if (!gfx::ToRoundedVector2d(pending_content_delta).IsZero()) {
|
| + pending_content_delta -= host_impl_->ScrollLayer(InnerScrollLayer(),
|
| + pending_content_delta,
|
| + viewport_point,
|
| + is_wheel_scroll);
|
| + result.unused_scroll_delta = AdjustOverscroll(pending_content_delta);
|
| + }
|
| +
|
| +
|
| + result.applied_delta = content_delta - pending_content_delta;
|
| + return result;
|
| }
|
|
|
| void Viewport::SnapPinchAnchorIfWithinMargin(const gfx::Point& anchor) {
|
|
|