| Index: Source/platform/scroll/ScrollableArea.h
|
| diff --git a/Source/platform/scroll/ScrollableArea.h b/Source/platform/scroll/ScrollableArea.h
|
| index f39f2e558a3618bbd454f27526800df6af13a5dc..82a5e2824d5f3684c61724c688b01ed589accbbe 100644
|
| --- a/Source/platform/scroll/ScrollableArea.h
|
| +++ b/Source/platform/scroll/ScrollableArea.h
|
| @@ -39,6 +39,7 @@ class GraphicsContext;
|
| class GraphicsLayer;
|
| class PlatformGestureEvent;
|
| class PlatformWheelEvent;
|
| +class ProgrammaticScrollAnimator;
|
| class ScrollAnimator;
|
|
|
| enum ScrollBehavior {
|
| @@ -58,6 +59,8 @@ public:
|
| void scrollToOffsetWithoutAnimation(const FloatPoint&);
|
| void scrollToOffsetWithoutAnimation(ScrollbarOrientation, float offset);
|
|
|
| + void programmaticallyScrollSmoothlyToOffset(const FloatPoint&);
|
| +
|
| // Should be called when the scroll position changes externally, for example if the scroll layer position
|
| // is updated on the scrolling thread and we need to notify the main thread.
|
| void notifyScrollPositionChanged(const IntPoint&);
|
| @@ -106,6 +109,12 @@ public:
|
| // This getter will return null if the ScrollAnimator hasn't been created yet.
|
| ScrollAnimator* existingScrollAnimator() const { return m_scrollAnimator.get(); }
|
|
|
| + ProgrammaticScrollAnimator* programmaticScrollAnimator() const;
|
| + ProgrammaticScrollAnimator* existingProgrammaticScrollAnimator() const
|
| + {
|
| + return m_programmaticScrollAnimator.get();
|
| + }
|
| +
|
| const IntPoint& scrollOrigin() const { return m_scrollOrigin; }
|
| bool scrollOriginChanged() const { return m_scrollOriginChanged; }
|
|
|
| @@ -177,8 +186,11 @@ public:
|
|
|
| // Let subclasses provide a way of asking for and servicing scroll
|
| // animations.
|
| + virtual bool registerForAnimation() { return false; }
|
| + virtual void deregisterForAnimation() { }
|
| virtual bool scheduleAnimation() { return false; }
|
| - void serviceScrollAnimations();
|
| + virtual void serviceScrollAnimations(double monotonicTime);
|
| +
|
|
|
| virtual bool usesCompositedScrolling() const { return false; }
|
| virtual void updateNeedsCompositedScrolling() { }
|
| @@ -187,6 +199,14 @@ public:
|
| virtual bool userInputScrollable(ScrollbarOrientation) const = 0;
|
| virtual bool shouldPlaceVerticalScrollbarOnLeft() const = 0;
|
|
|
| + // Notifications for compositor-driven animations.
|
| + void notifyAnimationStarted(double monotonicTime);
|
| + void notifyAnimationFinished(double monotonicTime);
|
| +
|
| + void layerForScrollingDidChange();
|
| + void requiresMainThreadScrollingDidChange();
|
| + bool canUseCompositedScrollAnimations() const;
|
| +
|
| // Convenience functions
|
| int scrollPosition(ScrollbarOrientation orientation) { return orientation == HorizontalScrollbar ? scrollPosition().x() : scrollPosition().y(); }
|
| int minimumScrollPosition(ScrollbarOrientation orientation) { return orientation == HorizontalScrollbar ? minimumScrollPosition().x() : minimumScrollPosition().y(); }
|
| @@ -225,6 +245,7 @@ protected:
|
| virtual void invalidateScrollCornerRect(const IntRect&) = 0;
|
|
|
| friend class ScrollingCoordinator;
|
| + friend class ProgrammaticScrollAnimator;
|
| virtual GraphicsLayer* layerForScrolling() const { return 0; }
|
| virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; }
|
| virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; }
|
| @@ -233,6 +254,9 @@ protected:
|
| bool hasLayerForVerticalScrollbar() const;
|
| bool hasLayerForScrollCorner() const;
|
|
|
| + void cancelProgrammaticScrollAnimation();
|
| + virtual bool compositedScrollAnimationsEnabled() const { return false; }
|
| +
|
| // For repaint after layout, stores the damage to be repainted for the
|
| // scrollbars.
|
| unsigned m_hasHorizontalBarDamage : 1;
|
| @@ -247,6 +271,9 @@ private:
|
| friend class ScrollAnimator;
|
| void setScrollOffsetFromAnimation(const IntPoint&);
|
|
|
| + // Only called from ProgrammaticScrollAnimator.
|
| + void setScrollOffsetFromProgrammaticAnimation(const IntPoint&);
|
| +
|
| // This function should be overriden by subclasses to perform the actual
|
| // scroll of the content.
|
| virtual void setScrollOffset(const IntPoint&) = 0;
|
| @@ -257,6 +284,7 @@ private:
|
| virtual float pixelStep(ScrollbarOrientation) const;
|
|
|
| mutable OwnPtr<ScrollAnimator> m_scrollAnimator;
|
| + mutable OwnPtr<ProgrammaticScrollAnimator> m_programmaticScrollAnimator;
|
| unsigned m_constrainsScrollingToContentEdge : 1;
|
|
|
| unsigned m_inLiveResize : 1;
|
|
|