• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
~AnimationCurve()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:
~ColorAnimationCurve()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:
~FloatAnimationCurve()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:
~TransformAnimationCurve()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   // Returns true if this animation affects scale.
79   virtual bool AffectsScale() const = 0;
80 
81   // Returns true if this animation is a translation.
82   virtual bool IsTranslation() const = 0;
83 
84   // Set |max_scale| to the maximum scale along any dimension at the end of
85   // intermediate animation target points (eg keyframe end points). When
86   // |forward_direction| is true, the animation curve assumes it plays from
87   // the first keyframe to the last, otherwise it assumes the opposite. Returns
88   // false if the maximum scale cannot be computed.
89   virtual bool MaximumTargetScale(bool forward_direction,
90                                   float* max_scale) const = 0;
91 
92   // Partial Animation implementation.
93   virtual CurveType Type() const OVERRIDE;
94 };
95 
96 class CC_EXPORT FilterAnimationCurve : public AnimationCurve {
97  public:
~FilterAnimationCurve()98   virtual ~FilterAnimationCurve() {}
99 
100   virtual FilterOperations GetValue(double t) const = 0;
101   virtual bool HasFilterThatMovesPixels() const = 0;
102 
103   // Partial Animation implementation.
104   virtual CurveType Type() const OVERRIDE;
105 };
106 
107 }  // namespace cc
108 
109 #endif  // CC_ANIMATION_ANIMATION_CURVE_H_
110