| Index: third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| index a6dc9bffc3c47ebd627718a9fbf18deb93ab410c..c3b47315630a09445668430e1400f374fa7d5225 100644
|
| --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
|
| @@ -59,6 +59,19 @@ ScrollAnimator::~ScrollAnimator()
|
| cancelAnimations();
|
| }
|
|
|
| +FloatPoint ScrollAnimator::desiredTargetPosition() const
|
| +{
|
| + return m_animationCurve ? FloatPoint(m_animationCurve->targetValue()) : currentPosition();
|
| +}
|
| +
|
| +float ScrollAnimator::computeDeltaToConsume(ScrollbarOrientation orientation, float pixelDelta) const
|
| +{
|
| + FloatPoint pos = desiredTargetPosition();
|
| + float currentPos = (orientation == HorizontalScrollbar) ? pos.x() : pos.y();
|
| + float newPos = clampScrollPosition(orientation, currentPos + pixelDelta);
|
| + return (currentPos == newPos) ? 0.0f : (newPos - currentPos);
|
| +}
|
| +
|
| ScrollResultOneDimensional ScrollAnimator::userScroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float delta)
|
| {
|
| if (!m_scrollableArea->scrollAnimatorEnabled())
|
| @@ -69,12 +82,11 @@ ScrollResultOneDimensional ScrollAnimator::userScroll(ScrollbarOrientation orien
|
| if (granularity == ScrollByPrecisePixel)
|
| return ScrollAnimatorBase::userScroll(orientation, granularity, step, delta);
|
|
|
| - float pixelDelta = step * delta;
|
| - FloatPoint desiredDelta = (orientation == VerticalScrollbar ? FloatPoint(0, pixelDelta) : FloatPoint(pixelDelta, 0));
|
| + float usedPixelDelta = computeDeltaToConsume(orientation, step * delta);
|
| + FloatPoint pixelDelta = (orientation == VerticalScrollbar ? FloatPoint(0, usedPixelDelta) : FloatPoint(usedPixelDelta, 0));
|
|
|
| - FloatPoint targetPos = m_animationCurve ? FloatPoint(m_animationCurve->targetValue()) : currentPosition();
|
| - targetPos.moveBy(desiredDelta);
|
| - targetPos = FloatPoint(m_scrollableArea->clampScrollPosition(targetPos));
|
| + FloatPoint targetPos = desiredTargetPosition();
|
| + targetPos.moveBy(pixelDelta);
|
|
|
| if (m_animationCurve) {
|
| if (!(targetPos - m_animationCurve->targetValue()).isZero())
|
| @@ -86,7 +98,7 @@ ScrollResultOneDimensional ScrollAnimator::userScroll(ScrollbarOrientation orien
|
| // Report unused delta only if there is no animation and we are not
|
| // starting one. This ensures we latch for the duration of the
|
| // animation rather than animating multiple scrollers at the same time.
|
| - return ScrollResultOneDimensional(/* didScroll */ false, pixelDelta);
|
| + return ScrollResultOneDimensional(/* didScroll */ false, delta);
|
| }
|
|
|
| m_animationCurve = adoptPtr(Platform::current()->compositorSupport()->createScrollOffsetAnimationCurve(
|
|
|