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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 }; | 200 }; |
201 | 201 |
202 Transform xform; | 202 Transform xform; |
203 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 203 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
204 const TestCase& value = test_cases[i]; | 204 const TestCase& value = test_cases[i]; |
205 Transform translation; | 205 Transform translation; |
206 translation.Translate(value.tx, value.ty); | 206 translation.Translate(value.tx, value.ty); |
207 xform = translation * xform; | 207 xform = translation * xform; |
208 Point3F p1(value.x1, value.y1, 0); | 208 Point3F p1(value.x1, value.y1, 0); |
209 Point3F p2(value.x2, value.y2, 0); | 209 Point3F p2(value.x2, value.y2, 0); |
210 xform.TransformPoint(p1); | 210 xform.TransformPoint(&p1); |
211 if (value.tx == value.tx && | 211 if (value.tx == value.tx && |
212 value.ty == value.ty) { | 212 value.ty == value.ty) { |
213 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); | 213 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); |
214 } | 214 } |
215 } | 215 } |
216 } | 216 } |
217 | 217 |
218 TEST(XFormTest, ConcatScale) { | 218 TEST(XFormTest, ConcatScale) { |
219 static const struct TestCase { | 219 static const struct TestCase { |
220 int before; | 220 int before; |
221 float scale; | 221 float scale; |
222 int after; | 222 int after; |
223 } test_cases[] = { | 223 } test_cases[] = { |
224 { 1, 10.0f, 10 }, | 224 { 1, 10.0f, 10 }, |
225 { 1, .1f, 1 }, | 225 { 1, .1f, 1 }, |
226 { 1, 100.0f, 100 }, | 226 { 1, 100.0f, 100 }, |
227 { 1, -1.0f, -100 }, | 227 { 1, -1.0f, -100 }, |
228 { 1, std::numeric_limits<float>::quiet_NaN(), 1 } | 228 { 1, std::numeric_limits<float>::quiet_NaN(), 1 } |
229 }; | 229 }; |
230 | 230 |
231 Transform xform; | 231 Transform xform; |
232 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 232 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
233 const TestCase& value = test_cases[i]; | 233 const TestCase& value = test_cases[i]; |
234 Transform scale; | 234 Transform scale; |
235 scale.Scale(value.scale, value.scale); | 235 scale.Scale(value.scale, value.scale); |
236 xform = scale * xform; | 236 xform = scale * xform; |
237 Point3F p1(value.before, value.before, 0); | 237 Point3F p1(value.before, value.before, 0); |
238 Point3F p2(value.after, value.after, 0); | 238 Point3F p2(value.after, value.after, 0); |
239 xform.TransformPoint(p1); | 239 xform.TransformPoint(&p1); |
240 if (value.scale == value.scale) { | 240 if (value.scale == value.scale) { |
241 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); | 241 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); |
242 } | 242 } |
243 } | 243 } |
244 } | 244 } |
245 | 245 |
246 TEST(XFormTest, ConcatRotate) { | 246 TEST(XFormTest, ConcatRotate) { |
247 static const struct TestCase { | 247 static const struct TestCase { |
248 int x1; | 248 int x1; |
249 int y1; | 249 int y1; |
(...skipping 10 matching lines...) Expand all Loading... |
260 }; | 260 }; |
261 | 261 |
262 Transform xform; | 262 Transform xform; |
263 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 263 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
264 const TestCase& value = test_cases[i]; | 264 const TestCase& value = test_cases[i]; |
265 Transform rotation; | 265 Transform rotation; |
266 rotation.Rotate(value.degrees); | 266 rotation.Rotate(value.degrees); |
267 xform = rotation * xform; | 267 xform = rotation * xform; |
268 Point3F p1(value.x1, value.y1, 0); | 268 Point3F p1(value.x1, value.y1, 0); |
269 Point3F p2(value.x2, value.y2, 0); | 269 Point3F p2(value.x2, value.y2, 0); |
270 xform.TransformPoint(p1); | 270 xform.TransformPoint(&p1); |
271 if (value.degrees == value.degrees) { | 271 if (value.degrees == value.degrees) { |
272 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); | 272 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); |
273 } | 273 } |
274 } | 274 } |
275 } | 275 } |
276 | 276 |
277 TEST(XFormTest, SetTranslate) { | 277 TEST(XFormTest, SetTranslate) { |
278 static const struct TestCase { | 278 static const struct TestCase { |
279 int x1; int y1; | 279 int x1; int y1; |
280 float tx; float ty; | 280 float tx; float ty; |
(...skipping 24 matching lines...) Expand all Loading... |
305 p2.SetPoint(0, value.y2, 0); | 305 p2.SetPoint(0, value.y2, 0); |
306 xform.Translate(0.0, value.ty); | 306 xform.Translate(0.0, value.ty); |
307 break; | 307 break; |
308 case 2: | 308 case 2: |
309 p1.SetPoint(value.x1, value.y1, 0); | 309 p1.SetPoint(value.x1, value.y1, 0); |
310 p2.SetPoint(value.x2, value.y2, 0); | 310 p2.SetPoint(value.x2, value.y2, 0); |
311 xform.Translate(value.tx, value.ty); | 311 xform.Translate(value.tx, value.ty); |
312 break; | 312 break; |
313 } | 313 } |
314 p0 = p1; | 314 p0 = p1; |
315 xform.TransformPoint(p1); | 315 xform.TransformPoint(&p1); |
316 if (value.tx == value.tx && | 316 if (value.tx == value.tx && |
317 value.ty == value.ty) { | 317 value.ty == value.ty) { |
318 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); | 318 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); |
319 xform.TransformPointReverse(p1); | 319 xform.TransformPointReverse(&p1); |
320 EXPECT_TRUE(PointsAreNearlyEqual(p1, p0)); | 320 EXPECT_TRUE(PointsAreNearlyEqual(p1, p0)); |
321 } | 321 } |
322 } | 322 } |
323 } | 323 } |
324 } | 324 } |
325 | 325 |
326 TEST(XFormTest, SetScale) { | 326 TEST(XFormTest, SetScale) { |
327 static const struct TestCase { | 327 static const struct TestCase { |
328 int before; | 328 int before; |
329 float s; | 329 float s; |
(...skipping 22 matching lines...) Expand all Loading... |
352 p2.SetPoint(0, value.after, 0); | 352 p2.SetPoint(0, value.after, 0); |
353 xform.Scale(1.0, value.s); | 353 xform.Scale(1.0, value.s); |
354 break; | 354 break; |
355 case 2: | 355 case 2: |
356 p1.SetPoint(value.before, value.before, 0); | 356 p1.SetPoint(value.before, value.before, 0); |
357 p2.SetPoint(value.after, value.after, 0); | 357 p2.SetPoint(value.after, value.after, 0); |
358 xform.Scale(value.s, value.s); | 358 xform.Scale(value.s, value.s); |
359 break; | 359 break; |
360 } | 360 } |
361 p0 = p1; | 361 p0 = p1; |
362 xform.TransformPoint(p1); | 362 xform.TransformPoint(&p1); |
363 if (value.s == value.s) { | 363 if (value.s == value.s) { |
364 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); | 364 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); |
365 if (value.s != 0.0f) { | 365 if (value.s != 0.0f) { |
366 xform.TransformPointReverse(p1); | 366 xform.TransformPointReverse(&p1); |
367 EXPECT_TRUE(PointsAreNearlyEqual(p1, p0)); | 367 EXPECT_TRUE(PointsAreNearlyEqual(p1, p0)); |
368 } | 368 } |
369 } | 369 } |
370 } | 370 } |
371 } | 371 } |
372 } | 372 } |
373 | 373 |
374 TEST(XFormTest, SetRotate) { | 374 TEST(XFormTest, SetRotate) { |
375 static const struct SetRotateCase { | 375 static const struct SetRotateCase { |
376 int x; | 376 int x; |
(...skipping 15 matching lines...) Expand all Loading... |
392 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(set_rotate_cases); ++i) { | 392 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(set_rotate_cases); ++i) { |
393 const SetRotateCase& value = set_rotate_cases[i]; | 393 const SetRotateCase& value = set_rotate_cases[i]; |
394 Point3F p0; | 394 Point3F p0; |
395 Point3F p1(value.x, value.y, 0); | 395 Point3F p1(value.x, value.y, 0); |
396 Point3F p2(value.xprime, value.yprime, 0); | 396 Point3F p2(value.xprime, value.yprime, 0); |
397 p0 = p1; | 397 p0 = p1; |
398 Transform xform; | 398 Transform xform; |
399 xform.Rotate(value.degree); | 399 xform.Rotate(value.degree); |
400 // just want to make sure that we don't crash in the case of NaN. | 400 // just want to make sure that we don't crash in the case of NaN. |
401 if (value.degree == value.degree) { | 401 if (value.degree == value.degree) { |
402 xform.TransformPoint(p1); | 402 xform.TransformPoint(&p1); |
403 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); | 403 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); |
404 xform.TransformPointReverse(p1); | 404 xform.TransformPointReverse(&p1); |
405 EXPECT_TRUE(PointsAreNearlyEqual(p1, p0)); | 405 EXPECT_TRUE(PointsAreNearlyEqual(p1, p0)); |
406 } | 406 } |
407 } | 407 } |
408 } | 408 } |
409 | 409 |
410 // 2D tests | 410 // 2D tests |
411 TEST(XFormTest, ConcatTranslate2D) { | 411 TEST(XFormTest, ConcatTranslate2D) { |
412 static const struct TestCase { | 412 static const struct TestCase { |
413 int x1; | 413 int x1; |
414 int y1; | 414 int y1; |
(...skipping 12 matching lines...) Expand all Loading... |
427 }; | 427 }; |
428 | 428 |
429 Transform xform; | 429 Transform xform; |
430 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 430 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
431 const TestCase& value = test_cases[i]; | 431 const TestCase& value = test_cases[i]; |
432 Transform translation; | 432 Transform translation; |
433 translation.Translate(value.tx, value.ty); | 433 translation.Translate(value.tx, value.ty); |
434 xform = translation * xform; | 434 xform = translation * xform; |
435 Point p1(value.x1, value.y1); | 435 Point p1(value.x1, value.y1); |
436 Point p2(value.x2, value.y2); | 436 Point p2(value.x2, value.y2); |
437 xform.TransformPoint(p1); | 437 xform.TransformPoint(&p1); |
438 if (value.tx == value.tx && | 438 if (value.tx == value.tx && |
439 value.ty == value.ty) { | 439 value.ty == value.ty) { |
440 EXPECT_EQ(p1.x(), p2.x()); | 440 EXPECT_EQ(p1.x(), p2.x()); |
441 EXPECT_EQ(p1.y(), p2.y()); | 441 EXPECT_EQ(p1.y(), p2.y()); |
442 } | 442 } |
443 } | 443 } |
444 } | 444 } |
445 | 445 |
446 TEST(XFormTest, ConcatScale2D) { | 446 TEST(XFormTest, ConcatScale2D) { |
447 static const struct TestCase { | 447 static const struct TestCase { |
448 int before; | 448 int before; |
449 float scale; | 449 float scale; |
450 int after; | 450 int after; |
451 } test_cases[] = { | 451 } test_cases[] = { |
452 { 1, 10.0f, 10}, | 452 { 1, 10.0f, 10}, |
453 { 1, .1f, 1}, | 453 { 1, .1f, 1}, |
454 { 1, 100.0f, 100}, | 454 { 1, 100.0f, 100}, |
455 { 1, -1.0f, -100}, | 455 { 1, -1.0f, -100}, |
456 { 1, std::numeric_limits<float>::quiet_NaN(), 1} | 456 { 1, std::numeric_limits<float>::quiet_NaN(), 1} |
457 }; | 457 }; |
458 | 458 |
459 Transform xform; | 459 Transform xform; |
460 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 460 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
461 const TestCase& value = test_cases[i]; | 461 const TestCase& value = test_cases[i]; |
462 Transform scale; | 462 Transform scale; |
463 scale.Scale(value.scale, value.scale); | 463 scale.Scale(value.scale, value.scale); |
464 xform = scale * xform; | 464 xform = scale * xform; |
465 Point p1(value.before, value.before); | 465 Point p1(value.before, value.before); |
466 Point p2(value.after, value.after); | 466 Point p2(value.after, value.after); |
467 xform.TransformPoint(p1); | 467 xform.TransformPoint(&p1); |
468 if (value.scale == value.scale) { | 468 if (value.scale == value.scale) { |
469 EXPECT_EQ(p1.x(), p2.x()); | 469 EXPECT_EQ(p1.x(), p2.x()); |
470 EXPECT_EQ(p1.y(), p2.y()); | 470 EXPECT_EQ(p1.y(), p2.y()); |
471 } | 471 } |
472 } | 472 } |
473 } | 473 } |
474 | 474 |
475 TEST(XFormTest, ConcatRotate2D) { | 475 TEST(XFormTest, ConcatRotate2D) { |
476 static const struct TestCase { | 476 static const struct TestCase { |
477 int x1; | 477 int x1; |
(...skipping 11 matching lines...) Expand all Loading... |
489 }; | 489 }; |
490 | 490 |
491 Transform xform; | 491 Transform xform; |
492 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 492 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
493 const TestCase& value = test_cases[i]; | 493 const TestCase& value = test_cases[i]; |
494 Transform rotation; | 494 Transform rotation; |
495 rotation.Rotate(value.degrees); | 495 rotation.Rotate(value.degrees); |
496 xform = rotation * xform; | 496 xform = rotation * xform; |
497 Point p1(value.x1, value.y1); | 497 Point p1(value.x1, value.y1); |
498 Point p2(value.x2, value.y2); | 498 Point p2(value.x2, value.y2); |
499 xform.TransformPoint(p1); | 499 xform.TransformPoint(&p1); |
500 if (value.degrees == value.degrees) { | 500 if (value.degrees == value.degrees) { |
501 EXPECT_EQ(p1.x(), p2.x()); | 501 EXPECT_EQ(p1.x(), p2.x()); |
502 EXPECT_EQ(p1.y(), p2.y()); | 502 EXPECT_EQ(p1.y(), p2.y()); |
503 } | 503 } |
504 } | 504 } |
505 } | 505 } |
506 | 506 |
507 TEST(XFormTest, SetTranslate2D) { | 507 TEST(XFormTest, SetTranslate2D) { |
508 static const struct TestCase { | 508 static const struct TestCase { |
509 int x1; int y1; | 509 int x1; int y1; |
(...skipping 28 matching lines...) Expand all Loading... |
538 xform.Translate(0.0, value.ty + j * epsilon); | 538 xform.Translate(0.0, value.ty + j * epsilon); |
539 break; | 539 break; |
540 case 2: | 540 case 2: |
541 p1.SetPoint(value.x1, value.y1); | 541 p1.SetPoint(value.x1, value.y1); |
542 p2.SetPoint(value.x2, value.y2); | 542 p2.SetPoint(value.x2, value.y2); |
543 xform.Translate(value.tx + j * epsilon, | 543 xform.Translate(value.tx + j * epsilon, |
544 value.ty + j * epsilon); | 544 value.ty + j * epsilon); |
545 break; | 545 break; |
546 } | 546 } |
547 p0 = p1; | 547 p0 = p1; |
548 xform.TransformPoint(p1); | 548 xform.TransformPoint(&p1); |
549 if (value.tx == value.tx && | 549 if (value.tx == value.tx && |
550 value.ty == value.ty) { | 550 value.ty == value.ty) { |
551 EXPECT_EQ(p1.x(), p2.x()); | 551 EXPECT_EQ(p1.x(), p2.x()); |
552 EXPECT_EQ(p1.y(), p2.y()); | 552 EXPECT_EQ(p1.y(), p2.y()); |
553 xform.TransformPointReverse(p1); | 553 xform.TransformPointReverse(&p1); |
554 EXPECT_EQ(p1.x(), p0.x()); | 554 EXPECT_EQ(p1.x(), p0.x()); |
555 EXPECT_EQ(p1.y(), p0.y()); | 555 EXPECT_EQ(p1.y(), p0.y()); |
556 } | 556 } |
557 } | 557 } |
558 } | 558 } |
559 } | 559 } |
560 } | 560 } |
561 | 561 |
562 TEST(XFormTest, SetScale2D) { | 562 TEST(XFormTest, SetScale2D) { |
563 static const struct TestCase { | 563 static const struct TestCase { |
(...skipping 29 matching lines...) Expand all Loading... |
593 case 2: | 593 case 2: |
594 p1.SetPoint(value.before, | 594 p1.SetPoint(value.before, |
595 value.before); | 595 value.before); |
596 p2.SetPoint(value.after, | 596 p2.SetPoint(value.after, |
597 value.after); | 597 value.after); |
598 xform.Scale(value.s + j * epsilon, | 598 xform.Scale(value.s + j * epsilon, |
599 value.s + j * epsilon); | 599 value.s + j * epsilon); |
600 break; | 600 break; |
601 } | 601 } |
602 p0 = p1; | 602 p0 = p1; |
603 xform.TransformPoint(p1); | 603 xform.TransformPoint(&p1); |
604 if (value.s == value.s) { | 604 if (value.s == value.s) { |
605 EXPECT_EQ(p1.x(), p2.x()); | 605 EXPECT_EQ(p1.x(), p2.x()); |
606 EXPECT_EQ(p1.y(), p2.y()); | 606 EXPECT_EQ(p1.y(), p2.y()); |
607 if (value.s != 0.0f) { | 607 if (value.s != 0.0f) { |
608 xform.TransformPointReverse(p1); | 608 xform.TransformPointReverse(&p1); |
609 EXPECT_EQ(p1.x(), p0.x()); | 609 EXPECT_EQ(p1.x(), p0.x()); |
610 EXPECT_EQ(p1.y(), p0.y()); | 610 EXPECT_EQ(p1.y(), p0.y()); |
611 } | 611 } |
612 } | 612 } |
613 } | 613 } |
614 } | 614 } |
615 } | 615 } |
616 } | 616 } |
617 | 617 |
618 TEST(XFormTest, SetRotate2D) { | 618 TEST(XFormTest, SetRotate2D) { |
(...skipping 17 matching lines...) Expand all Loading... |
636 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(set_rotate_cases); ++i) { | 636 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(set_rotate_cases); ++i) { |
637 const SetRotateCase& value = set_rotate_cases[i]; | 637 const SetRotateCase& value = set_rotate_cases[i]; |
638 for (int j = 1; j >= -1; --j) { | 638 for (int j = 1; j >= -1; --j) { |
639 float epsilon = 0.1f; | 639 float epsilon = 0.1f; |
640 Point pt(value.x, value.y); | 640 Point pt(value.x, value.y); |
641 Transform xform; | 641 Transform xform; |
642 // should be invariant to small floating point errors. | 642 // should be invariant to small floating point errors. |
643 xform.Rotate(value.degree + j * epsilon); | 643 xform.Rotate(value.degree + j * epsilon); |
644 // just want to make sure that we don't crash in the case of NaN. | 644 // just want to make sure that we don't crash in the case of NaN. |
645 if (value.degree == value.degree) { | 645 if (value.degree == value.degree) { |
646 xform.TransformPoint(pt); | 646 xform.TransformPoint(&pt); |
647 EXPECT_EQ(value.xprime, pt.x()); | 647 EXPECT_EQ(value.xprime, pt.x()); |
648 EXPECT_EQ(value.yprime, pt.y()); | 648 EXPECT_EQ(value.yprime, pt.y()); |
649 xform.TransformPointReverse(pt); | 649 xform.TransformPointReverse(&pt); |
650 EXPECT_EQ(pt.x(), value.x); | 650 EXPECT_EQ(pt.x(), value.x); |
651 EXPECT_EQ(pt.y(), value.y); | 651 EXPECT_EQ(pt.y(), value.y); |
652 } | 652 } |
653 } | 653 } |
654 } | 654 } |
655 } | 655 } |
656 | 656 |
657 TEST(XFormTest, BlendTranslate) { | 657 TEST(XFormTest, BlendTranslate) { |
658 Transform from; | 658 Transform from; |
659 for (int i = -5; i < 15; ++i) { | 659 for (int i = -5; i < 15; ++i) { |
(...skipping 1626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2286 Point3F p2(10.0f, 5.0f, 0.0f); | 2286 Point3F p2(10.0f, 5.0f, 0.0f); |
2287 Point3F p3(10.0f, 20.0f, 0.0f); | 2287 Point3F p3(10.0f, 20.0f, 0.0f); |
2288 Point3F p4(5.0f, 20.0f, 0.0f); | 2288 Point3F p4(5.0f, 20.0f, 0.0f); |
2289 | 2289 |
2290 QuadF test_quad(PointF(p1.x(), p1.y()), | 2290 QuadF test_quad(PointF(p1.x(), p1.y()), |
2291 PointF(p2.x(), p2.y()), | 2291 PointF(p2.x(), p2.y()), |
2292 PointF(p3.x(), p3.y()), | 2292 PointF(p3.x(), p3.y()), |
2293 PointF(p4.x(), p4.y())); | 2293 PointF(p4.x(), p4.y())); |
2294 EXPECT_TRUE(test_quad.IsRectilinear()); | 2294 EXPECT_TRUE(test_quad.IsRectilinear()); |
2295 | 2295 |
2296 transform.TransformPoint(p1); | 2296 transform.TransformPoint(&p1); |
2297 transform.TransformPoint(p2); | 2297 transform.TransformPoint(&p2); |
2298 transform.TransformPoint(p3); | 2298 transform.TransformPoint(&p3); |
2299 transform.TransformPoint(p4); | 2299 transform.TransformPoint(&p4); |
2300 | 2300 |
2301 QuadF transformedQuad(PointF(p1.x(), p1.y()), | 2301 QuadF transformedQuad(PointF(p1.x(), p1.y()), |
2302 PointF(p2.x(), p2.y()), | 2302 PointF(p2.x(), p2.y()), |
2303 PointF(p3.x(), p3.y()), | 2303 PointF(p3.x(), p3.y()), |
2304 PointF(p4.x(), p4.y())); | 2304 PointF(p4.x(), p4.y())); |
2305 return transformedQuad.IsRectilinear(); | 2305 return transformedQuad.IsRectilinear(); |
2306 } | 2306 } |
2307 | 2307 |
2308 TEST(XFormTest, Preserves2dAxisAlignment) { | 2308 TEST(XFormTest, Preserves2dAxisAlignment) { |
2309 static const struct TestCase { | 2309 static const struct TestCase { |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2500 transform.Translate(translation.x(), translation.y() + 1); | 2500 transform.Translate(translation.x(), translation.y() + 1); |
2501 EXPECT_NE(translation.ToString(), transform.To2dTranslation().ToString()); | 2501 EXPECT_NE(translation.ToString(), transform.To2dTranslation().ToString()); |
2502 transform.MakeIdentity(); | 2502 transform.MakeIdentity(); |
2503 transform.Translate(translation.x(), translation.y()); | 2503 transform.Translate(translation.x(), translation.y()); |
2504 EXPECT_EQ(translation.ToString(), transform.To2dTranslation().ToString()); | 2504 EXPECT_EQ(translation.ToString(), transform.To2dTranslation().ToString()); |
2505 } | 2505 } |
2506 | 2506 |
2507 } // namespace | 2507 } // namespace |
2508 | 2508 |
2509 } // namespace gfx | 2509 } // namespace gfx |
OLD | NEW |