Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(804)

Unified Diff: ui/compositor/transform_animation_curve_adapter.cc

Issue 2971503002: Transform animations should not collapse by default when interpolating (Closed)
Patch Set: . Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 e698be64f4d1c4fc9db328bc9dbd31baebfe01e2..0973c67abea5396464c65aaedd6a8b024fa992e5 100644
--- a/ui/compositor/transform_animation_curve_adapter.cc
+++ b/ui/compositor/transform_animation_curve_adapter.cc
@@ -9,6 +9,16 @@
namespace ui {
+namespace {
+
+static cc::TransformOperations WrapTransform(const gfx::Transform& transform) {
+ cc::TransformOperations operations;
+ operations.AppendMatrix(transform);
+ return operations;
+}
+
+} // namespace
+
TransformAnimationCurveAdapter::TransformAnimationCurveAdapter(
gfx::Tween::Type tween_type,
gfx::Transform initial_value,
@@ -16,10 +26,12 @@ TransformAnimationCurveAdapter::TransformAnimationCurveAdapter(
base::TimeDelta duration)
: tween_type_(tween_type),
initial_value_(initial_value),
+ initial_wrapped_value_(WrapTransform(initial_value)),
target_value_(target_value),
+ target_wrapped_value_(WrapTransform(target_value)),
duration_(duration) {
- gfx::DecomposeTransform(&decomposed_initial_value_, initial_value_);
- gfx::DecomposeTransform(&decomposed_target_value_, target_value_);
+ gfx::DecomposeTransform(&decomposed_initial_value_, initial_value);
+ gfx::DecomposeTransform(&decomposed_target_value_, target_value);
}
TransformAnimationCurveAdapter::TransformAnimationCurveAdapter(
@@ -38,18 +50,19 @@ std::unique_ptr<cc::AnimationCurve> TransformAnimationCurveAdapter::Clone()
tween_type_, initial_value_, target_value_, duration_));
}
-gfx::Transform TransformAnimationCurveAdapter::GetValue(
+cc::TransformOperations TransformAnimationCurveAdapter::GetValue(
base::TimeDelta t) const {
if (t >= duration_)
- return target_value_;
+ return target_wrapped_value_;
if (t <= base::TimeDelta())
- return initial_value_;
+ return initial_wrapped_value_;
double progress = cc::TimeUtil::Divide(t, duration_);
gfx::DecomposedTransform to_return = gfx::BlendDecomposedTransforms(
decomposed_target_value_, decomposed_initial_value_,
gfx::Tween::CalculateValue(tween_type_, progress));
- return gfx::ComposeTransform(to_return);
+
+ return WrapTransform(gfx::ComposeTransform(to_return));
}
bool TransformAnimationCurveAdapter::AnimatedBoundsForBox(
@@ -90,9 +103,10 @@ InverseTransformCurveAdapter::InverseTransformCurveAdapter(
base::TimeDelta duration)
: base_curve_(base_curve),
initial_value_(initial_value),
+ initial_wrapped_value_(WrapTransform(initial_value)),
duration_(duration) {
effective_initial_value_ =
- base_curve_.GetValue(base::TimeDelta()) * initial_value_;
+ base_curve_.GetValue(base::TimeDelta()).Apply() * initial_value_;
}
InverseTransformCurveAdapter::~InverseTransformCurveAdapter() {
@@ -108,18 +122,20 @@ std::unique_ptr<cc::AnimationCurve> InverseTransformCurveAdapter::Clone()
new InverseTransformCurveAdapter(base_curve_, initial_value_, duration_));
}
-gfx::Transform InverseTransformCurveAdapter::GetValue(base::TimeDelta t) const {
+cc::TransformOperations InverseTransformCurveAdapter::GetValue(
+ base::TimeDelta t) const {
if (t <= base::TimeDelta())
- return initial_value_;
+ return initial_wrapped_value_;
- gfx::Transform base_transform = base_curve_.GetValue(t);
+ gfx::Transform base_transform = base_curve_.GetValue(t).Apply();
// Invert base
gfx::Transform to_return(gfx::Transform::kSkipInitialization);
bool is_invertible = base_transform.GetInverse(&to_return);
DCHECK(is_invertible);
to_return.PreconcatTransform(effective_initial_value_);
- return to_return;
+
+ return WrapTransform(to_return);
}
bool InverseTransformCurveAdapter::AnimatedBoundsForBox(
« no previous file with comments | « ui/compositor/transform_animation_curve_adapter.h ('k') | ui/compositor/transform_animation_curve_adapter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698