// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CCScrollbarAnimationController_h #define CCScrollbarAnimationController_h #include "FloatPoint.h" #include "IntSize.h" #include namespace cc { class CCLayerImpl; class CCScrollbarLayerImpl; // This abstract class represents the compositor-side analogy of ScrollbarAnimator. // Individual platforms should subclass it to provide specialized implementation. class CCScrollbarAnimationController { public: // Implemented by subclass. static PassOwnPtr create(CCLayerImpl* scrollLayer); virtual ~CCScrollbarAnimationController(); virtual bool animate(double monotonicTime); void didPinchGestureBegin(); void didPinchGestureUpdate(); void didPinchGestureEnd(); void updateScrollOffset(CCLayerImpl* scrollLayer); void setHorizontalScrollbarLayer(CCScrollbarLayerImpl* layer) { m_horizontalScrollbarLayer = layer; } CCScrollbarLayerImpl* horizontalScrollbarLayer() const { return m_horizontalScrollbarLayer; } void setVerticalScrollbarLayer(CCScrollbarLayerImpl* layer) { m_verticalScrollbarLayer = layer; } CCScrollbarLayerImpl* verticalScrollbarLayer() const { return m_verticalScrollbarLayer; } FloatPoint currentPos() const { return m_currentPos; } IntSize totalSize() const { return m_totalSize; } IntSize maximum() const { return m_maximum; } virtual void didPinchGestureBeginAtTime(double monotonicTime) { } virtual void didPinchGestureUpdateAtTime(double monotonicTime) { } virtual void didPinchGestureEndAtTime(double monotonicTime) { } virtual void updateScrollOffsetAtTime(CCLayerImpl* scrollLayer, double monotonicTime); protected: explicit CCScrollbarAnimationController(CCLayerImpl* scrollLayer); private: static IntSize getScrollLayerBounds(const CCLayerImpl*); // Beware of dangling pointer. Always update these during tree synchronization. CCScrollbarLayerImpl* m_horizontalScrollbarLayer; CCScrollbarLayerImpl* m_verticalScrollbarLayer; FloatPoint m_currentPos; IntSize m_totalSize; IntSize m_maximum; }; } // namespace cc #endif // CCScrollbarAnimationController_h