Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1275)

Unified Diff: third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp

Issue 1926473003: Smooth scroll animation should not override scroll anchoring update (MT) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: disable test for mac Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 de407384f33500b75fe3f8d9dce28786a007b179..61742d3ca0799c6ddf73ccc705a571e98b33a201 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
+++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
@@ -73,6 +73,8 @@ ScrollAnimator::~ScrollAnimator()
FloatPoint ScrollAnimator::desiredTargetPosition() const
{
+ if (m_runState == RunState::WaitingToCancelOnCompositor)
+ return currentPosition();
return (m_animationCurve || m_runState == RunState::WaitingToSendToCompositor)
? m_targetOffset : currentPosition();
}
@@ -148,10 +150,10 @@ bool ScrollAnimator::willAnimateToOffset(const FloatPoint& targetPos)
resetAnimationState();
if (m_runState == RunState::WaitingToCancelOnCompositor) {
- // Ignore user scroll if WaitingToCancelOnCompositor. Can be in this
- // state when holding down an arrow.
- // TODO(ymalik): Handle this case by either updating the target on the
- // current scroll or starting a new animation (see crbug.com/599876).
+ ASSERT(m_animationCurve);
+ m_targetOffset = targetPos;
+ if (registerAndScheduleAnimation())
+ m_runState = RunState::WaitingToCancelOnCompositorButNewScroll;
return true;
}
@@ -271,7 +273,8 @@ void ScrollAnimator::updateCompositorAnimations()
}
if (m_compositorAnimationId && m_runState != RunState::RunningOnCompositor
- && m_runState != RunState::RunningOnCompositorButNeedsUpdate) {
+ && m_runState != RunState::RunningOnCompositorButNeedsUpdate
+ && m_runState != RunState::WaitingToCancelOnCompositorButNewScroll) {
// If the current run state is WaitingToSendToCompositor but we have a
// non-zero compositor animation id, there's a currently running
// compositor animation that needs to be removed here before the new
@@ -296,23 +299,25 @@ void ScrollAnimator::updateCompositorAnimations()
}
}
- if (m_runState == RunState::WaitingToSendToCompositor
- || m_runState == RunState::RunningOnCompositorButNeedsUpdate) {
- if (!m_compositorAnimationAttachedToLayerId)
- reattachCompositorPlayerIfNeeded(getScrollableArea()->compositorAnimationTimeline());
+ if (m_runState == RunState::RunningOnCompositorButNeedsUpdate
+ || m_runState == RunState::WaitingToCancelOnCompositorButNewScroll) {
+ // Abort the running animation before a new one with an updated
+ // target is added.
+ abortAnimation();
- if (m_runState == RunState::RunningOnCompositorButNeedsUpdate) {
- // Abort the running animation before a new one with an updated
- // target is added.
- abortAnimation();
+ m_compositorAnimationId = 0;
+ m_compositorAnimationGroupId = 0;
- m_compositorAnimationId = 0;
- m_compositorAnimationGroupId = 0;
+ m_animationCurve->updateTarget(m_timeFunction() - m_startTime,
+ compositorOffsetFromBlinkOffset(m_targetOffset));
+ if (m_runState == RunState::WaitingToCancelOnCompositorButNewScroll)
+ m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(currentPosition()));
+ m_runState = RunState::WaitingToSendToCompositor;
+ }
- m_animationCurve->updateTarget(m_timeFunction() - m_startTime,
- compositorOffsetFromBlinkOffset(m_targetOffset));
- m_runState = RunState::WaitingToSendToCompositor;
- }
+ if (m_runState == RunState::WaitingToSendToCompositor) {
+ if (!m_compositorAnimationAttachedToLayerId)
+ reattachCompositorPlayerIfNeeded(getScrollableArea()->compositorAnimationTimeline());
if (!m_animationCurve) {
m_animationCurve = adoptPtr(CompositorFactory::current().createScrollOffsetAnimationCurve(

Powered by Google App Engine
This is Rietveld 408576698