// 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 CC_SCROLLBAR_ANIMATION_CONTROLLER_H_ #define CC_SCROLLBAR_ANIMATION_CONTROLLER_H_ #include "base/memory/scoped_ptr.h" #include "cc/cc_export.h" #include "ui/gfx/size.h" #include "ui/gfx/vector2d.h" #include "ui/gfx/vector2d_f.h" namespace cc { class LayerImpl; class ScrollbarLayerImpl; // This abstract class represents the compositor-side analogy of ScrollbarAnimator. // Individual platforms should subclass it to provide specialized implementation. class CC_EXPORT ScrollbarAnimationController { public: static scoped_ptr create(LayerImpl* scrollLayer); virtual ~ScrollbarAnimationController(); virtual bool animate(double monotonicTime); void didPinchGestureBegin(); void didPinchGestureUpdate(); void didPinchGestureEnd(); void updateScrollOffset(LayerImpl* scrollLayer); void setHorizontalScrollbarLayer(ScrollbarLayerImpl* layer) { m_horizontalScrollbarLayer = layer; } ScrollbarLayerImpl* horizontalScrollbarLayer() const { return m_horizontalScrollbarLayer; } void setVerticalScrollbarLayer(ScrollbarLayerImpl* layer) { m_verticalScrollbarLayer = layer; } ScrollbarLayerImpl* verticalScrollbarLayer() const { return m_verticalScrollbarLayer; } gfx::Vector2dF currentOffset() const { return m_currentOffset; } gfx::Size totalSize() const { return m_totalSize; } gfx::Vector2d maximum() const { return m_maximum; } virtual void didPinchGestureBeginAtTime(double monotonicTime) { } virtual void didPinchGestureUpdateAtTime(double monotonicTime) { } virtual void didPinchGestureEndAtTime(double monotonicTime) { } virtual void updateScrollOffsetAtTime(LayerImpl* scrollLayer, double monotonicTime); protected: explicit ScrollbarAnimationController(LayerImpl* scrollLayer); private: static gfx::Size getScrollLayerBounds(const LayerImpl*); // Beware of dangling pointer. Always update these during tree synchronization. ScrollbarLayerImpl* m_horizontalScrollbarLayer; ScrollbarLayerImpl* m_verticalScrollbarLayer; gfx::Vector2dF m_currentOffset; gfx::Size m_totalSize; gfx::Vector2d m_maximum; }; } // namespace cc #endif // CC_SCROLLBAR_ANIMATION_CONTROLLER_H_