// 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 "base/memory/scoped_ptr.h" #include "cc/base/cc_export.h" #include "cc/output/filter_operations.h" #include "ui/gfx/transform.h" namespace gfx { class BoxF; } namespace cc { class ColorAnimationCurve; class FilterAnimationCurve; class FloatAnimationCurve; class ScrollOffsetAnimationCurve; class TransformAnimationCurve; class TransformOperations; // An animation curve is a function that returns a value given a time. class CC_EXPORT AnimationCurve { public: enum CurveType { Color, Float, Transform, Filter, ScrollOffset }; virtual ~AnimationCurve() {} virtual double Duration() const = 0; virtual CurveType Type() const = 0; virtual scoped_ptr Clone() const = 0; const ColorAnimationCurve* ToColorAnimationCurve() const; const FloatAnimationCurve* ToFloatAnimationCurve() const; const TransformAnimationCurve* ToTransformAnimationCurve() const; const FilterAnimationCurve* ToFilterAnimationCurve() const; const ScrollOffsetAnimationCurve* ToScrollOffsetAnimationCurve() const; ScrollOffsetAnimationCurve* ToScrollOffsetAnimationCurve(); }; class CC_EXPORT ColorAnimationCurve : public AnimationCurve { public: virtual ~ColorAnimationCurve() {} virtual SkColor GetValue(double t) const = 0; // Partial Animation implementation. virtual CurveType Type() const OVERRIDE; }; class CC_EXPORT FloatAnimationCurve : public AnimationCurve { public: virtual ~FloatAnimationCurve() {} virtual float GetValue(double t) const = 0; // Partial Animation implementation. virtual CurveType Type() const OVERRIDE; }; class CC_EXPORT TransformAnimationCurve : public AnimationCurve { public: virtual ~TransformAnimationCurve() {} virtual gfx::Transform GetValue(double t) const = 0; // Sets |bounds| to be the bounding box for the region within which |box| // will move during this animation. If this region cannot be computed, // returns false. virtual bool AnimatedBoundsForBox(const gfx::BoxF& box, gfx::BoxF* bounds) const = 0; // Returns true if this animation affects scale. virtual bool AffectsScale() const = 0; // Returns true if this animation is a translation. virtual bool IsTranslation() const = 0; // Set |max_scale| to the maximum scale along any dimension during this // animation. Returns false if the maximum scale cannot be computed. virtual bool MaximumScale(float* max_scale) const = 0; // Partial Animation implementation. virtual CurveType Type() const OVERRIDE; }; class CC_EXPORT FilterAnimationCurve : public AnimationCurve { public: virtual ~FilterAnimationCurve() {} virtual FilterOperations GetValue(double t) const = 0; virtual bool HasFilterThatMovesPixels() const = 0; // Partial Animation implementation. virtual CurveType Type() const OVERRIDE; }; } // namespace cc #endif // CC_ANIMATION_ANIMATION_CURVE_H_