Add default implementations for AppWindowRegistry::Observer notifications.
[chromium-blink-merge.git] / cc / animation / keyframed_animation_curve.h
blobded48c6721ff28e76886295c00b4163421994559
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.
5 #ifndef CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_
6 #define CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_
8 #include "cc/animation/animation_curve.h"
9 #include "cc/animation/timing_function.h"
10 #include "cc/animation/transform_operations.h"
11 #include "cc/base/cc_export.h"
12 #include "cc/base/scoped_ptr_vector.h"
14 namespace cc {
16 class CC_EXPORT Keyframe {
17 public:
18 double Time() const;
19 const TimingFunction* timing_function() const {
20 return timing_function_.get();
23 protected:
24 Keyframe(double time, scoped_ptr<TimingFunction> timing_function);
25 virtual ~Keyframe();
27 private:
28 double time_;
29 scoped_ptr<TimingFunction> timing_function_;
31 DISALLOW_COPY_AND_ASSIGN(Keyframe);
34 class CC_EXPORT ColorKeyframe : public Keyframe {
35 public:
36 static scoped_ptr<ColorKeyframe> Create(
37 double time,
38 SkColor value,
39 scoped_ptr<TimingFunction> timing_function);
40 virtual ~ColorKeyframe();
42 SkColor Value() const;
44 scoped_ptr<ColorKeyframe> Clone() const;
46 private:
47 ColorKeyframe(double time,
48 SkColor value,
49 scoped_ptr<TimingFunction> timing_function);
51 SkColor value_;
54 class CC_EXPORT FloatKeyframe : public Keyframe {
55 public:
56 static scoped_ptr<FloatKeyframe> Create(
57 double time,
58 float value,
59 scoped_ptr<TimingFunction> timing_function);
60 virtual ~FloatKeyframe();
62 float Value() const;
64 scoped_ptr<FloatKeyframe> Clone() const;
66 private:
67 FloatKeyframe(double time,
68 float value,
69 scoped_ptr<TimingFunction> timing_function);
71 float value_;
74 class CC_EXPORT TransformKeyframe : public Keyframe {
75 public:
76 static scoped_ptr<TransformKeyframe> Create(
77 double time,
78 const TransformOperations& value,
79 scoped_ptr<TimingFunction> timing_function);
80 virtual ~TransformKeyframe();
82 const TransformOperations& Value() const;
84 scoped_ptr<TransformKeyframe> Clone() const;
86 private:
87 TransformKeyframe(
88 double time,
89 const TransformOperations& value,
90 scoped_ptr<TimingFunction> timing_function);
92 TransformOperations value_;
95 class CC_EXPORT FilterKeyframe : public Keyframe {
96 public:
97 static scoped_ptr<FilterKeyframe> Create(
98 double time,
99 const FilterOperations& value,
100 scoped_ptr<TimingFunction> timing_function);
101 virtual ~FilterKeyframe();
103 const FilterOperations& Value() const;
105 scoped_ptr<FilterKeyframe> Clone() const;
107 private:
108 FilterKeyframe(
109 double time,
110 const FilterOperations& value,
111 scoped_ptr<TimingFunction> timing_function);
113 FilterOperations value_;
116 class CC_EXPORT KeyframedColorAnimationCurve : public ColorAnimationCurve {
117 public:
118 // It is required that the keyframes be sorted by time.
119 static scoped_ptr<KeyframedColorAnimationCurve> Create();
121 virtual ~KeyframedColorAnimationCurve();
123 void AddKeyframe(scoped_ptr<ColorKeyframe> keyframe);
125 // AnimationCurve implementation
126 virtual double Duration() const OVERRIDE;
127 virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
129 // BackgrounColorAnimationCurve implementation
130 virtual SkColor GetValue(double t) const OVERRIDE;
132 private:
133 KeyframedColorAnimationCurve();
135 // Always sorted in order of increasing time. No two keyframes have the
136 // same time.
137 ScopedPtrVector<ColorKeyframe> keyframes_;
139 DISALLOW_COPY_AND_ASSIGN(KeyframedColorAnimationCurve);
142 class CC_EXPORT KeyframedFloatAnimationCurve : public FloatAnimationCurve {
143 public:
144 // It is required that the keyframes be sorted by time.
145 static scoped_ptr<KeyframedFloatAnimationCurve> Create();
147 virtual ~KeyframedFloatAnimationCurve();
149 void AddKeyframe(scoped_ptr<FloatKeyframe> keyframe);
151 // AnimationCurve implementation
152 virtual double Duration() const OVERRIDE;
153 virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
155 // FloatAnimationCurve implementation
156 virtual float GetValue(double t) const OVERRIDE;
158 private:
159 KeyframedFloatAnimationCurve();
161 // Always sorted in order of increasing time. No two keyframes have the
162 // same time.
163 ScopedPtrVector<FloatKeyframe> keyframes_;
165 DISALLOW_COPY_AND_ASSIGN(KeyframedFloatAnimationCurve);
168 class CC_EXPORT KeyframedTransformAnimationCurve
169 : public TransformAnimationCurve {
170 public:
171 // It is required that the keyframes be sorted by time.
172 static scoped_ptr<KeyframedTransformAnimationCurve> Create();
174 virtual ~KeyframedTransformAnimationCurve();
176 void AddKeyframe(scoped_ptr<TransformKeyframe> keyframe);
178 // AnimationCurve implementation
179 virtual double Duration() const OVERRIDE;
180 virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
182 // TransformAnimationCurve implementation
183 virtual gfx::Transform GetValue(double t) const OVERRIDE;
184 virtual bool AnimatedBoundsForBox(const gfx::BoxF& box,
185 gfx::BoxF* bounds) const OVERRIDE;
186 virtual bool AffectsScale() const OVERRIDE;
187 virtual bool IsTranslation() const OVERRIDE;
188 virtual bool MaximumScale(float* max_scale) const OVERRIDE;
190 private:
191 KeyframedTransformAnimationCurve();
193 // Always sorted in order of increasing time. No two keyframes have the
194 // same time.
195 ScopedPtrVector<TransformKeyframe> keyframes_;
197 DISALLOW_COPY_AND_ASSIGN(KeyframedTransformAnimationCurve);
200 class CC_EXPORT KeyframedFilterAnimationCurve
201 : public FilterAnimationCurve {
202 public:
203 // It is required that the keyframes be sorted by time.
204 static scoped_ptr<KeyframedFilterAnimationCurve> Create();
206 virtual ~KeyframedFilterAnimationCurve();
208 void AddKeyframe(scoped_ptr<FilterKeyframe> keyframe);
210 // AnimationCurve implementation
211 virtual double Duration() const OVERRIDE;
212 virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
214 // FilterAnimationCurve implementation
215 virtual FilterOperations GetValue(double t) const OVERRIDE;
216 virtual bool HasFilterThatMovesPixels() const OVERRIDE;
218 private:
219 KeyframedFilterAnimationCurve();
221 // Always sorted in order of increasing time. No two keyframes have the
222 // same time.
223 ScopedPtrVector<FilterKeyframe> keyframes_;
225 DISALLOW_COPY_AND_ASSIGN(KeyframedFilterAnimationCurve);
228 } // namespace cc
230 #endif // CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_