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..93ec812ab4f1d4bcdeb5c08247bfa294662162f7 100644 |
--- a/ui/compositor/transform_animation_curve_adapter.cc |
+++ b/ui/compositor/transform_animation_curve_adapter.cc |
@@ -51,4 +51,44 @@ gfx::Transform TransformAnimationCurveAdapter::GetValue( |
return gfx::ComposeTransform(to_return); |
} |
+CounterTransformCurveAdapter::CounterTransformCurveAdapter( |
+ TransformAnimationCurveAdapter parent_curve, |
+ gfx::Transform initial_value, |
+ base::TimeDelta duration) |
+ : parent_curve_(parent_curve), |
+ initial_value_(initial_value), |
+ duration_(duration) { |
+ effective_initial_value_ = parent_curve_.GetValue(0.0) |
+ * initial_value_; |
Ian Vollick
2013/08/23 12:45:19
nit: weird leading whitespace.
avallee
2013/08/23 15:01:19
Done.
|
+} |
+ |
+CounterTransformCurveAdapter::~CounterTransformCurveAdapter() { |
+} |
+ |
+double CounterTransformCurveAdapter::Duration() const { |
+ return duration_.InSeconds(); |
+} |
+ |
+scoped_ptr<cc::AnimationCurve> CounterTransformCurveAdapter::Clone() const { |
+ scoped_ptr<CounterTransformCurveAdapter> to_return( |
+ new CounterTransformCurveAdapter(parent_curve_, |
+ initial_value_, |
+ duration_)); |
+ return to_return.PassAs<cc::AnimationCurve>(); |
+} |
+ |
+gfx::Transform CounterTransformCurveAdapter::GetValue( |
+ double t) const { |
+ if (t <= 0.0) |
+ return initial_value_; |
+ |
+ gfx::Transform parent_transform = parent_curve_.GetValue(t); |
+ // Invert parent |
+ gfx::Transform to_return(gfx::Transform::kSkipInitialization); |
+ DCHECK(parent_transform.GetInverse(&to_return)); |
+ |
+ to_return.PreconcatTransform(effective_initial_value_); |
+ return to_return; |
+} |
+ |
} // namespace ui |