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

Side by Side Diff: third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp

Issue 1776503002: Account for scroll origin in scroll animators. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: super-nit Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/scroll/ProgrammaticScrollAnimator.h" 5 #include "platform/scroll/ProgrammaticScrollAnimator.h"
6 6
7 #include "platform/animation/CompositorAnimation.h" 7 #include "platform/animation/CompositorAnimation.h"
8 #include "platform/animation/CompositorScrollOffsetAnimationCurve.h" 8 #include "platform/animation/CompositorScrollOffsetAnimationCurve.h"
9 #include "platform/geometry/IntPoint.h" 9 #include "platform/geometry/IntPoint.h"
10 #include "platform/graphics/CompositorFactory.h" 10 #include "platform/graphics/CompositorFactory.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 } 49 }
50 50
51 void ProgrammaticScrollAnimator::animateToOffset(FloatPoint offset) 51 void ProgrammaticScrollAnimator::animateToOffset(FloatPoint offset)
52 { 52 {
53 if (m_runState == RunState::PostAnimationCleanup) 53 if (m_runState == RunState::PostAnimationCleanup)
54 resetAnimationState(); 54 resetAnimationState();
55 55
56 m_startTime = 0.0; 56 m_startTime = 0.0;
57 m_targetOffset = offset; 57 m_targetOffset = offset;
58 m_animationCurve = adoptPtr(CompositorFactory::current().createScrollOffsetA nimationCurve( 58 m_animationCurve = adoptPtr(CompositorFactory::current().createScrollOffsetA nimationCurve(
59 m_targetOffset, 59 compositorOffsetFromBlinkOffset(m_targetOffset),
60 CompositorAnimationCurve::TimingFunctionTypeEaseInOut, 60 CompositorAnimationCurve::TimingFunctionTypeEaseInOut,
61 CompositorScrollOffsetAnimationCurve::ScrollDurationDeltaBased)); 61 CompositorScrollOffsetAnimationCurve::ScrollDurationDeltaBased));
62 62
63 m_scrollableArea->registerForAnimation(); 63 m_scrollableArea->registerForAnimation();
64 if (!m_scrollableArea->scheduleAnimation()) { 64 if (!m_scrollableArea->scheduleAnimation()) {
65 resetAnimationState(); 65 resetAnimationState();
66 notifyPositionChanged(IntPoint(offset.x(), offset.y())); 66 notifyPositionChanged(IntPoint(offset.x(), offset.y()));
67 } 67 }
68 m_runState = RunState::WaitingToSendToCompositor; 68 m_runState = RunState::WaitingToSendToCompositor;
69 } 69 }
70 70
71 void ProgrammaticScrollAnimator::cancelAnimation() 71 void ProgrammaticScrollAnimator::cancelAnimation()
72 { 72 {
73 ASSERT(m_runState != RunState::RunningOnCompositorButNeedsUpdate); 73 ASSERT(m_runState != RunState::RunningOnCompositorButNeedsUpdate);
74 ScrollAnimatorCompositorCoordinator::cancelAnimation(); 74 ScrollAnimatorCompositorCoordinator::cancelAnimation();
75 } 75 }
76 76
77 void ProgrammaticScrollAnimator::tickAnimation(double monotonicTime) 77 void ProgrammaticScrollAnimator::tickAnimation(double monotonicTime)
78 { 78 {
79 if (m_runState != RunState::RunningOnMainThread) 79 if (m_runState != RunState::RunningOnMainThread)
80 return; 80 return;
81 81
82 if (!m_startTime) 82 if (!m_startTime)
83 m_startTime = monotonicTime; 83 m_startTime = monotonicTime;
84 double elapsedTime = monotonicTime - m_startTime; 84 double elapsedTime = monotonicTime - m_startTime;
85 bool isFinished = (elapsedTime > m_animationCurve->duration()); 85 bool isFinished = (elapsedTime > m_animationCurve->duration());
86 FloatPoint offset = m_animationCurve->getValue(elapsedTime); 86 FloatPoint offset = blinkOffsetFromCompositorOffset(m_animationCurve->getVal ue(elapsedTime));
87 notifyPositionChanged(IntPoint(offset.x(), offset.y())); 87 notifyPositionChanged(IntPoint(offset.x(), offset.y()));
88 88
89 if (isFinished) { 89 if (isFinished) {
90 m_runState = RunState::PostAnimationCleanup; 90 m_runState = RunState::PostAnimationCleanup;
91 } else if (!m_scrollableArea->scheduleAnimation()) { 91 } else if (!m_scrollableArea->scheduleAnimation()) {
92 notifyPositionChanged(IntPoint(m_targetOffset.x(), m_targetOffset.y())); 92 notifyPositionChanged(IntPoint(m_targetOffset.x(), m_targetOffset.y()));
93 resetAnimationState(); 93 resetAnimationState();
94 } 94 }
95 } 95 }
96 96
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 if (addAnimation(animation.release())) { 132 if (addAnimation(animation.release())) {
133 sentToCompositor = true; 133 sentToCompositor = true;
134 m_runState = RunState::RunningOnCompositor; 134 m_runState = RunState::RunningOnCompositor;
135 m_compositorAnimationId = animationId; 135 m_compositorAnimationId = animationId;
136 m_compositorAnimationGroupId = animationGroupId; 136 m_compositorAnimationGroupId = animationGroupId;
137 } 137 }
138 } 138 }
139 139
140 if (!sentToCompositor) { 140 if (!sentToCompositor) {
141 m_runState = RunState::RunningOnMainThread; 141 m_runState = RunState::RunningOnMainThread;
142 m_animationCurve->setInitialValue(FloatPoint(m_scrollableArea->scrol lPosition())); 142 m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(
143 FloatPoint(m_scrollableArea->scrollPosition())));
143 if (!m_scrollableArea->scheduleAnimation()) { 144 if (!m_scrollableArea->scheduleAnimation()) {
144 notifyPositionChanged(IntPoint(m_targetOffset.x(), m_targetOffse t.y())); 145 notifyPositionChanged(IntPoint(m_targetOffset.x(), m_targetOffse t.y()));
145 resetAnimationState(); 146 resetAnimationState();
146 } 147 }
147 } 148 }
148 } 149 }
149 } 150 }
150 151
151 void ProgrammaticScrollAnimator::layerForCompositedScrollingDidChange(Compositor AnimationTimeline* timeline) 152 void ProgrammaticScrollAnimator::layerForCompositedScrollingDidChange(Compositor AnimationTimeline* timeline)
152 { 153 {
153 reattachCompositorPlayerIfNeeded(timeline); 154 reattachCompositorPlayerIfNeeded(timeline);
154 155
155 // If the composited scrolling layer is lost during a composited animation, 156 // If the composited scrolling layer is lost during a composited animation,
156 // continue the animation on the main thread. 157 // continue the animation on the main thread.
157 if (m_runState == RunState::RunningOnCompositor && !m_scrollableArea->layerF orScrolling()) { 158 if (m_runState == RunState::RunningOnCompositor && !m_scrollableArea->layerF orScrolling()) {
158 m_runState = RunState::RunningOnMainThread; 159 m_runState = RunState::RunningOnMainThread;
159 m_compositorAnimationId = 0; 160 m_compositorAnimationId = 0;
160 m_compositorAnimationGroupId = 0; 161 m_compositorAnimationGroupId = 0;
161 m_animationCurve->setInitialValue(FloatPoint(m_scrollableArea->scrollPos ition())); 162 m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(
163 FloatPoint(m_scrollableArea->scrollPosition())));
162 m_scrollableArea->registerForAnimation(); 164 m_scrollableArea->registerForAnimation();
163 if (!m_scrollableArea->scheduleAnimation()) { 165 if (!m_scrollableArea->scheduleAnimation()) {
164 resetAnimationState(); 166 resetAnimationState();
165 notifyPositionChanged(IntPoint(m_targetOffset.x(), m_targetOffset.y( ))); 167 notifyPositionChanged(IntPoint(m_targetOffset.x(), m_targetOffset.y( )));
166 } 168 }
167 } 169 }
168 } 170 }
169 171
170 void ProgrammaticScrollAnimator::notifyCompositorAnimationFinished(int groupId) 172 void ProgrammaticScrollAnimator::notifyCompositorAnimationFinished(int groupId)
171 { 173 {
172 ASSERT(m_runState != RunState::RunningOnCompositorButNeedsUpdate); 174 ASSERT(m_runState != RunState::RunningOnCompositorButNeedsUpdate);
173 ScrollAnimatorCompositorCoordinator::compositorAnimationFinished(groupId); 175 ScrollAnimatorCompositorCoordinator::compositorAnimationFinished(groupId);
174 } 176 }
175 177
176 DEFINE_TRACE(ProgrammaticScrollAnimator) 178 DEFINE_TRACE(ProgrammaticScrollAnimator)
177 { 179 {
178 visitor->trace(m_scrollableArea); 180 visitor->trace(m_scrollableArea);
179 ScrollAnimatorCompositorCoordinator::trace(visitor); 181 ScrollAnimatorCompositorCoordinator::trace(visitor);
180 } 182 }
181 183
182 } // namespace blink 184 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698