Chromium Code Reviews| 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 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 134 matrix.set(2, 3, 44.f); | 134 matrix.set(2, 3, 44.f); |
| 135 matrix.set(3, 3, 45.f); | 135 matrix.set(3, 3, 45.f); |
| 136 | 136 |
| 137 // Sanity check | 137 // Sanity check |
| 138 EXPECT_ROW1_EQ(30.0f, 34.0f, 38.0f, 42.0f, (*transform)); | 138 EXPECT_ROW1_EQ(30.0f, 34.0f, 38.0f, 42.0f, (*transform)); |
| 139 EXPECT_ROW2_EQ(31.0f, 35.0f, 39.0f, 43.0f, (*transform)); | 139 EXPECT_ROW2_EQ(31.0f, 35.0f, 39.0f, 43.0f, (*transform)); |
| 140 EXPECT_ROW3_EQ(32.0f, 36.0f, 40.0f, 44.0f, (*transform)); | 140 EXPECT_ROW3_EQ(32.0f, 36.0f, 40.0f, 44.0f, (*transform)); |
| 141 EXPECT_ROW4_EQ(33.0f, 37.0f, 41.0f, 45.0f, (*transform)); | 141 EXPECT_ROW4_EQ(33.0f, 37.0f, 41.0f, 45.0f, (*transform)); |
| 142 } | 142 } |
| 143 | 143 |
| 144 const SkMScalar kApproxZero = | |
| 145 SkFloatToMScalar(std::numeric_limits<float>::epsilon()); | |
| 146 const SkMScalar kApproxOne = 1 - kApproxZero; | |
| 147 | |
| 148 void InitializeApproxIdentityMatrix(Transform* transform) { | |
| 149 SkMatrix44& matrix = transform->matrix(); | |
| 150 matrix.set(0, 0, kApproxOne); | |
| 151 matrix.set(0, 1, kApproxZero); | |
| 152 matrix.set(0, 2, kApproxZero); | |
| 153 matrix.set(0, 3, kApproxZero); | |
| 154 | |
| 155 matrix.set(1, 0, kApproxZero); | |
| 156 matrix.set(1, 1, kApproxOne); | |
| 157 matrix.set(1, 2, kApproxZero); | |
| 158 matrix.set(1, 3, kApproxZero); | |
| 159 | |
| 160 matrix.set(2, 0, kApproxZero); | |
| 161 matrix.set(2, 1, kApproxZero); | |
| 162 matrix.set(2, 2, kApproxOne); | |
| 163 matrix.set(2, 3, kApproxZero); | |
| 164 | |
| 165 matrix.set(3, 0, kApproxZero); | |
| 166 matrix.set(3, 1, kApproxZero); | |
| 167 matrix.set(3, 2, kApproxZero); | |
| 168 matrix.set(3, 3, kApproxOne); | |
| 169 } | |
| 170 | |
| 144 #ifdef SK_MSCALAR_IS_DOUBLE | 171 #ifdef SK_MSCALAR_IS_DOUBLE |
| 145 #define ERROR_THRESHOLD 1e-14 | 172 #define ERROR_THRESHOLD 1e-14 |
| 146 #else | 173 #else |
| 147 #define ERROR_THRESHOLD 1e-7 | 174 #define ERROR_THRESHOLD 1e-7 |
| 148 #endif | 175 #endif |
| 149 #define LOOSE_ERROR_THRESHOLD 1e-7 | 176 #define LOOSE_ERROR_THRESHOLD 1e-7 |
| 150 | 177 |
| 151 TEST(XFormTest, Equality) { | 178 TEST(XFormTest, Equality) { |
| 152 Transform lhs, rhs, interpolated; | 179 Transform lhs, rhs, interpolated; |
| 153 rhs.matrix().set3x3(1, 2, 3, | 180 rhs.matrix().set3x3(1, 2, 3, |
| (...skipping 2033 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2187 // Note carefully - expecting true here. | 2214 // Note carefully - expecting true here. |
| 2188 A.MakeIdentity(); | 2215 A.MakeIdentity(); |
| 2189 A.matrix().set(2, 3, 2.f); | 2216 A.matrix().set(2, 3, 2.f); |
| 2190 EXPECT_TRUE(A.IsIdentityOrTranslation()); | 2217 EXPECT_TRUE(A.IsIdentityOrTranslation()); |
| 2191 | 2218 |
| 2192 A.MakeIdentity(); | 2219 A.MakeIdentity(); |
| 2193 A.matrix().set(3, 3, 2.f); | 2220 A.matrix().set(3, 3, 2.f); |
| 2194 EXPECT_FALSE(A.IsIdentityOrTranslation()); | 2221 EXPECT_FALSE(A.IsIdentityOrTranslation()); |
| 2195 } | 2222 } |
| 2196 | 2223 |
| 2224 TEST(XFormTest, verifyIsApproximatelyIdentityOrTranslation) { | |
| 2225 Transform A; | |
| 2226 SkMatrix44& matrix = A.matrix(); | |
| 2227 | |
| 2228 // Exact pure translation. | |
| 2229 A.MakeIdentity(); | |
| 2230 | |
| 2231 // Set translate values to values other than 0 or 1. | |
| 2232 matrix.set(0, 3, 3.4); | |
| 2233 matrix.set(1, 3, 4.4); | |
| 2234 matrix.set(2, 3, 5.6); | |
| 2235 | |
| 2236 EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(0)); | |
| 2237 EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(kApproxZero)); | |
| 2238 | |
|
danakj
2013/10/17 17:43:18
1 blank line only
| |
| 2239 | |
| 2240 // Approximately pure translation. | |
| 2241 InitializeApproxIdentityMatrix(&A); | |
| 2242 | |
| 2243 // Some values must be exact. | |
| 2244 matrix.set(3, 0, 0); | |
| 2245 matrix.set(3, 1, 0); | |
| 2246 matrix.set(3, 2, 0); | |
| 2247 matrix.set(3, 3, 1); | |
| 2248 | |
| 2249 // Set translate values to values other than 0 or 1. | |
| 2250 matrix.set(0, 3, 3.4); | |
| 2251 matrix.set(1, 3, 4.4); | |
| 2252 matrix.set(2, 3, 5.6); | |
| 2253 | |
| 2254 EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(0)); | |
| 2255 EXPECT_TRUE(A.IsApproximatelyIdentityOrTranslation(kApproxZero)); | |
| 2256 | |
|
danakj
2013/10/17 17:43:18
1 blank line only
| |
| 2257 | |
| 2258 // Not approximately pure translation. | |
| 2259 InitializeApproxIdentityMatrix(&A); | |
| 2260 | |
| 2261 // Some values must be exact. | |
| 2262 matrix.set(3, 0, 0); | |
| 2263 matrix.set(3, 1, 0); | |
| 2264 matrix.set(3, 2, 0); | |
| 2265 matrix.set(3, 3, 1); | |
| 2266 | |
| 2267 // Set some values (not translate values) to values other than 0 or 1. | |
| 2268 matrix.set(0, 1, 3.4); | |
| 2269 matrix.set(3, 2, 4.4); | |
| 2270 matrix.set(2, 0, 5.6); | |
| 2271 | |
| 2272 EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(0)); | |
| 2273 EXPECT_FALSE(A.IsApproximatelyIdentityOrTranslation(kApproxZero)); | |
| 2274 } | |
| 2275 | |
| 2197 TEST(XFormTest, verifyIsScaleOrTranslation) { | 2276 TEST(XFormTest, verifyIsScaleOrTranslation) { |
| 2198 Transform A; | 2277 Transform A; |
| 2199 | 2278 |
| 2200 InitializeTestMatrix(&A); | 2279 InitializeTestMatrix(&A); |
| 2201 EXPECT_FALSE(A.IsScaleOrTranslation()); | 2280 EXPECT_FALSE(A.IsScaleOrTranslation()); |
| 2202 | 2281 |
| 2203 A.MakeIdentity(); | 2282 A.MakeIdentity(); |
| 2204 EXPECT_TRUE(A.IsScaleOrTranslation()); | 2283 EXPECT_TRUE(A.IsScaleOrTranslation()); |
| 2205 | 2284 |
| 2206 // Modifying any non-scale or non-translation components should cause | 2285 // Modifying any non-scale or non-translation components should cause |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2555 EXPECT_EQ(expected.ToString(), box.ToString()); | 2634 EXPECT_EQ(expected.ToString(), box.ToString()); |
| 2556 | 2635 |
| 2557 Transform singular; | 2636 Transform singular; |
| 2558 singular.Scale3d(0.f, 0.f, 0.f); | 2637 singular.Scale3d(0.f, 0.f, 0.f); |
| 2559 EXPECT_FALSE(singular.TransformBoxReverse(&box)); | 2638 EXPECT_FALSE(singular.TransformBoxReverse(&box)); |
| 2560 } | 2639 } |
| 2561 | 2640 |
| 2562 } // namespace | 2641 } // namespace |
| 2563 | 2642 |
| 2564 } // namespace gfx | 2643 } // namespace gfx |
| OLD | NEW |