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"
16 class CC_EXPORT Keyframe {
19 const TimingFunction* timing_function() const {
20 return timing_function_.get();
24 Keyframe(double time, scoped_ptr<TimingFunction> timing_function);
29 scoped_ptr<TimingFunction> timing_function_;
31 DISALLOW_COPY_AND_ASSIGN(Keyframe);
34 class CC_EXPORT ColorKeyframe : public Keyframe {
36 static scoped_ptr<ColorKeyframe> Create(
39 scoped_ptr<TimingFunction> timing_function);
40 ~ColorKeyframe() override;
42 SkColor Value() const;
44 scoped_ptr<ColorKeyframe> Clone() const;
47 ColorKeyframe(double time,
49 scoped_ptr<TimingFunction> timing_function);
54 class CC_EXPORT FloatKeyframe : public Keyframe {
56 static scoped_ptr<FloatKeyframe> Create(
59 scoped_ptr<TimingFunction> timing_function);
60 ~FloatKeyframe() override;
64 scoped_ptr<FloatKeyframe> Clone() const;
67 FloatKeyframe(double time,
69 scoped_ptr<TimingFunction> timing_function);
74 class CC_EXPORT TransformKeyframe : public Keyframe {
76 static scoped_ptr<TransformKeyframe> Create(
78 const TransformOperations& value,
79 scoped_ptr<TimingFunction> timing_function);
80 ~TransformKeyframe() override;
82 const TransformOperations& Value() const;
84 scoped_ptr<TransformKeyframe> Clone() const;
89 const TransformOperations& value,
90 scoped_ptr<TimingFunction> timing_function);
92 TransformOperations value_;
95 class CC_EXPORT FilterKeyframe : public Keyframe {
97 static scoped_ptr<FilterKeyframe> Create(
99 const FilterOperations& value,
100 scoped_ptr<TimingFunction> timing_function);
101 ~FilterKeyframe() override;
103 const FilterOperations& Value() const;
105 scoped_ptr<FilterKeyframe> Clone() const;
110 const FilterOperations& value,
111 scoped_ptr<TimingFunction> timing_function);
113 FilterOperations value_;
116 class CC_EXPORT KeyframedColorAnimationCurve : public ColorAnimationCurve {
118 // It is required that the keyframes be sorted by time.
119 static scoped_ptr<KeyframedColorAnimationCurve> Create();
121 ~KeyframedColorAnimationCurve() override;
123 void AddKeyframe(scoped_ptr<ColorKeyframe> keyframe);
124 void SetTimingFunction(scoped_ptr<TimingFunction> timing_function) {
125 timing_function_ = timing_function.Pass();
128 // AnimationCurve implementation
129 double Duration() const override;
130 scoped_ptr<AnimationCurve> Clone() const override;
132 // BackgrounColorAnimationCurve implementation
133 SkColor GetValue(double t) const override;
136 KeyframedColorAnimationCurve();
138 // Always sorted in order of increasing time. No two keyframes have the
140 ScopedPtrVector<ColorKeyframe> keyframes_;
141 scoped_ptr<TimingFunction> timing_function_;
143 DISALLOW_COPY_AND_ASSIGN(KeyframedColorAnimationCurve);
146 class CC_EXPORT KeyframedFloatAnimationCurve : public FloatAnimationCurve {
148 // It is required that the keyframes be sorted by time.
149 static scoped_ptr<KeyframedFloatAnimationCurve> Create();
151 ~KeyframedFloatAnimationCurve() override;
153 void AddKeyframe(scoped_ptr<FloatKeyframe> keyframe);
154 void SetTimingFunction(scoped_ptr<TimingFunction> timing_function) {
155 timing_function_ = timing_function.Pass();
158 // AnimationCurve implementation
159 double Duration() const override;
160 scoped_ptr<AnimationCurve> Clone() const override;
162 // FloatAnimationCurve implementation
163 float GetValue(double t) const override;
166 KeyframedFloatAnimationCurve();
168 // Always sorted in order of increasing time. No two keyframes have the
170 ScopedPtrVector<FloatKeyframe> keyframes_;
171 scoped_ptr<TimingFunction> timing_function_;
173 DISALLOW_COPY_AND_ASSIGN(KeyframedFloatAnimationCurve);
176 class CC_EXPORT KeyframedTransformAnimationCurve
177 : public TransformAnimationCurve {
179 // It is required that the keyframes be sorted by time.
180 static scoped_ptr<KeyframedTransformAnimationCurve> Create();
182 ~KeyframedTransformAnimationCurve() override;
184 void AddKeyframe(scoped_ptr<TransformKeyframe> keyframe);
185 void SetTimingFunction(scoped_ptr<TimingFunction> timing_function) {
186 timing_function_ = timing_function.Pass();
189 // AnimationCurve implementation
190 double Duration() const override;
191 scoped_ptr<AnimationCurve> Clone() const override;
193 // TransformAnimationCurve implementation
194 gfx::Transform GetValue(double t) const override;
195 bool AnimatedBoundsForBox(const gfx::BoxF& box,
196 gfx::BoxF* bounds) const override;
197 bool AffectsScale() const override;
198 bool IsTranslation() const override;
199 bool MaximumTargetScale(bool forward_direction,
200 float* max_scale) const override;
203 KeyframedTransformAnimationCurve();
205 // Always sorted in order of increasing time. No two keyframes have the
207 ScopedPtrVector<TransformKeyframe> keyframes_;
208 scoped_ptr<TimingFunction> timing_function_;
210 DISALLOW_COPY_AND_ASSIGN(KeyframedTransformAnimationCurve);
213 class CC_EXPORT KeyframedFilterAnimationCurve
214 : public FilterAnimationCurve {
216 // It is required that the keyframes be sorted by time.
217 static scoped_ptr<KeyframedFilterAnimationCurve> Create();
219 ~KeyframedFilterAnimationCurve() override;
221 void AddKeyframe(scoped_ptr<FilterKeyframe> keyframe);
222 void SetTimingFunction(scoped_ptr<TimingFunction> timing_function) {
223 timing_function_ = timing_function.Pass();
226 // AnimationCurve implementation
227 double Duration() const override;
228 scoped_ptr<AnimationCurve> Clone() const override;
230 // FilterAnimationCurve implementation
231 FilterOperations GetValue(double t) const override;
232 bool HasFilterThatMovesPixels() const override;
235 KeyframedFilterAnimationCurve();
237 // Always sorted in order of increasing time. No two keyframes have the
239 ScopedPtrVector<FilterKeyframe> keyframes_;
240 scoped_ptr<TimingFunction> timing_function_;
242 DISALLOW_COPY_AND_ASSIGN(KeyframedFilterAnimationCurve);
247 #endif // CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_