transform_animation_curve_adapter_unittest.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/compositor/transform_animation_curve_adapter.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <sstream> 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/time/time.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/compositor/test/test_utils.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace ui { 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace { 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Check that the inverse transform curve gives the gives a transform that when 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// applied on top of the parent transform gives the original transform 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(InverseTransformCurveAdapterTest, InversesTransform) { 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Transform parent_start, parent_target; 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_start.Scale(0.5, 3.0); 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_start.Translate(-20.0, 30.0); 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_target.Translate(0, 100); 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Transform child_transform; 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) child_transform.Rotate(-30.0); 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::TimeDelta duration = base::TimeDelta::FromSeconds(1); 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const gfx::Transform effective_child_transform = 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_start * child_transform; 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TransformAnimationCurveAdapter parent_curve(gfx::Tween::LINEAR, 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_start, 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_target, 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) duration); 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) InverseTransformCurveAdapter child_curve(parent_curve, 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) child_transform, 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) duration); 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static const int kSteps = 1000; 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) double step = 1.0 / kSteps; 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (int i = 0; i <= kSteps ; ++i) { 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::ostringstream message; 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) message << "Step " << i << " of " << kSteps; 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SCOPED_TRACE(message.str()); 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Transform progress_parent_transform = 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_curve.GetValue(i*step); 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Transform progress_child_transform = 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) child_curve.GetValue(i*step); 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CheckApproximatelyEqual(effective_child_transform, 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) progress_parent_transform * 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) progress_child_transform); 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 55} 56 57} // namespace 58 59} // namespace ui 60