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

Side by Side Diff: ui/gfx/interpolated_transform_unittest.cc

Issue 7273073: Animated Rotation (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Address reviewer comments Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/gfx/interpolated_transform.cc ('k') | views/paint_lock.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 void CheckApproximatelyEqual(const ui::Transform& lhs, 12 void CheckApproximatelyEqual(const ui::Transform& lhs,
13 const ui::Transform& rhs) { 13 const ui::Transform& rhs) {
14 for (int i = 0; i < 4; ++i) { 14 for (int i = 0; i < 4; ++i) {
15 for (int j = 0; j < 4; ++j) { 15 for (int j = 0; j < 4; ++j) {
16 EXPECT_FLOAT_EQ(lhs.matrix().get(i, j), rhs.matrix().get(i, j)); 16 EXPECT_FLOAT_EQ(lhs.matrix().get(i, j), rhs.matrix().get(i, j));
17 } 17 }
18 } 18 }
19 } 19 }
20 20
21 float NormalizeAngle(float angle) {
22 while (angle < 0.0f) {
23 angle += 360.0f;
24 }
25 while (angle > 360.0f) {
26 angle -= 360.0f;
27 }
28 return angle;
29 }
30
21 } // namespace 31 } // namespace
22 32
23 TEST(InterpolatedTransformTest, InterpolatedRotation) { 33 TEST(InterpolatedTransformTest, InterpolatedRotation) {
24 ui::InterpolatedRotation interpolated_rotation(0, 100); 34 ui::InterpolatedRotation interpolated_rotation(0, 100);
25 ui::InterpolatedRotation interpolated_rotation_diff_start_end( 35 ui::InterpolatedRotation interpolated_rotation_diff_start_end(
26 0, 100, 100, 200); 36 0, 100, 100, 200);
27 37
28 for (int i = 0; i <= 100; ++i) { 38 for (int i = 0; i <= 100; ++i) {
29 ui::Transform rotation; 39 ui::Transform rotation;
30 rotation.SetRotate(i); 40 rotation.SetRotate(i);
31 ui::Transform interpolated = interpolated_rotation.Interpolate(i / 100.0f); 41 ui::Transform interpolated = interpolated_rotation.Interpolate(i / 100.0f);
32 CheckApproximatelyEqual(rotation, interpolated); 42 CheckApproximatelyEqual(rotation, interpolated);
33 interpolated = interpolated_rotation_diff_start_end.Interpolate(i + 100); 43 interpolated = interpolated_rotation_diff_start_end.Interpolate(i + 100);
34 CheckApproximatelyEqual(rotation, interpolated); 44 CheckApproximatelyEqual(rotation, interpolated);
35 } 45 }
36 } 46 }
37 47
38 TEST(InterpolatedTransformTest, InterpolatedScale) { 48 TEST(InterpolatedTransformTest, InterpolatedScale) {
39 ui::InterpolatedScale interpolated_scale(0, 100); 49 ui::InterpolatedScale interpolated_scale(gfx::Point3f(0, 0, 0),
50 gfx::Point3f(100, 100, 100));
40 ui::InterpolatedScale interpolated_scale_diff_start_end( 51 ui::InterpolatedScale interpolated_scale_diff_start_end(
41 0, 100, 100, 200); 52 gfx::Point3f(0, 0, 0), gfx::Point3f(100, 100, 100), 100, 200);
42 53
43 for (int i = 0; i <= 100; ++i) { 54 for (int i = 0; i <= 100; ++i) {
44 ui::Transform scale; 55 ui::Transform scale;
45 scale.SetScale(i, i); 56 scale.SetScale(i, i);
46 ui::Transform interpolated = interpolated_scale.Interpolate(i / 100.0f); 57 ui::Transform interpolated = interpolated_scale.Interpolate(i / 100.0f);
47 CheckApproximatelyEqual(scale, interpolated); 58 CheckApproximatelyEqual(scale, interpolated);
48 interpolated = interpolated_scale_diff_start_end.Interpolate(i + 100); 59 interpolated = interpolated_scale_diff_start_end.Interpolate(i + 100);
49 CheckApproximatelyEqual(scale, interpolated); 60 CheckApproximatelyEqual(scale, interpolated);
50 } 61 }
51 } 62 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 expected_result = gfx::Point(0, 100); 94 expected_result = gfx::Point(0, 100);
84 result.TransformPoint(above_pivot); 95 result.TransformPoint(above_pivot);
85 EXPECT_EQ(expected_result, above_pivot); 96 EXPECT_EQ(expected_result, above_pivot);
86 } 97 }
87 98
88 TEST(InterpolatedTransformTest, InterpolatedScaleAboutPivot) { 99 TEST(InterpolatedTransformTest, InterpolatedScaleAboutPivot) {
89 gfx::Point pivot(100, 100); 100 gfx::Point pivot(100, 100);
90 gfx::Point above_pivot(100, 200); 101 gfx::Point above_pivot(100, 200);
91 ui::InterpolatedTransformAboutPivot interpolated_xform( 102 ui::InterpolatedTransformAboutPivot interpolated_xform(
92 pivot, 103 pivot,
93 new ui::InterpolatedScale(1, 2)); 104 new ui::InterpolatedScale(gfx::Point3f(1, 1, 1), gfx::Point3f(2, 2, 2)));
94 ui::Transform result = interpolated_xform.Interpolate(0.0f); 105 ui::Transform result = interpolated_xform.Interpolate(0.0f);
95 CheckApproximatelyEqual(ui::Transform(), result); 106 CheckApproximatelyEqual(ui::Transform(), result);
96 result = interpolated_xform.Interpolate(1.0f); 107 result = interpolated_xform.Interpolate(1.0f);
97 gfx::Point expected_result = pivot; 108 gfx::Point expected_result = pivot;
98 result.TransformPoint(pivot); 109 result.TransformPoint(pivot);
99 EXPECT_EQ(expected_result, pivot); 110 EXPECT_EQ(expected_result, pivot);
100 expected_result = gfx::Point(100, 300); 111 expected_result = gfx::Point(100, 300);
101 result.TransformPoint(above_pivot); 112 result.TransformPoint(above_pivot);
102 EXPECT_EQ(expected_result, above_pivot); 113 EXPECT_EQ(expected_result, above_pivot);
103 } 114 }
115
116 TEST(InterpolatedTransformTest, FactorTRS) {
117 for (int degrees = 0; degrees < 360; ++degrees) {
118 // build a transformation matrix.
119 ui::Transform transform;
120 transform.SetScale(degrees + 1, 2 * degrees + 1);
121 transform.ConcatRotate(degrees);
122 transform.ConcatTranslate(degrees * 2, -degrees * 3);
123
124 // factor the matrix
125 gfx::Point translation;
126 float rotation;
127 gfx::Point3f scale;
128 bool success = ui::InterpolatedTransform::FactorTRS(transform,
129 &translation,
130 &rotation,
131 &scale);
132 EXPECT_TRUE(success);
133 EXPECT_FLOAT_EQ(translation.x(), degrees * 2);
134 EXPECT_FLOAT_EQ(translation.y(), -degrees * 3);
135 EXPECT_FLOAT_EQ(NormalizeAngle(rotation), degrees);
136 EXPECT_FLOAT_EQ(scale.x(), degrees + 1);
137 EXPECT_FLOAT_EQ(scale.y(), 2 * degrees + 1);
138 }
139 }
OLDNEW
« no previous file with comments | « ui/gfx/interpolated_transform.cc ('k') | views/paint_lock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698