| Index: cc/animation/timing_function.cc
|
| diff --git a/cc/animation/timing_function.cc b/cc/animation/timing_function.cc
|
| index 2531cc69f36457ccac33f807ad39ce960002f147..94bf12874d30eeba4b6c65352e39bd6078e6caaf 100644
|
| --- a/cc/animation/timing_function.cc
|
| +++ b/cc/animation/timing_function.cc
|
| @@ -5,6 +5,7 @@
|
| #include "base/logging.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "cc/animation/timing_function.h"
|
| +#include "cc/base/math_util.h"
|
|
|
| namespace cc {
|
|
|
| @@ -63,4 +64,41 @@ scoped_ptr<TimingFunction> EaseInOutTimingFunction::Create() {
|
| return CubicBezierTimingFunction::Create(0.42, 0.0, 0.58, 1);
|
| }
|
|
|
| +scoped_ptr<StepsTimingFunction> StepsTimingFunction::Create(
|
| + int steps,
|
| + float steps_start_offset) {
|
| + return make_scoped_ptr(new StepsTimingFunction(steps, steps_start_offset));
|
| +}
|
| +
|
| +StepsTimingFunction::StepsTimingFunction(int steps, float steps_start_offset)
|
| + : steps_(steps), steps_start_offset_(steps_start_offset) {
|
| + // Restrict it to CSS presets: step_start, step_end and step_middle.
|
| + // See the Web Animations specification, 3.12.4. Timing in discrete steps.
|
| + DCHECK(steps_start_offset_ == 0 || steps_start_offset_ == 1 ||
|
| + steps_start_offset_ == 0.5);
|
| +}
|
| +
|
| +StepsTimingFunction::~StepsTimingFunction() {
|
| +}
|
| +
|
| +float StepsTimingFunction::GetValue(double t) const {
|
| + const double steps = static_cast<double>(steps_);
|
| + const double value = MathUtil::ClampToRange(
|
| + std::floor((steps * t) + steps_start_offset_) / steps, 0.0, 1.0);
|
| + return static_cast<float>(value);
|
| +}
|
| +
|
| +scoped_ptr<TimingFunction> StepsTimingFunction::Clone() const {
|
| + return make_scoped_ptr(new StepsTimingFunction(*this));
|
| +}
|
| +
|
| +void StepsTimingFunction::Range(float* min, float* max) const {
|
| + *min = 0.0f;
|
| + *max = 1.0f;
|
| +}
|
| +
|
| +float StepsTimingFunction::Velocity(double x) const {
|
| + return 0.0f;
|
| +}
|
| +
|
| } // namespace cc
|
|
|