OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/interpolated_transform.h" | 5 #include "ui/gfx/interpolated_transform.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 namespace { | 10 namespace { |
11 | 11 |
12 const static float EPSILON = 1e-6f; | 12 const static float EPSILON = 1e-6f; |
13 | 13 |
14 bool ApproximatelyEqual(float lhs, float rhs) { | 14 bool ApproximatelyEqual(float lhs, float rhs) { |
15 if (lhs == 0) | 15 if (lhs == 0) |
16 return fabs(rhs) < EPSILON; | 16 return fabs(rhs) < EPSILON; |
17 if (rhs == 0) | 17 if (rhs == 0) |
18 return fabs(lhs) < EPSILON; | 18 return fabs(lhs) < EPSILON; |
19 return fabs(lhs - rhs) / std::max(fabs(rhs), fabs(lhs)) < EPSILON; | 19 return fabs(lhs - rhs) / std::max(fabs(rhs), fabs(lhs)) < EPSILON; |
20 } | 20 } |
21 | 21 |
22 bool ApproximatelyEqual(const ui::Transform& lhs, const ui::Transform& rhs) { | 22 bool ApproximatelyEqual(const ui::Transform& lhs, const ui::Transform& rhs) { |
23 for (int i = 0; i < 9; ++i) { | 23 for (int i = 0; i < 4; ++i) { |
24 if (!ApproximatelyEqual(lhs.matrix()[i], rhs.matrix()[i])) | 24 for (int j = 0; j < 4; ++j) { |
25 return false; | 25 if (!ApproximatelyEqual(lhs.matrix().get(i, j), |
| 26 rhs.matrix().get(i, j))) { |
| 27 return false; |
| 28 } |
| 29 } |
26 } | 30 } |
27 return true; | 31 return true; |
28 } | 32 } |
29 | 33 |
30 } // namespace | 34 } // namespace |
31 | 35 |
32 TEST(InterpolatedTransformTest, InterpolatedRotation) { | 36 TEST(InterpolatedTransformTest, InterpolatedRotation) { |
33 ui::InterpolatedRotation interpolated_rotation(0, 100); | 37 ui::InterpolatedRotation interpolated_rotation(0, 100); |
34 ui::InterpolatedRotation interpolated_rotation_diff_start_end( | 38 ui::InterpolatedRotation interpolated_rotation_diff_start_end( |
35 0, 100, 100, 200); | 39 0, 100, 100, 200); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 gfx::Point pivot(100, 100); | 84 gfx::Point pivot(100, 100); |
81 gfx::Point above_pivot(100, 200); | 85 gfx::Point above_pivot(100, 200); |
82 ui::InterpolatedRotation rot(0, 90); | 86 ui::InterpolatedRotation rot(0, 90); |
83 ui::InterpolatedTransformAboutPivot interpolated_xform( | 87 ui::InterpolatedTransformAboutPivot interpolated_xform( |
84 pivot, | 88 pivot, |
85 new ui::InterpolatedRotation(0, 90)); | 89 new ui::InterpolatedRotation(0, 90)); |
86 ui::Transform result = interpolated_xform.Interpolate(0.0f); | 90 ui::Transform result = interpolated_xform.Interpolate(0.0f); |
87 EXPECT_TRUE(ApproximatelyEqual(ui::Transform(), result)); | 91 EXPECT_TRUE(ApproximatelyEqual(ui::Transform(), result)); |
88 result = interpolated_xform.Interpolate(1.0f); | 92 result = interpolated_xform.Interpolate(1.0f); |
89 gfx::Point expected_result = pivot; | 93 gfx::Point expected_result = pivot; |
90 EXPECT_TRUE(result.TransformPoint(&pivot)); | 94 result.TransformPoint(pivot); |
91 EXPECT_EQ(expected_result, pivot); | 95 EXPECT_EQ(expected_result, pivot); |
92 expected_result = gfx::Point(0, 100); | 96 expected_result = gfx::Point(0, 100); |
93 EXPECT_TRUE(result.TransformPoint(&above_pivot)); | 97 result.TransformPoint(above_pivot); |
94 EXPECT_EQ(expected_result, above_pivot); | 98 EXPECT_EQ(expected_result, above_pivot); |
95 } | 99 } |
96 | 100 |
97 TEST(InterpolatedTransformTest, InterpolatedScaleAboutPivot) { | 101 TEST(InterpolatedTransformTest, InterpolatedScaleAboutPivot) { |
98 gfx::Point pivot(100, 100); | 102 gfx::Point pivot(100, 100); |
99 gfx::Point above_pivot(100, 200); | 103 gfx::Point above_pivot(100, 200); |
100 ui::InterpolatedTransformAboutPivot interpolated_xform( | 104 ui::InterpolatedTransformAboutPivot interpolated_xform( |
101 pivot, | 105 pivot, |
102 new ui::InterpolatedScale(1, 2)); | 106 new ui::InterpolatedScale(1, 2)); |
103 ui::Transform result = interpolated_xform.Interpolate(0.0f); | 107 ui::Transform result = interpolated_xform.Interpolate(0.0f); |
104 EXPECT_TRUE(ApproximatelyEqual(ui::Transform(), result)); | 108 EXPECT_TRUE(ApproximatelyEqual(ui::Transform(), result)); |
105 result = interpolated_xform.Interpolate(1.0f); | 109 result = interpolated_xform.Interpolate(1.0f); |
106 gfx::Point expected_result = pivot; | 110 gfx::Point expected_result = pivot; |
107 EXPECT_TRUE(result.TransformPoint(&pivot)); | 111 result.TransformPoint(pivot); |
108 EXPECT_EQ(expected_result, pivot); | 112 EXPECT_EQ(expected_result, pivot); |
109 expected_result = gfx::Point(100, 300); | 113 expected_result = gfx::Point(100, 300); |
110 EXPECT_TRUE(result.TransformPoint(&above_pivot)); | 114 result.TransformPoint(above_pivot); |
111 EXPECT_EQ(expected_result, above_pivot); | 115 EXPECT_EQ(expected_result, above_pivot); |
112 } | 116 } |
OLD | NEW |