| // 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_ANIMATION_ANIMATION_CURVE_H_ |
| #define CC_ANIMATION_ANIMATION_CURVE_H_ |
| |
| #include <memory> |
| |
| #include "base/time/time.h" |
| #include "cc/animation/animation_export.h" |
| #include "cc/paint/filter_operations.h" |
| #include "ui/gfx/geometry/size_f.h" |
| #include "ui/gfx/transform.h" |
| |
| namespace cc { |
| |
| class ColorAnimationCurve; |
| class FilterAnimationCurve; |
| class FloatAnimationCurve; |
| class ScrollOffsetAnimationCurve; |
| class SizeAnimationCurve; |
| class TransformAnimationCurve; |
| class TransformOperations; |
| |
| // An animation curve is a function that returns a value given a time. |
| class CC_ANIMATION_EXPORT AnimationCurve { |
| public: |
| enum CurveType { |
| COLOR = 0, |
| FLOAT, |
| TRANSFORM, |
| FILTER, |
| SCROLL_OFFSET, |
| SIZE, |
| // This must be last |
| LAST_CURVE_TYPE = SIZE, |
| }; |
| |
| virtual ~AnimationCurve() {} |
| |
| virtual base::TimeDelta Duration() const = 0; |
| virtual CurveType Type() const = 0; |
| virtual std::unique_ptr<AnimationCurve> Clone() const = 0; |
| |
| const ColorAnimationCurve* ToColorAnimationCurve() const; |
| const FloatAnimationCurve* ToFloatAnimationCurve() const; |
| const TransformAnimationCurve* ToTransformAnimationCurve() const; |
| const FilterAnimationCurve* ToFilterAnimationCurve() const; |
| const ScrollOffsetAnimationCurve* ToScrollOffsetAnimationCurve() const; |
| const SizeAnimationCurve* ToSizeAnimationCurve() const; |
| |
| ScrollOffsetAnimationCurve* ToScrollOffsetAnimationCurve(); |
| }; |
| |
| class CC_ANIMATION_EXPORT ColorAnimationCurve : public AnimationCurve { |
| public: |
| ~ColorAnimationCurve() override {} |
| |
| virtual SkColor GetValue(base::TimeDelta t) const = 0; |
| |
| CurveType Type() const override; |
| }; |
| |
| class CC_ANIMATION_EXPORT FloatAnimationCurve : public AnimationCurve { |
| public: |
| ~FloatAnimationCurve() override {} |
| |
| virtual float GetValue(base::TimeDelta t) const = 0; |
| |
| CurveType Type() const override; |
| }; |
| |
| class CC_ANIMATION_EXPORT TransformAnimationCurve : public AnimationCurve { |
| public: |
| ~TransformAnimationCurve() override {} |
| |
| virtual TransformOperations GetValue(base::TimeDelta t) const = 0; |
| |
| // Returns true if this animation is a translation. |
| virtual bool IsTranslation() const = 0; |
| |
| // Returns true if this animation preserves axis alignment. |
| virtual bool PreservesAxisAlignment() const = 0; |
| |
| // Animation start scale |
| virtual bool AnimationStartScale(bool forward_direction, |
| float* start_scale) const = 0; |
| |
| // Set |max_scale| to the maximum scale along any dimension at the end of |
| // intermediate animation target points (eg keyframe end points). When |
| // |forward_direction| is true, the animation curve assumes it plays from |
| // the first keyframe to the last, otherwise it assumes the opposite. Returns |
| // false if the maximum scale cannot be computed. |
| virtual bool MaximumTargetScale(bool forward_direction, |
| float* max_scale) const = 0; |
| |
| CurveType Type() const override; |
| }; |
| |
| class CC_ANIMATION_EXPORT FilterAnimationCurve : public AnimationCurve { |
| public: |
| ~FilterAnimationCurve() override {} |
| |
| virtual FilterOperations GetValue(base::TimeDelta t) const = 0; |
| virtual bool HasFilterThatMovesPixels() const = 0; |
| |
| CurveType Type() const override; |
| }; |
| |
| class CC_ANIMATION_EXPORT SizeAnimationCurve : public AnimationCurve { |
| public: |
| ~SizeAnimationCurve() override {} |
| |
| virtual gfx::SizeF GetValue(base::TimeDelta t) const = 0; |
| |
| CurveType Type() const override; |
| }; |
| |
| } // namespace cc |
| |
| #endif // CC_ANIMATION_ANIMATION_CURVE_H_ |