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 // MSVC++ requires this to be set before any other includes to get M_PI. | 5 // MSVC++ requires this to be set before any other includes to get M_PI. |
6 #define _USE_MATH_DEFINES | 6 #define _USE_MATH_DEFINES |
7 | 7 |
8 #include "ui/gfx/transform.h" | 8 #include "ui/gfx/transform.h" |
9 | 9 |
10 #include <cmath> | 10 #include <cmath> |
(...skipping 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1175 | 1175 |
1176 transform.MakeIdentity(); | 1176 transform.MakeIdentity(); |
1177 transform.Translate3d(0, -6.7, 0); | 1177 transform.Translate3d(0, -6.7, 0); |
1178 EXPECT_FALSE(transform.IsIdentityOrIntegerTranslation()); | 1178 EXPECT_FALSE(transform.IsIdentityOrIntegerTranslation()); |
1179 | 1179 |
1180 transform.MakeIdentity(); | 1180 transform.MakeIdentity(); |
1181 transform.Translate3d(0, 0, 8.9); | 1181 transform.Translate3d(0, 0, 8.9); |
1182 EXPECT_FALSE(transform.IsIdentityOrIntegerTranslation()); | 1182 EXPECT_FALSE(transform.IsIdentityOrIntegerTranslation()); |
1183 } | 1183 } |
1184 | 1184 |
1185 TEST(XFormTest, verifyMatrixInversion) | |
1186 { | |
1187 // Invert a translation | |
1188 { | |
1189 gfx::Transform translation; | |
1190 translation.Translate3d(2, 3, 4); | |
1191 EXPECT_TRUE(translation.IsInvertible()); | |
1192 | |
1193 gfx::Transform inverse_translation; | |
danakj
2012/12/19 05:23:06
kSkipInitialization?
| |
1194 bool is_invertible = translation.GetInverse(&inverse_translation); | |
1195 EXPECT_TRUE(is_invertible); | |
1196 EXPECT_ROW1_EQ(1, 0, 0, -2, inverse_translation); | |
1197 EXPECT_ROW2_EQ(0, 1, 0, -3, inverse_translation); | |
1198 EXPECT_ROW3_EQ(0, 0, 1, -4, inverse_translation); | |
1199 EXPECT_ROW4_EQ(0, 0, 0, 1, inverse_translation); | |
1200 } | |
1201 | |
1202 { | |
1203 // Invert a non-uniform scale | |
1204 gfx::Transform scale; | |
1205 scale.Scale3d(4, 10, 100); | |
1206 EXPECT_TRUE(scale.IsInvertible()); | |
1207 | |
1208 gfx::Transform inverse_scale; | |
danakj
2012/12/19 05:23:06
kSkipInit?
| |
1209 bool is_invertible = scale.GetInverse(&inverse_scale); | |
1210 EXPECT_TRUE(is_invertible); | |
1211 EXPECT_ROW1_EQ(0.25, 0, 0, 0, inverse_scale); | |
1212 EXPECT_ROW2_EQ(0, .1f, 0, 0, inverse_scale); | |
1213 EXPECT_ROW3_EQ(0, 0, .01f, 0, inverse_scale); | |
1214 EXPECT_ROW4_EQ(0, 0, 0, 1, inverse_scale); | |
1215 } | |
1216 | |
1217 { | |
1218 // Try to invert a matrix that is not invertible. | |
danakj
2012/12/19 05:23:06
Is this really desirable? Why don't we set it to t
| |
1219 // The inverse() function should not modify the given matrix. | |
1220 gfx::Transform uninvertible; | |
danakj
2012/12/19 05:23:06
kSkipInitialization?
| |
1221 uninvertible.matrix().setDouble(0, 0, 0); | |
1222 uninvertible.matrix().setDouble(1, 1, 0); | |
1223 uninvertible.matrix().setDouble(2, 2, 0); | |
1224 uninvertible.matrix().setDouble(3, 3, 0); | |
1225 EXPECT_FALSE(uninvertible.IsInvertible()); | |
1226 | |
1227 gfx::Transform inverse_of_uninvertible; | |
1228 | |
1229 // Add a scale just to more easily ensure that inverse_of_uninvertible is | |
1230 // not modified. | |
1231 inverse_of_uninvertible.Scale3d(4, 10, 100); | |
1232 | |
1233 bool is_invertible = uninvertible.GetInverse(&inverse_of_uninvertible); | |
1234 EXPECT_FALSE(is_invertible); | |
1235 EXPECT_ROW1_EQ(4, 0, 0, 0, inverse_of_uninvertible); | |
1236 EXPECT_ROW2_EQ(0, 10, 0, 0, inverse_of_uninvertible); | |
1237 EXPECT_ROW3_EQ(0, 0, 100, 0, inverse_of_uninvertible); | |
1238 EXPECT_ROW4_EQ(0, 0, 0, 1, inverse_of_uninvertible); | |
1239 } | |
1240 } | |
1185 | 1241 |
1186 } // namespace | 1242 } // namespace |
1187 | 1243 |
1188 } // namespace gfx | 1244 } // namespace gfx |
OLD | NEW |