12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_ANIMATION_TIMING_FUNCTION_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_ANIMATION_TIMING_FUNCTION_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/geometry/cubic_bezier.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// See http://www.w3.org/TR/css3-transitions/. 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass CC_EXPORT TimingFunction { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TimingFunction(); 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual float GetValue(double t) const = 0; 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual float Velocity(double time) const = 0; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The smallest and largest values returned by GetValue for inputs in [0, 1]. 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void Range(float* min, float* max) const = 0; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual scoped_ptr<TimingFunction> Clone() const = 0; 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TimingFunction(); 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_ASSIGN(TimingFunction); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT CubicBezierTimingFunction : public TimingFunction { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<CubicBezierTimingFunction> Create(double x1, double y1, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double x2, double y2); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~CubicBezierTimingFunction(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TimingFunction implementation. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual float GetValue(double time) const OVERRIDE; 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual float Velocity(double time) const OVERRIDE; 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void Range(float* min, float* max) const OVERRIDE; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual scoped_ptr<TimingFunction> Clone() const OVERRIDE; 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CubicBezierTimingFunction(double x1, double y1, double x2, double y2); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::CubicBezier bezier_; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_ASSIGN(CubicBezierTimingFunction); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT EaseTimingFunction { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<TimingFunction> Create(); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(EaseTimingFunction); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT EaseInTimingFunction { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<TimingFunction> Create(); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(EaseInTimingFunction); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT EaseOutTimingFunction { 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<TimingFunction> Create(); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(EaseOutTimingFunction); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT EaseInOutTimingFunction { 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<TimingFunction> Create(); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(EaseInOutTimingFunction); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_ANIMATION_TIMING_FUNCTION_H_ 87