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