| Index: ui/compositor/transform_animation_curve_adapter.cc
|
| diff --git a/ui/compositor/transform_animation_curve_adapter.cc b/ui/compositor/transform_animation_curve_adapter.cc
|
| index 96500b3de521210c77a8bb853a5db7dace2e708c..3e6c049cf1d8e8cea4e8a170a32e96fd6213d2a6 100644
|
| --- a/ui/compositor/transform_animation_curve_adapter.cc
|
| +++ b/ui/compositor/transform_animation_curve_adapter.cc
|
| @@ -51,4 +51,43 @@ gfx::Transform TransformAnimationCurveAdapter::GetValue(
|
| return gfx::ComposeTransform(to_return);
|
| }
|
|
|
| +InverseTransformCurveAdapter::InverseTransformCurveAdapter(
|
| + TransformAnimationCurveAdapter base_curve,
|
| + gfx::Transform initial_value,
|
| + base::TimeDelta duration)
|
| + : base_curve_(base_curve),
|
| + initial_value_(initial_value),
|
| + duration_(duration) {
|
| + effective_initial_value_ = base_curve_.GetValue(0.0) * initial_value_;
|
| +}
|
| +
|
| +InverseTransformCurveAdapter::~InverseTransformCurveAdapter() {
|
| +}
|
| +
|
| +double InverseTransformCurveAdapter::Duration() const {
|
| + return duration_.InSeconds();
|
| +}
|
| +
|
| +scoped_ptr<cc::AnimationCurve> InverseTransformCurveAdapter::Clone() const {
|
| + scoped_ptr<InverseTransformCurveAdapter> to_return(
|
| + new InverseTransformCurveAdapter(base_curve_,
|
| + initial_value_,
|
| + duration_));
|
| + return to_return.PassAs<cc::AnimationCurve>();
|
| +}
|
| +
|
| +gfx::Transform InverseTransformCurveAdapter::GetValue(
|
| + double t) const {
|
| + if (t <= 0.0)
|
| + return initial_value_;
|
| +
|
| + gfx::Transform base_transform = base_curve_.GetValue(t);
|
| + // Invert base
|
| + gfx::Transform to_return(gfx::Transform::kSkipInitialization);
|
| + DCHECK(base_transform.GetInverse(&to_return));
|
| +
|
| + to_return.PreconcatTransform(effective_initial_value_);
|
| + return to_return;
|
| +}
|
| +
|
| } // namespace ui
|
|
|