1 // Copyright 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_ANIMATION_ANIMATION_CURVE_H_ 6 #define CC_ANIMATION_ANIMATION_CURVE_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "cc/base/cc_export.h" 10 #include "cc/output/filter_operations.h" 11 #include "ui/gfx/transform.h" 12 13 namespace gfx { 14 class BoxF; 15 } 16 17 namespace cc { 18 19 class ColorAnimationCurve; 20 class FilterAnimationCurve; 21 class FloatAnimationCurve; 22 class ScrollOffsetAnimationCurve; 23 class TransformAnimationCurve; 24 class TransformOperations; 25 26 // An animation curve is a function that returns a value given a time. 27 class CC_EXPORT AnimationCurve { 28 public: 29 enum CurveType { Color, Float, Transform, Filter, ScrollOffset }; 30 31 virtual ~AnimationCurve() {} 32 33 virtual double Duration() const = 0; 34 virtual CurveType Type() const = 0; 35 virtual scoped_ptr<AnimationCurve> Clone() const = 0; 36 37 const ColorAnimationCurve* ToColorAnimationCurve() const; 38 const FloatAnimationCurve* ToFloatAnimationCurve() const; 39 const TransformAnimationCurve* ToTransformAnimationCurve() const; 40 const FilterAnimationCurve* ToFilterAnimationCurve() const; 41 const ScrollOffsetAnimationCurve* ToScrollOffsetAnimationCurve() const; 42 43 ScrollOffsetAnimationCurve* ToScrollOffsetAnimationCurve(); 44 }; 45 46 class CC_EXPORT ColorAnimationCurve : public AnimationCurve { 47 public: 48 virtual ~ColorAnimationCurve() {} 49 50 virtual SkColor GetValue(double t) const = 0; 51 52 // Partial Animation implementation. 53 virtual CurveType Type() const OVERRIDE; 54 }; 55 56 class CC_EXPORT FloatAnimationCurve : public AnimationCurve { 57 public: 58 virtual ~FloatAnimationCurve() {} 59 60 virtual float GetValue(double t) const = 0; 61 62 // Partial Animation implementation. 63 virtual CurveType Type() const OVERRIDE; 64 }; 65 66 class CC_EXPORT TransformAnimationCurve : public AnimationCurve { 67 public: 68 virtual ~TransformAnimationCurve() {} 69 70 virtual gfx::Transform GetValue(double t) const = 0; 71 72 // Sets |bounds| to be the bounding box for the region within which |box| 73 // will move during this animation. If this region cannot be computed, 74 // returns false. 75 virtual bool AnimatedBoundsForBox(const gfx::BoxF& box, 76 gfx::BoxF* bounds) const = 0; 77 78 // Partial Animation implementation. 79 virtual CurveType Type() const OVERRIDE; 80 }; 81 82 class CC_EXPORT FilterAnimationCurve : public AnimationCurve { 83 public: 84 virtual ~FilterAnimationCurve() {} 85 86 virtual FilterOperations GetValue(double t) const = 0; 87 88 // Partial Animation implementation. 89 virtual CurveType Type() const OVERRIDE; 90 }; 91 92 } // namespace cc 93 94 #endif // CC_ANIMATION_ANIMATION_CURVE_H_ 95