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