Index: Source/platform/scroll/ScrollableArea.cpp |
diff --git a/Source/platform/scroll/ScrollableArea.cpp b/Source/platform/scroll/ScrollableArea.cpp |
index 060567b1b789b7362d8b5ac03b3071669edce61a..e19981913fb905222548ca6abfdba67f50c58e07 100644 |
--- a/Source/platform/scroll/ScrollableArea.cpp |
+++ b/Source/platform/scroll/ScrollableArea.cpp |
@@ -159,9 +159,10 @@ bool ScrollableArea::scroll(ScrollDirection direction, ScrollGranularity granula |
return scrollAnimator()->scroll(orientation, granularity, step, delta); |
} |
-void ScrollableArea::scrollToOffsetWithoutAnimation(const FloatPoint& offset) |
+void ScrollableArea::scrollToOffsetWithoutAnimation(const FloatPoint& offset, bool cancelProgrammaticAnimations) |
{ |
- cancelProgrammaticScrollAnimation(); |
+ if (cancelProgrammaticAnimations) |
+ cancelProgrammaticScrollAnimation(); |
scrollAnimator()->scrollToOffsetWithoutAnimation(offset); |
} |
@@ -430,21 +431,33 @@ bool ScrollableArea::scheduleAnimation() |
void ScrollableArea::serviceScrollAnimations(double monotonicTime) |
{ |
- bool hasRunningAnimation = false; |
+ bool requiresAnimationService = false; |
if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) { |
scrollAnimator->serviceScrollAnimations(); |
if (scrollAnimator->hasRunningAnimation()) |
- hasRunningAnimation = true; |
+ requiresAnimationService = true; |
} |
if (ProgrammaticScrollAnimator* programmaticScrollAnimator = existingProgrammaticScrollAnimator()) { |
programmaticScrollAnimator->tickAnimation(monotonicTime); |
- if (programmaticScrollAnimator->hasRunningAnimation()) |
- hasRunningAnimation = true; |
+ if (programmaticScrollAnimator->hasAnimationThatRequiresService()) |
+ requiresAnimationService = true; |
} |
- if (!hasRunningAnimation) |
+ if (!requiresAnimationService) |
deregisterForAnimation(); |
} |
+void ScrollableArea::updateCompositorScrollAnimations() |
+{ |
+ if (ProgrammaticScrollAnimator* programmaticScrollAnimator = existingProgrammaticScrollAnimator()) |
+ programmaticScrollAnimator->updateCompositorAnimations(); |
+} |
+ |
+void ScrollableArea::notifyCompositorAnimationFinished(int groupId) |
+{ |
+ if (ProgrammaticScrollAnimator* programmaticScrollAnimator = existingProgrammaticScrollAnimator()) |
+ programmaticScrollAnimator->notifyCompositorAnimationFinished(groupId); |
+} |
+ |
void ScrollableArea::cancelProgrammaticScrollAnimation() |
{ |
if (ProgrammaticScrollAnimator* programmaticScrollAnimator = existingProgrammaticScrollAnimator()) |