Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / ui / gfx / transform_util_unittest.cc
blob41bfc40783a805caa8ce78fc0cd36b29c034b7b1
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ui/gfx/transform_util.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/gfx/point.h"
9 #include "ui/gfx/point3_f.h"
10 #include "ui/gfx/rect.h"
12 namespace gfx {
13 namespace {
15 TEST(TransformUtilTest, GetScaleTransform) {
16 const Point kAnchor(20, 40);
17 const float kScale = 0.5f;
19 Transform scale = GetScaleTransform(kAnchor, kScale);
21 const int kOffset = 10;
22 for (int sign_x = -1; sign_x <= 1; ++sign_x) {
23 for (int sign_y = -1; sign_y <= 1; ++sign_y) {
24 Point test(kAnchor.x() + sign_x * kOffset,
25 kAnchor.y() + sign_y * kOffset);
26 scale.TransformPoint(&test);
28 EXPECT_EQ(Point(kAnchor.x() + sign_x * kOffset * kScale,
29 kAnchor.y() + sign_y * kOffset * kScale),
30 test);
35 TEST(TransformUtilTest, SnapRotation) {
36 Transform result(Transform::kSkipInitialization);
37 Transform transform;
38 transform.RotateAboutZAxis(89.99);
40 Rect viewport(1920, 1200);
41 bool snapped = SnapTransform(&result, transform, viewport);
43 EXPECT_TRUE(snapped) << "Viewport should snap for this rotation.";
46 TEST(TransformUtilTest, SnapRotationDistantViewport) {
47 const int kOffset = 5000;
48 Transform result(Transform::kSkipInitialization);
49 Transform transform;
51 transform.RotateAboutZAxis(89.99);
53 Rect viewport(kOffset, kOffset, 1920, 1200);
54 bool snapped = SnapTransform(&result, transform, viewport);
56 EXPECT_FALSE(snapped) << "Distant viewport shouldn't snap by more than 1px.";
59 TEST(TransformUtilTest, NoSnapRotation) {
60 Transform result(Transform::kSkipInitialization);
61 Transform transform;
62 const int kOffset = 5000;
64 transform.RotateAboutZAxis(89.9);
66 Rect viewport(kOffset, kOffset, 1920, 1200);
67 bool snapped = SnapTransform(&result, transform, viewport);
69 EXPECT_FALSE(snapped) << "Viewport should not snap for this rotation.";
72 // Translations should always be snappable, the most we would move is 0.5
73 // pixels towards either direction to the nearest value in each component.
74 TEST(TransformUtilTest, SnapTranslation) {
75 Transform result(Transform::kSkipInitialization);
76 Transform transform;
78 transform.Translate3d(
79 SkDoubleToMScalar(1.01), SkDoubleToMScalar(1.99), SkDoubleToMScalar(3.0));
81 Rect viewport(1920, 1200);
82 bool snapped = SnapTransform(&result, transform, viewport);
84 EXPECT_TRUE(snapped) << "Viewport should snap for this translation.";
87 TEST(TransformUtilTest, SnapTranslationDistantViewport) {
88 Transform result(Transform::kSkipInitialization);
89 Transform transform;
90 const int kOffset = 5000;
92 transform.Translate3d(
93 SkDoubleToMScalar(1.01), SkDoubleToMScalar(1.99), SkDoubleToMScalar(3.0));
95 Rect viewport(kOffset, kOffset, 1920, 1200);
96 bool snapped = SnapTransform(&result, transform, viewport);
98 EXPECT_TRUE(snapped)
99 << "Distant viewport should still snap by less than 1px.";
102 TEST(TransformUtilTest, SnapScale) {
103 Transform result(Transform::kSkipInitialization);
104 Transform transform;
106 transform.Scale3d(SkDoubleToMScalar(5.0),
107 SkDoubleToMScalar(2.00001),
108 SkDoubleToMScalar(1.0));
109 Rect viewport(1920, 1200);
110 bool snapped = SnapTransform(&result, transform, viewport);
112 EXPECT_TRUE(snapped) << "Viewport should snap for this scaling.";
115 TEST(TransformUtilTest, NoSnapScale) {
116 Transform result(Transform::kSkipInitialization);
117 Transform transform;
119 transform.Scale3d(
120 SkDoubleToMScalar(5.0), SkDoubleToMScalar(2.1), SkDoubleToMScalar(1.0));
121 Rect viewport(1920, 1200);
122 bool snapped = SnapTransform(&result, transform, viewport);
124 EXPECT_FALSE(snapped) << "Viewport shouldn't snap for this scaling.";
127 TEST(TransformUtilTest, SnapCompositeTransform) {
128 Transform result(Transform::kSkipInitialization);
129 Transform transform;
131 transform.Translate3d(SkDoubleToMScalar(30.5), SkDoubleToMScalar(20.0),
132 SkDoubleToMScalar(10.1));
133 transform.RotateAboutZAxis(89.99);
134 transform.Scale3d(SkDoubleToMScalar(1.0),
135 SkDoubleToMScalar(3.00001),
136 SkDoubleToMScalar(2.0));
138 Rect viewport(1920, 1200);
139 bool snapped = SnapTransform(&result, transform, viewport);
140 ASSERT_TRUE(snapped) << "Viewport should snap all components.";
142 Point3F point;
144 point = Point3F(viewport.origin());
145 result.TransformPoint(&point);
146 EXPECT_EQ(Point3F(31.f, 20.f, 10.f), point) << "Transformed origin";
148 point = Point3F(viewport.top_right());
149 result.TransformPoint(&point);
150 EXPECT_EQ(Point3F(31.f, 1940.f, 10.f), point) << "Transformed top-right";
152 point = Point3F(viewport.bottom_left());
153 result.TransformPoint(&point);
154 EXPECT_EQ(Point3F(-3569.f, 20.f, 10.f), point) << "Transformed bottom-left";
156 point = Point3F(viewport.bottom_right());
157 result.TransformPoint(&point);
158 EXPECT_EQ(Point3F(-3569.f, 1940.f, 10.f), point)
159 << "Transformed bottom-right";
162 TEST(TransformUtilTest, NoSnapSkewedCompositeTransform) {
163 Transform result(Transform::kSkipInitialization);
164 Transform transform;
167 transform.RotateAboutZAxis(89.99);
168 transform.Scale3d(SkDoubleToMScalar(1.0),
169 SkDoubleToMScalar(3.00001),
170 SkDoubleToMScalar(2.0));
171 transform.Translate3d(SkDoubleToMScalar(30.5), SkDoubleToMScalar(20.0),
172 SkDoubleToMScalar(10.1));
173 transform.SkewX(20.0);
174 Rect viewport(1920, 1200);
175 bool snapped = SnapTransform(&result, transform, viewport);
176 EXPECT_FALSE(snapped) << "Skewed viewport should not snap.";
179 } // namespace
180 } // namespace gfx