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.
7 #include "CCTimingFunction.h"
9 #include <wtf/OwnPtr.h>
12 const double epsilon
= 1e-6;
17 CCTimingFunction::CCTimingFunction()
21 CCTimingFunction::~CCTimingFunction()
25 double CCTimingFunction::duration() const
30 PassOwnPtr
<CCCubicBezierTimingFunction
> CCCubicBezierTimingFunction::create(double x1
, double y1
, double x2
, double y2
)
32 return adoptPtr(new CCCubicBezierTimingFunction(x1
, y1
, x2
, y2
));
35 CCCubicBezierTimingFunction::CCCubicBezierTimingFunction(double x1
, double y1
, double x2
, double y2
)
36 : m_curve(x1
, y1
, x2
, y2
)
40 CCCubicBezierTimingFunction::~CCCubicBezierTimingFunction()
44 float CCCubicBezierTimingFunction::getValue(double x
) const
46 UnitBezier
temp(m_curve
);
47 return static_cast<float>(temp
.solve(x
, epsilon
));
50 PassOwnPtr
<CCAnimationCurve
> CCCubicBezierTimingFunction::clone() const
52 return adoptPtr(new CCCubicBezierTimingFunction(*this));
55 // These numbers come from http://www.w3.org/TR/css3-transitions/#transition-timing-function_tag.
56 PassOwnPtr
<CCTimingFunction
> CCEaseTimingFunction::create()
58 return CCCubicBezierTimingFunction::create(0.25, 0.1, 0.25, 1);
61 PassOwnPtr
<CCTimingFunction
> CCEaseInTimingFunction::create()
63 return CCCubicBezierTimingFunction::create(0.42, 0, 1.0, 1);
66 PassOwnPtr
<CCTimingFunction
> CCEaseOutTimingFunction::create()
68 return CCCubicBezierTimingFunction::create(0, 0, 0.58, 1);
71 PassOwnPtr
<CCTimingFunction
> CCEaseInOutTimingFunction::create()
73 return CCCubicBezierTimingFunction::create(0.42, 0, 0.58, 1);