Commit 470df4f9 authored by ikilpatrick's avatar ikilpatrick Committed by Commit bot

CC: Stop TimingFunction inheriting from AnimationCurve.

Simplifies code as TimingFunction has no logical reason to inherit from AnimationCurve (apart from sharing a few method names). Make code more clear.

BUG=

Review URL: https://codereview.chromium.org/606543002

Cr-Commit-Position: refs/heads/master@{#296862}
parent d3538166
...@@ -40,14 +40,6 @@ float GetProgress(double t, size_t i, const Keyframes& keyframes) { ...@@ -40,14 +40,6 @@ float GetProgress(double t, size_t i, const Keyframes& keyframes) {
return progress; return progress;
} }
scoped_ptr<TimingFunction> CloneTimingFunction(
const TimingFunction* timing_function) {
DCHECK(timing_function);
scoped_ptr<AnimationCurve> curve(timing_function->Clone());
return scoped_ptr<TimingFunction>(
static_cast<TimingFunction*>(curve.release()));
}
} // namespace } // namespace
Keyframe::Keyframe(double time, scoped_ptr<TimingFunction> timing_function) Keyframe::Keyframe(double time, scoped_ptr<TimingFunction> timing_function)
...@@ -81,7 +73,7 @@ SkColor ColorKeyframe::Value() const { return value_; } ...@@ -81,7 +73,7 @@ SkColor ColorKeyframe::Value() const { return value_; }
scoped_ptr<ColorKeyframe> ColorKeyframe::Clone() const { scoped_ptr<ColorKeyframe> ColorKeyframe::Clone() const {
scoped_ptr<TimingFunction> func; scoped_ptr<TimingFunction> func;
if (timing_function()) if (timing_function())
func = CloneTimingFunction(timing_function()); func = timing_function()->Clone();
return ColorKeyframe::Create(Time(), Value(), func.Pass()); return ColorKeyframe::Create(Time(), Value(), func.Pass());
} }
...@@ -108,7 +100,7 @@ float FloatKeyframe::Value() const { ...@@ -108,7 +100,7 @@ float FloatKeyframe::Value() const {
scoped_ptr<FloatKeyframe> FloatKeyframe::Clone() const { scoped_ptr<FloatKeyframe> FloatKeyframe::Clone() const {
scoped_ptr<TimingFunction> func; scoped_ptr<TimingFunction> func;
if (timing_function()) if (timing_function())
func = CloneTimingFunction(timing_function()); func = timing_function()->Clone();
return FloatKeyframe::Create(Time(), Value(), func.Pass()); return FloatKeyframe::Create(Time(), Value(), func.Pass());
} }
...@@ -135,7 +127,7 @@ const TransformOperations& TransformKeyframe::Value() const { ...@@ -135,7 +127,7 @@ const TransformOperations& TransformKeyframe::Value() const {
scoped_ptr<TransformKeyframe> TransformKeyframe::Clone() const { scoped_ptr<TransformKeyframe> TransformKeyframe::Clone() const {
scoped_ptr<TimingFunction> func; scoped_ptr<TimingFunction> func;
if (timing_function()) if (timing_function())
func = CloneTimingFunction(timing_function()); func = timing_function()->Clone();
return TransformKeyframe::Create(Time(), Value(), func.Pass()); return TransformKeyframe::Create(Time(), Value(), func.Pass());
} }
...@@ -162,7 +154,7 @@ const FilterOperations& FilterKeyframe::Value() const { ...@@ -162,7 +154,7 @@ const FilterOperations& FilterKeyframe::Value() const {
scoped_ptr<FilterKeyframe> FilterKeyframe::Clone() const { scoped_ptr<FilterKeyframe> FilterKeyframe::Clone() const {
scoped_ptr<TimingFunction> func; scoped_ptr<TimingFunction> func;
if (timing_function()) if (timing_function())
func = CloneTimingFunction(timing_function()); func = timing_function()->Clone();
return FilterKeyframe::Create(Time(), Value(), func.Pass()); return FilterKeyframe::Create(Time(), Value(), func.Pass());
} }
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "cc/animation/timing_function.h" #include "cc/animation/timing_function.h"
namespace cc { namespace cc {
...@@ -11,10 +12,6 @@ TimingFunction::TimingFunction() {} ...@@ -11,10 +12,6 @@ TimingFunction::TimingFunction() {}
TimingFunction::~TimingFunction() {} TimingFunction::~TimingFunction() {}
double TimingFunction::Duration() const {
return 1.0;
}
scoped_ptr<CubicBezierTimingFunction> CubicBezierTimingFunction::Create( scoped_ptr<CubicBezierTimingFunction> CubicBezierTimingFunction::Create(
double x1, double y1, double x2, double y2) { double x1, double y1, double x2, double y2) {
return make_scoped_ptr(new CubicBezierTimingFunction(x1, y1, x2, y2)); return make_scoped_ptr(new CubicBezierTimingFunction(x1, y1, x2, y2));
...@@ -32,9 +29,8 @@ float CubicBezierTimingFunction::GetValue(double x) const { ...@@ -32,9 +29,8 @@ float CubicBezierTimingFunction::GetValue(double x) const {
return static_cast<float>(bezier_.Solve(x)); return static_cast<float>(bezier_.Solve(x));
} }
scoped_ptr<AnimationCurve> CubicBezierTimingFunction::Clone() const { float CubicBezierTimingFunction::Velocity(double x) const {
return make_scoped_ptr( return static_cast<float>(bezier_.Slope(x));
new CubicBezierTimingFunction(*this)).PassAs<AnimationCurve>();
} }
void CubicBezierTimingFunction::Range(float* min, float* max) const { void CubicBezierTimingFunction::Range(float* min, float* max) const {
...@@ -45,8 +41,9 @@ void CubicBezierTimingFunction::Range(float* min, float* max) const { ...@@ -45,8 +41,9 @@ void CubicBezierTimingFunction::Range(float* min, float* max) const {
*max = static_cast<float>(max_d); *max = static_cast<float>(max_d);
} }
float CubicBezierTimingFunction::Velocity(double x) const { scoped_ptr<TimingFunction> CubicBezierTimingFunction::Clone() const {
return static_cast<float>(bezier_.Slope(x)); return make_scoped_ptr(new CubicBezierTimingFunction(*this))
.PassAs<TimingFunction>();
} }
// These numbers come from // These numbers come from
......
...@@ -5,24 +5,21 @@ ...@@ -5,24 +5,21 @@
#ifndef CC_ANIMATION_TIMING_FUNCTION_H_ #ifndef CC_ANIMATION_TIMING_FUNCTION_H_
#define CC_ANIMATION_TIMING_FUNCTION_H_ #define CC_ANIMATION_TIMING_FUNCTION_H_
#include "cc/animation/animation_curve.h"
#include "cc/base/cc_export.h" #include "cc/base/cc_export.h"
#include "ui/gfx/geometry/cubic_bezier.h" #include "ui/gfx/geometry/cubic_bezier.h"
namespace cc { namespace cc {
// See http://www.w3.org/TR/css3-transitions/. // See http://www.w3.org/TR/css3-transitions/.
class CC_EXPORT TimingFunction : public FloatAnimationCurve { class CC_EXPORT TimingFunction {
public: public:
virtual ~TimingFunction(); virtual ~TimingFunction();
// Partial implementation of FloatAnimationCurve. virtual float GetValue(double t) const = 0;
virtual double Duration() const OVERRIDE;
// The smallest and largest values returned by GetValue for inputs in
// [0, 1].
virtual void Range(float* min, float* max) const = 0;
virtual float Velocity(double time) const = 0; virtual float Velocity(double time) const = 0;
// The smallest and largest values returned by GetValue for inputs in [0, 1].
virtual void Range(float* min, float* max) const = 0;
virtual scoped_ptr<TimingFunction> Clone() const = 0;
protected: protected:
TimingFunction(); TimingFunction();
...@@ -37,12 +34,11 @@ class CC_EXPORT CubicBezierTimingFunction : public TimingFunction { ...@@ -37,12 +34,11 @@ class CC_EXPORT CubicBezierTimingFunction : public TimingFunction {
double x2, double y2); double x2, double y2);
virtual ~CubicBezierTimingFunction(); virtual ~CubicBezierTimingFunction();
// Partial implementation of FloatAnimationCurve. // TimingFunction implementation.
virtual float GetValue(double time) const OVERRIDE; virtual float GetValue(double time) const OVERRIDE;
virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
virtual void Range(float* min, float* max) const OVERRIDE;
virtual float Velocity(double time) const OVERRIDE; virtual float Velocity(double time) const OVERRIDE;
virtual void Range(float* min, float* max) const OVERRIDE;
virtual scoped_ptr<TimingFunction> Clone() const OVERRIDE;
protected: protected:
CubicBezierTimingFunction(double x1, double y1, double x2, double y2); CubicBezierTimingFunction(double x1, double y1, double x2, double y2);
......
...@@ -697,7 +697,7 @@ class LayerTreeHostAnimationTestLayerAddedWithAnimation ...@@ -697,7 +697,7 @@ class LayerTreeHostAnimationTestLayerAddedWithAnimation
layer->set_layer_animation_delegate(this); layer->set_layer_animation_delegate(this);
// Any valid AnimationCurve will do here. // Any valid AnimationCurve will do here.
scoped_ptr<AnimationCurve> curve(EaseTimingFunction::Create()); scoped_ptr<AnimationCurve> curve(new FakeFloatAnimationCurve());
scoped_ptr<Animation> animation( scoped_ptr<Animation> animation(
Animation::Create(curve.Pass(), 1, 1, Animation::Create(curve.Pass(), 1, 1,
Animation::Opacity)); Animation::Opacity));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment