Index: third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp |
diff --git a/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp b/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp |
index b717e08a653fad1d135766e18a01070cddfca373..2888d49d43eadcde89434bb9ee7ce11a9907bfaa 100644 |
--- a/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp |
+++ b/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp |
@@ -10,6 +10,7 @@ |
#include "platform/geometry/IntSize.h" |
#include "platform/graphics/GraphicsLayer.h" |
#include "platform/scroll/ScrollableArea.h" |
+#include "platform/scroll/SmoothScrollSequencer.h" |
#include "platform/wtf/PtrUtil.h" |
#include "public/platform/Platform.h" |
#include "public/platform/WebCompositorSupport.h" |
@@ -30,7 +31,7 @@ void ProgrammaticScrollAnimator::ResetAnimationState() { |
void ProgrammaticScrollAnimator::NotifyOffsetChanged( |
const ScrollOffset& offset) { |
- ScrollOffsetChanged(offset, kProgrammaticScroll); |
+ ScrollOffsetChanged(offset, kSequencedSmoothScroll); |
bokan
2017/06/06 21:34:18
It doesn't matter today since ScrollOffsetChanged
sunyunjia
2017/06/07 16:19:32
Done.
|
} |
void ProgrammaticScrollAnimator::ScrollToOffsetWithoutAnimation( |
@@ -39,12 +40,15 @@ void ProgrammaticScrollAnimator::ScrollToOffsetWithoutAnimation( |
NotifyOffsetChanged(offset); |
} |
-void ProgrammaticScrollAnimator::AnimateToOffset(const ScrollOffset& offset) { |
+void ProgrammaticScrollAnimator::AnimateToOffset( |
+ const ScrollOffset& offset, |
+ bool sequenced_for_smooth_scroll) { |
if (run_state_ == RunState::kPostAnimationCleanup) |
ResetAnimationState(); |
start_time_ = 0.0; |
target_offset_ = offset; |
+ sequenced_for_smooth_scroll_ = sequenced_for_smooth_scroll; |
animation_curve_ = CompositorScrollOffsetAnimationCurve::Create( |
CompositorOffsetFromBlinkOffset(target_offset_), |
CompositorScrollOffsetAnimationCurve::kScrollDurationDeltaBased); |
@@ -76,6 +80,7 @@ void ProgrammaticScrollAnimator::TickAnimation(double monotonic_time) { |
if (is_finished) { |
run_state_ = RunState::kPostAnimationCleanup; |
+ AnimationFinished(); |
} else if (!scrollable_area_->ScheduleAnimation()) { |
NotifyOffsetChanged(offset); |
ResetAnimationState(); |
@@ -169,6 +174,16 @@ void ProgrammaticScrollAnimator::NotifyCompositorAnimationFinished( |
int group_id) { |
DCHECK_NE(run_state_, RunState::kRunningOnCompositorButNeedsUpdate); |
ScrollAnimatorCompositorCoordinator::CompositorAnimationFinished(group_id); |
+ AnimationFinished(); |
+} |
+ |
+void ProgrammaticScrollAnimator::AnimationFinished() { |
+ if (sequenced_for_smooth_scroll_) { |
+ sequenced_for_smooth_scroll_ = false; |
+ if (SmoothScrollSequencer* sequencer = |
+ GetScrollableArea()->GetSmoothScrollSequencer()) |
+ sequencer->RunQueuedAnimations(); |
+ } |
} |
DEFINE_TRACE(ProgrammaticScrollAnimator) { |