Home | History | Annotate | Download | only in animation
      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_TIMING_FUNCTION_H_
      6 #define CC_ANIMATION_TIMING_FUNCTION_H_
      7 
      8 #include "cc/animation/animation_curve.h"
      9 #include "cc/base/cc_export.h"
     10 #include "ui/gfx/geometry/cubic_bezier.h"
     11 
     12 namespace cc {
     13 
     14 // See http://www.w3.org/TR/css3-transitions/.
     15 class CC_EXPORT TimingFunction : public FloatAnimationCurve {
     16  public:
     17   virtual ~TimingFunction();
     18 
     19   // Partial implementation of FloatAnimationCurve.
     20   virtual double Duration() const OVERRIDE;
     21 
     22   // The smallest and largest values returned by GetValue for inputs in
     23   // [0, 1].
     24   virtual void Range(float* min, float* max) const = 0;
     25 
     26  protected:
     27   TimingFunction();
     28 
     29  private:
     30   DISALLOW_ASSIGN(TimingFunction);
     31 };
     32 
     33 class CC_EXPORT CubicBezierTimingFunction : public TimingFunction {
     34  public:
     35   static scoped_ptr<CubicBezierTimingFunction> Create(double x1, double y1,
     36                                                       double x2, double y2);
     37   virtual ~CubicBezierTimingFunction();
     38 
     39   // Partial implementation of FloatAnimationCurve.
     40   virtual float GetValue(double time) const OVERRIDE;
     41   virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
     42 
     43   virtual void Range(float* min, float* max) const OVERRIDE;
     44 
     45  protected:
     46   CubicBezierTimingFunction(double x1, double y1, double x2, double y2);
     47 
     48   gfx::CubicBezier bezier_;
     49 
     50  private:
     51   DISALLOW_ASSIGN(CubicBezierTimingFunction);
     52 };
     53 
     54 class CC_EXPORT EaseTimingFunction {
     55  public:
     56   static scoped_ptr<TimingFunction> Create();
     57 
     58  private:
     59   DISALLOW_IMPLICIT_CONSTRUCTORS(EaseTimingFunction);
     60 };
     61 
     62 class CC_EXPORT EaseInTimingFunction {
     63  public:
     64   static scoped_ptr<TimingFunction> Create();
     65 
     66  private:
     67   DISALLOW_IMPLICIT_CONSTRUCTORS(EaseInTimingFunction);
     68 };
     69 
     70 class CC_EXPORT EaseOutTimingFunction {
     71  public:
     72   static scoped_ptr<TimingFunction> Create();
     73 
     74  private:
     75   DISALLOW_IMPLICIT_CONSTRUCTORS(EaseOutTimingFunction);
     76 };
     77 
     78 class CC_EXPORT EaseInOutTimingFunction {
     79  public:
     80   static scoped_ptr<TimingFunction> Create();
     81 
     82  private:
     83   DISALLOW_IMPLICIT_CONSTRUCTORS(EaseInOutTimingFunction);
     84 };
     85 
     86 }  // namespace cc
     87 
     88 #endif  // CC_ANIMATION_TIMING_FUNCTION_H_
     89