diff options
Diffstat (limited to 'third_party/WebKit/Source/platform/scroll')
4 files changed, 29 insertions, 10 deletions
diff --git a/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp b/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp index 1b38d83..3fa59ee 100644 --- a/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp +++ b/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp @@ -52,7 +52,7 @@ void ProgrammaticScrollAnimator::animateToOffset(FloatPoint offset) m_startTime = 0.0; m_targetOffset = offset; m_animationCurve = adoptPtr(Platform::current()->compositorSupport()->createScrollOffsetAnimationCurve( - m_targetOffset, + compositorOffsetFromBlinkOffset(m_targetOffset), WebCompositorAnimationCurve::TimingFunctionTypeEaseInOut, WebScrollOffsetAnimationCurve::ScrollDurationDeltaBased)); @@ -79,7 +79,7 @@ void ProgrammaticScrollAnimator::tickAnimation(double monotonicTime) m_startTime = monotonicTime; double elapsedTime = monotonicTime - m_startTime; bool isFinished = (elapsedTime > m_animationCurve->duration()); - FloatPoint offset = m_animationCurve->getValue(elapsedTime); + FloatPoint offset = blinkOffsetFromCompositorOffset(m_animationCurve->getValue(elapsedTime)); notifyPositionChanged(IntPoint(offset.x(), offset.y())); if (isFinished) { @@ -128,7 +128,8 @@ void ProgrammaticScrollAnimator::updateCompositorAnimations() if (!sentToCompositor) { m_runState = RunState::RunningOnMainThread; - m_animationCurve->setInitialValue(FloatPoint(m_scrollableArea->scrollPosition())); + m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset( + FloatPoint(m_scrollableArea->scrollPosition()))); if (!m_scrollableArea->scheduleAnimation()) { notifyPositionChanged(IntPoint(m_targetOffset.x(), m_targetOffset.y())); resetAnimationState(); @@ -147,7 +148,8 @@ void ProgrammaticScrollAnimator::layerForCompositedScrollingDidChange(WebComposi m_runState = RunState::RunningOnMainThread; m_compositorAnimationId = 0; m_compositorAnimationGroupId = 0; - m_animationCurve->setInitialValue(FloatPoint(m_scrollableArea->scrollPosition())); + m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset( + FloatPoint(m_scrollableArea->scrollPosition()))); m_scrollableArea->registerForAnimation(); if (!m_scrollableArea->scheduleAnimation()) { resetAnimationState(); diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp index de0000b..7952137 100644 --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp @@ -131,7 +131,8 @@ ScrollResultOneDimensional ScrollAnimator::userScroll( // Running on the main thread, simply update the target offset instead // of sending to the compositor. - m_animationCurve->updateTarget(m_timeFunction() - m_startTime, targetPos); + m_animationCurve->updateTarget(m_timeFunction() - m_startTime, + compositorOffsetFromBlinkOffset(targetPos)); return ScrollResultOneDimensional(/* didScroll */ true, /* unusedScrollDelta */ 0); } @@ -170,8 +171,9 @@ void ScrollAnimator::tickAnimation(double monotonicTime) double elapsedTime = monotonicTime - m_startTime; bool isFinished = (elapsedTime > m_animationCurve->duration()); - FloatPoint offset = isFinished ? m_animationCurve->targetValue() - : m_animationCurve->getValue(elapsedTime); + FloatPoint offset = blinkOffsetFromCompositorOffset(isFinished + ? m_animationCurve->targetValue() + : m_animationCurve->getValue(elapsedTime)); offset = FloatPoint(m_scrollableArea->clampScrollPosition(offset)); @@ -219,19 +221,19 @@ void ScrollAnimator::updateCompositorAnimations() m_compositorAnimationGroupId = 0; m_animationCurve->updateTarget(m_timeFunction() - m_startTime, - m_targetOffset); + compositorOffsetFromBlinkOffset(m_targetOffset)); m_runState = RunState::WaitingToSendToCompositor; } if (!m_animationCurve) { m_animationCurve = adoptPtr(Platform::current()->compositorSupport() ->createScrollOffsetAnimationCurve( - m_targetOffset, + compositorOffsetFromBlinkOffset(m_targetOffset), WebCompositorAnimationCurve::TimingFunctionTypeEaseInOut, m_lastGranularity == ScrollByPixel ? WebScrollOffsetAnimationCurve::ScrollDurationInverseDelta : WebScrollOffsetAnimationCurve::ScrollDurationConstant)); - m_animationCurve->setInitialValue(currentPosition()); + m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(currentPosition())); } bool sentToCompositor = false; diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp index 142b27e..19f77ba 100644 --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp @@ -195,4 +195,16 @@ WebCompositorAnimationPlayer* ScrollAnimatorCompositorCoordinator::compositorPla return m_compositorPlayer.get(); } +FloatPoint ScrollAnimatorCompositorCoordinator::compositorOffsetFromBlinkOffset(FloatPoint offset) +{ + offset.moveBy(scrollableArea()->scrollOrigin()); + return offset; +} + +FloatPoint ScrollAnimatorCompositorCoordinator::blinkOffsetFromCompositorOffset(FloatPoint offset) +{ + offset.moveBy(-scrollableArea()->scrollOrigin()); + return offset; +} + } // namespace blink diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.h b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.h index 2f38927..afc0ef1 100644 --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.h +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.h @@ -46,6 +46,9 @@ protected: void removeAnimation(); void abortAnimation(); + FloatPoint compositorOffsetFromBlinkOffset(FloatPoint); + FloatPoint blinkOffsetFromCompositorOffset(FloatPoint); + void compositorAnimationFinished(int groupId); void reattachCompositorPlayerIfNeeded(WebCompositorAnimationTimeline*); |