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

Side by Side Diff: tests/PathTest.cpp

Issue 1316233002: Style Change: NULL->nullptr (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2015-08-27 (Thursday) 10:25:06 EDT Created 5 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
« no previous file with comments | « tests/PathOpsTSectDebug.h ('k') | tests/PictureBBHTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkCanvas.h" 8 #include "SkCanvas.h"
9 #include "SkPaint.h" 9 #include "SkPaint.h"
10 #include "SkParse.h" 10 #include "SkParse.h"
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 path.moveTo(pts[0]); 307 path.moveTo(pts[0]);
308 path.cubicTo(pts[1], pts[2], pts[3]); 308 path.cubicTo(pts[1], pts[2], pts[3]);
309 309
310 SkPaint paint; 310 SkPaint paint;
311 paint.setStyle(SkPaint::kStroke_Style); 311 paint.setStyle(SkPaint::kStroke_Style);
312 paint.setStrokeWidth(20); 312 paint.setStrokeWidth(20);
313 313
314 SkPath dst; 314 SkPath dst;
315 // Before the fix, this would infinite-recurse, and run out of stack 315 // Before the fix, this would infinite-recurse, and run out of stack
316 // because we would keep trying to subdivide a degenerate cubic segment. 316 // because we would keep trying to subdivide a degenerate cubic segment.
317 paint.getFillPath(path, &dst, NULL); 317 paint.getFillPath(path, &dst, nullptr);
318 } 318 }
319 319
320 static void build_path_170666(SkPath& path) { 320 static void build_path_170666(SkPath& path) {
321 path.moveTo(17.9459f, 21.6344f); 321 path.moveTo(17.9459f, 21.6344f);
322 path.lineTo(139.545f, -47.8105f); 322 path.lineTo(139.545f, -47.8105f);
323 path.lineTo(139.545f, -47.8105f); 323 path.lineTo(139.545f, -47.8105f);
324 path.lineTo(131.07f, -47.3888f); 324 path.lineTo(131.07f, -47.3888f);
325 path.lineTo(131.07f, -47.3888f); 325 path.lineTo(131.07f, -47.3888f);
326 path.lineTo(122.586f, -46.9532f); 326 path.lineTo(122.586f, -46.9532f);
327 path.lineTo(122.586f, -46.9532f); 327 path.lineTo(122.586f, -46.9532f);
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 "L-0.33997991989448945,-0.11301535852306784L-0.33990282433493346,-0.1129 6217481488612" 478 "L-0.33997991989448945,-0.11301535852306784L-0.33990282433493346,-0.1129 6217481488612"
479 "L-0.33993994441916414,-0.11288906492739594Z"; 479 "L-0.33993994441916414,-0.11288906492739594Z";
480 test_tiny_path_convexity(reporter, originalFiddleData, 22682.240000000005f,7 819.72220766405f, 480 test_tiny_path_convexity(reporter, originalFiddleData, 22682.240000000005f,7 819.72220766405f,
481 65536); 481 65536);
482 } 482 }
483 483
484 static void test_addrect(skiatest::Reporter* reporter) { 484 static void test_addrect(skiatest::Reporter* reporter) {
485 SkPath path; 485 SkPath path;
486 path.lineTo(0, 0); 486 path.lineTo(0, 0);
487 path.addRect(SkRect::MakeWH(50, 100)); 487 path.addRect(SkRect::MakeWH(50, 100));
488 REPORTER_ASSERT(reporter, path.isRect(NULL)); 488 REPORTER_ASSERT(reporter, path.isRect(nullptr));
489 489
490 path.reset(); 490 path.reset();
491 path.lineTo(FLT_EPSILON, FLT_EPSILON); 491 path.lineTo(FLT_EPSILON, FLT_EPSILON);
492 path.addRect(SkRect::MakeWH(50, 100)); 492 path.addRect(SkRect::MakeWH(50, 100));
493 REPORTER_ASSERT(reporter, !path.isRect(NULL)); 493 REPORTER_ASSERT(reporter, !path.isRect(nullptr));
494 494
495 path.reset(); 495 path.reset();
496 path.quadTo(0, 0, 0, 0); 496 path.quadTo(0, 0, 0, 0);
497 path.addRect(SkRect::MakeWH(50, 100)); 497 path.addRect(SkRect::MakeWH(50, 100));
498 REPORTER_ASSERT(reporter, !path.isRect(NULL)); 498 REPORTER_ASSERT(reporter, !path.isRect(nullptr));
499 499
500 path.reset(); 500 path.reset();
501 path.conicTo(0, 0, 0, 0, 0.5f); 501 path.conicTo(0, 0, 0, 0, 0.5f);
502 path.addRect(SkRect::MakeWH(50, 100)); 502 path.addRect(SkRect::MakeWH(50, 100));
503 REPORTER_ASSERT(reporter, !path.isRect(NULL)); 503 REPORTER_ASSERT(reporter, !path.isRect(nullptr));
504 504
505 path.reset(); 505 path.reset();
506 path.cubicTo(0, 0, 0, 0, 0, 0); 506 path.cubicTo(0, 0, 0, 0, 0, 0);
507 path.addRect(SkRect::MakeWH(50, 100)); 507 path.addRect(SkRect::MakeWH(50, 100));
508 REPORTER_ASSERT(reporter, !path.isRect(NULL)); 508 REPORTER_ASSERT(reporter, !path.isRect(nullptr));
509 } 509 }
510 510
511 // Make sure we stay non-finite once we get there (unless we reset or rewind). 511 // Make sure we stay non-finite once we get there (unless we reset or rewind).
512 static void test_addrect_isfinite(skiatest::Reporter* reporter) { 512 static void test_addrect_isfinite(skiatest::Reporter* reporter) {
513 SkPath path; 513 SkPath path;
514 514
515 path.addRect(SkRect::MakeWH(50, 100)); 515 path.addRect(SkRect::MakeWH(50, 100));
516 REPORTER_ASSERT(reporter, path.isFinite()); 516 REPORTER_ASSERT(reporter, path.isFinite());
517 517
518 path.moveTo(0, 0); 518 path.moveTo(0, 0);
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 if (SkPathPriv::CheapComputeFirstDirection(copy, &dir)) { 919 if (SkPathPriv::CheapComputeFirstDirection(copy, &dir)) {
920 REPORTER_ASSERT(reporter, dir == expected); 920 REPORTER_ASSERT(reporter, dir == expected);
921 } else { 921 } else {
922 REPORTER_ASSERT(reporter, SkPathPriv::kUnknown_FirstDirection == expecte d); 922 REPORTER_ASSERT(reporter, SkPathPriv::kUnknown_FirstDirection == expecte d);
923 } 923 }
924 } 924 }
925 925
926 static void test_direction(skiatest::Reporter* reporter) { 926 static void test_direction(skiatest::Reporter* reporter) {
927 size_t i; 927 size_t i;
928 SkPath path; 928 SkPath path;
929 REPORTER_ASSERT(reporter, !SkPathPriv::CheapComputeFirstDirection(path, NULL )); 929 REPORTER_ASSERT(reporter, !SkPathPriv::CheapComputeFirstDirection(path, null ptr));
930 REPORTER_ASSERT(reporter, !SkPathPriv::CheapIsFirstDirection(path, SkPathPri v::kCW_FirstDirection)); 930 REPORTER_ASSERT(reporter, !SkPathPriv::CheapIsFirstDirection(path, SkPathPri v::kCW_FirstDirection));
931 REPORTER_ASSERT(reporter, !SkPathPriv::CheapIsFirstDirection(path, SkPathPri v::kCCW_FirstDirection)); 931 REPORTER_ASSERT(reporter, !SkPathPriv::CheapIsFirstDirection(path, SkPathPri v::kCCW_FirstDirection));
932 REPORTER_ASSERT(reporter, SkPathPriv::CheapIsFirstDirection(path, SkPathPriv ::kUnknown_FirstDirection)); 932 REPORTER_ASSERT(reporter, SkPathPriv::CheapIsFirstDirection(path, SkPathPriv ::kUnknown_FirstDirection));
933 933
934 static const char* gDegen[] = { 934 static const char* gDegen[] = {
935 "M 10 10", 935 "M 10 10",
936 "M 10 10 M 20 20", 936 "M 10 10 M 20 20",
937 "M 10 10 L 20 20", 937 "M 10 10 L 20 20",
938 "M 10 10 L 10 10 L 10 10", 938 "M 10 10 L 10 10 L 10 10",
939 "M 10 10 Q 10 10 10 10", 939 "M 10 10 Q 10 10 10 10",
940 "M 10 10 C 10 10 10 10 10 10", 940 "M 10 10 C 10 10 10 10 10 10",
941 }; 941 };
942 for (i = 0; i < SK_ARRAY_COUNT(gDegen); ++i) { 942 for (i = 0; i < SK_ARRAY_COUNT(gDegen); ++i) {
943 path.reset(); 943 path.reset();
944 bool valid = SkParsePath::FromSVGString(gDegen[i], &path); 944 bool valid = SkParsePath::FromSVGString(gDegen[i], &path);
945 REPORTER_ASSERT(reporter, valid); 945 REPORTER_ASSERT(reporter, valid);
946 REPORTER_ASSERT(reporter, !SkPathPriv::CheapComputeFirstDirection(path, NULL)); 946 REPORTER_ASSERT(reporter, !SkPathPriv::CheapComputeFirstDirection(path, nullptr));
947 } 947 }
948 948
949 static const char* gCW[] = { 949 static const char* gCW[] = {
950 "M 10 10 L 10 10 Q 20 10 20 20", 950 "M 10 10 L 10 10 Q 20 10 20 20",
951 "M 10 10 C 20 10 20 20 20 20", 951 "M 10 10 C 20 10 20 20 20 20",
952 "M 20 10 Q 20 20 30 20 L 10 20", // test double-back at y-max 952 "M 20 10 Q 20 20 30 20 L 10 20", // test double-back at y-max
953 // rect with top two corners replaced by cubics with identical middle 953 // rect with top two corners replaced by cubics with identical middle
954 // control points 954 // control points
955 "M 10 10 C 10 0 10 0 20 0 L 40 0 C 50 0 50 0 50 10", 955 "M 10 10 C 10 0 10 0 20 0 L 40 0 C 50 0 50 0 50 10",
956 "M 20 10 L 0 10 Q 10 10 20 0", // left, degenerate serif 956 "M 20 10 L 0 10 Q 10 10 20 0", // left, degenerate serif
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
1354 other.swap(p2); 1354 other.swap(p2);
1355 REPORTER_ASSERT(reporter, other.isConvex()); 1355 REPORTER_ASSERT(reporter, other.isConvex());
1356 REPORTER_ASSERT(reporter, other.getBounds() == bounds); 1356 REPORTER_ASSERT(reporter, other.getBounds() == bounds);
1357 } 1357 }
1358 1358
1359 static void setFromString(SkPath* path, const char str[]) { 1359 static void setFromString(SkPath* path, const char str[]) {
1360 bool first = true; 1360 bool first = true;
1361 while (str) { 1361 while (str) {
1362 SkScalar x, y; 1362 SkScalar x, y;
1363 str = SkParse::FindScalar(str, &x); 1363 str = SkParse::FindScalar(str, &x);
1364 if (NULL == str) { 1364 if (nullptr == str) {
1365 break; 1365 break;
1366 } 1366 }
1367 str = SkParse::FindScalar(str, &y); 1367 str = SkParse::FindScalar(str, &y);
1368 SkASSERT(str); 1368 SkASSERT(str);
1369 if (first) { 1369 if (first) {
1370 path->moveTo(x, y); 1370 path->moveTo(x, y);
1371 first = false; 1371 first = false;
1372 } else { 1372 } else {
1373 path->lineTo(x, y); 1373 path->lineTo(x, y);
1374 } 1374 }
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 : SkPath::kUnknown_Convexity); 1500 : SkPath::kUnknown_Convexity);
1501 } 1501 }
1502 1502
1503 } 1503 }
1504 1504
1505 static void test_isLine(skiatest::Reporter* reporter) { 1505 static void test_isLine(skiatest::Reporter* reporter) {
1506 SkPath path; 1506 SkPath path;
1507 SkPoint pts[2]; 1507 SkPoint pts[2];
1508 const SkScalar value = SkIntToScalar(5); 1508 const SkScalar value = SkIntToScalar(5);
1509 1509
1510 REPORTER_ASSERT(reporter, !path.isLine(NULL)); 1510 REPORTER_ASSERT(reporter, !path.isLine(nullptr));
1511 1511
1512 // set some non-zero values 1512 // set some non-zero values
1513 pts[0].set(value, value); 1513 pts[0].set(value, value);
1514 pts[1].set(value, value); 1514 pts[1].set(value, value);
1515 REPORTER_ASSERT(reporter, !path.isLine(pts)); 1515 REPORTER_ASSERT(reporter, !path.isLine(pts));
1516 // check that pts was untouched 1516 // check that pts was untouched
1517 REPORTER_ASSERT(reporter, pts[0].equals(value, value)); 1517 REPORTER_ASSERT(reporter, pts[0].equals(value, value));
1518 REPORTER_ASSERT(reporter, pts[1].equals(value, value)); 1518 REPORTER_ASSERT(reporter, pts[1].equals(value, value));
1519 1519
1520 const SkScalar moveX = SkIntToScalar(1); 1520 const SkScalar moveX = SkIntToScalar(1);
1521 const SkScalar moveY = SkIntToScalar(2); 1521 const SkScalar moveY = SkIntToScalar(2);
1522 REPORTER_ASSERT(reporter, value != moveX && value != moveY); 1522 REPORTER_ASSERT(reporter, value != moveX && value != moveY);
1523 1523
1524 path.moveTo(moveX, moveY); 1524 path.moveTo(moveX, moveY);
1525 REPORTER_ASSERT(reporter, !path.isLine(NULL)); 1525 REPORTER_ASSERT(reporter, !path.isLine(nullptr));
1526 REPORTER_ASSERT(reporter, !path.isLine(pts)); 1526 REPORTER_ASSERT(reporter, !path.isLine(pts));
1527 // check that pts was untouched 1527 // check that pts was untouched
1528 REPORTER_ASSERT(reporter, pts[0].equals(value, value)); 1528 REPORTER_ASSERT(reporter, pts[0].equals(value, value));
1529 REPORTER_ASSERT(reporter, pts[1].equals(value, value)); 1529 REPORTER_ASSERT(reporter, pts[1].equals(value, value));
1530 1530
1531 const SkScalar lineX = SkIntToScalar(2); 1531 const SkScalar lineX = SkIntToScalar(2);
1532 const SkScalar lineY = SkIntToScalar(2); 1532 const SkScalar lineY = SkIntToScalar(2);
1533 REPORTER_ASSERT(reporter, value != lineX && value != lineY); 1533 REPORTER_ASSERT(reporter, value != lineX && value != lineY);
1534 1534
1535 path.lineTo(lineX, lineY); 1535 path.lineTo(lineX, lineY);
1536 REPORTER_ASSERT(reporter, path.isLine(NULL)); 1536 REPORTER_ASSERT(reporter, path.isLine(nullptr));
1537 1537
1538 REPORTER_ASSERT(reporter, !pts[0].equals(moveX, moveY)); 1538 REPORTER_ASSERT(reporter, !pts[0].equals(moveX, moveY));
1539 REPORTER_ASSERT(reporter, !pts[1].equals(lineX, lineY)); 1539 REPORTER_ASSERT(reporter, !pts[1].equals(lineX, lineY));
1540 REPORTER_ASSERT(reporter, path.isLine(pts)); 1540 REPORTER_ASSERT(reporter, path.isLine(pts));
1541 REPORTER_ASSERT(reporter, pts[0].equals(moveX, moveY)); 1541 REPORTER_ASSERT(reporter, pts[0].equals(moveX, moveY));
1542 REPORTER_ASSERT(reporter, pts[1].equals(lineX, lineY)); 1542 REPORTER_ASSERT(reporter, pts[1].equals(lineX, lineY));
1543 1543
1544 path.lineTo(0, 0); // too many points/verbs 1544 path.lineTo(0, 0); // too many points/verbs
1545 REPORTER_ASSERT(reporter, !path.isLine(NULL)); 1545 REPORTER_ASSERT(reporter, !path.isLine(nullptr));
1546 REPORTER_ASSERT(reporter, !path.isLine(pts)); 1546 REPORTER_ASSERT(reporter, !path.isLine(pts));
1547 REPORTER_ASSERT(reporter, pts[0].equals(moveX, moveY)); 1547 REPORTER_ASSERT(reporter, pts[0].equals(moveX, moveY));
1548 REPORTER_ASSERT(reporter, pts[1].equals(lineX, lineY)); 1548 REPORTER_ASSERT(reporter, pts[1].equals(lineX, lineY));
1549 1549
1550 path.reset(); 1550 path.reset();
1551 path.quadTo(1, 1, 2, 2); 1551 path.quadTo(1, 1, 2, 2);
1552 REPORTER_ASSERT(reporter, !path.isLine(NULL)); 1552 REPORTER_ASSERT(reporter, !path.isLine(nullptr));
1553 } 1553 }
1554 1554
1555 static void test_conservativelyContains(skiatest::Reporter* reporter) { 1555 static void test_conservativelyContains(skiatest::Reporter* reporter) {
1556 SkPath path; 1556 SkPath path;
1557 1557
1558 // kBaseRect is used to construct most our test paths: a rect, a circle, and a round-rect. 1558 // kBaseRect is used to construct most our test paths: a rect, a circle, and a round-rect.
1559 static const SkRect kBaseRect = SkRect::MakeWH(SkIntToScalar(100), SkIntToSc alar(100)); 1559 static const SkRect kBaseRect = SkRect::MakeWH(SkIntToScalar(100), SkIntToSc alar(100));
1560 1560
1561 // A circle that bounds kBaseRect (with a significant amount of slop) 1561 // A circle that bounds kBaseRect (with a significant amount of slop)
1562 SkScalar circleR = SkMaxScalar(kBaseRect.width(), kBaseRect.height()); 1562 SkScalar circleR = SkMaxScalar(kBaseRect.width(), kBaseRect.height());
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 REPORTER_ASSERT(reporter, !path.conservativelyContainsRect(SkRect::MakeXYWH( 0, 0, 1, 1))); 1764 REPORTER_ASSERT(reporter, !path.conservativelyContainsRect(SkRect::MakeXYWH( 0, 0, 1, 1)));
1765 } 1765 }
1766 1766
1767 static void test_isRect_open_close(skiatest::Reporter* reporter) { 1767 static void test_isRect_open_close(skiatest::Reporter* reporter) {
1768 SkPath path; 1768 SkPath path;
1769 bool isClosed; 1769 bool isClosed;
1770 1770
1771 path.moveTo(0, 0); path.lineTo(1, 0); path.lineTo(1, 1); path.lineTo(0, 1); 1771 path.moveTo(0, 0); path.lineTo(1, 0); path.lineTo(1, 1); path.lineTo(0, 1);
1772 path.close(); 1772 path.close();
1773 1773
1774 REPORTER_ASSERT(reporter, path.isRect(NULL, &isClosed, NULL)); 1774 REPORTER_ASSERT(reporter, path.isRect(nullptr, &isClosed, nullptr));
1775 REPORTER_ASSERT(reporter, isClosed); 1775 REPORTER_ASSERT(reporter, isClosed);
1776 } 1776 }
1777 1777
1778 // Simple isRect test is inline TestPath, below. 1778 // Simple isRect test is inline TestPath, below.
1779 // test_isRect provides more extensive testing. 1779 // test_isRect provides more extensive testing.
1780 static void test_isRect(skiatest::Reporter* reporter) { 1780 static void test_isRect(skiatest::Reporter* reporter) {
1781 test_isRect_open_close(reporter); 1781 test_isRect_open_close(reporter);
1782 1782
1783 // passing tests (all moveTo / lineTo... 1783 // passing tests (all moveTo / lineTo...
1784 SkPoint r1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; 1784 SkPoint r1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}};
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1868 int index; 1868 int index;
1869 for (size_t testIndex = 0; testIndex < testCount; ++testIndex) { 1869 for (size_t testIndex = 0; testIndex < testCount; ++testIndex) {
1870 SkPath path; 1870 SkPath path;
1871 path.moveTo(tests[testIndex].fPoints[0].fX, tests[testIndex].fPoints[0]. fY); 1871 path.moveTo(tests[testIndex].fPoints[0].fX, tests[testIndex].fPoints[0]. fY);
1872 for (index = 1; index < tests[testIndex].fPointCount; ++index) { 1872 for (index = 1; index < tests[testIndex].fPointCount; ++index) {
1873 path.lineTo(tests[testIndex].fPoints[index].fX, tests[testIndex].fPo ints[index].fY); 1873 path.lineTo(tests[testIndex].fPoints[index].fX, tests[testIndex].fPo ints[index].fY);
1874 } 1874 }
1875 if (tests[testIndex].fClose) { 1875 if (tests[testIndex].fClose) {
1876 path.close(); 1876 path.close();
1877 } 1877 }
1878 REPORTER_ASSERT(reporter, tests[testIndex].fIsRect == path.isRect(NULL)) ; 1878 REPORTER_ASSERT(reporter, tests[testIndex].fIsRect == path.isRect(nullpt r));
1879 1879
1880 if (tests[testIndex].fIsRect) { 1880 if (tests[testIndex].fIsRect) {
1881 SkRect computed, expected; 1881 SkRect computed, expected;
1882 bool isClosed; 1882 bool isClosed;
1883 SkPath::Direction direction; 1883 SkPath::Direction direction;
1884 SkPathPriv::FirstDirection cheapDirection; 1884 SkPathPriv::FirstDirection cheapDirection;
1885 expected.set(tests[testIndex].fPoints, tests[testIndex].fPointCount) ; 1885 expected.set(tests[testIndex].fPoints, tests[testIndex].fPointCount) ;
1886 REPORTER_ASSERT(reporter, SkPathPriv::CheapComputeFirstDirection(pat h, &cheapDirection)); 1886 REPORTER_ASSERT(reporter, SkPathPriv::CheapComputeFirstDirection(pat h, &cheapDirection));
1887 REPORTER_ASSERT(reporter, path.isRect(&computed, &isClosed, &directi on)); 1887 REPORTER_ASSERT(reporter, path.isRect(&computed, &isClosed, &directi on));
1888 REPORTER_ASSERT(reporter, expected == computed); 1888 REPORTER_ASSERT(reporter, expected == computed);
(...skipping 13 matching lines...) Expand all
1902 } 1902 }
1903 1903
1904 // fail, close then line 1904 // fail, close then line
1905 SkPath path1; 1905 SkPath path1;
1906 path1.moveTo(r1[0].fX, r1[0].fY); 1906 path1.moveTo(r1[0].fX, r1[0].fY);
1907 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 1907 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
1908 path1.lineTo(r1[index].fX, r1[index].fY); 1908 path1.lineTo(r1[index].fX, r1[index].fY);
1909 } 1909 }
1910 path1.close(); 1910 path1.close();
1911 path1.lineTo(1, 0); 1911 path1.lineTo(1, 0);
1912 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); 1912 REPORTER_ASSERT(reporter, !path1.isRect(nullptr));
1913 1913
1914 // fail, move in the middle 1914 // fail, move in the middle
1915 path1.reset(); 1915 path1.reset();
1916 path1.moveTo(r1[0].fX, r1[0].fY); 1916 path1.moveTo(r1[0].fX, r1[0].fY);
1917 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 1917 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
1918 if (index == 2) { 1918 if (index == 2) {
1919 path1.moveTo(1, .5f); 1919 path1.moveTo(1, .5f);
1920 } 1920 }
1921 path1.lineTo(r1[index].fX, r1[index].fY); 1921 path1.lineTo(r1[index].fX, r1[index].fY);
1922 } 1922 }
1923 path1.close(); 1923 path1.close();
1924 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); 1924 REPORTER_ASSERT(reporter, !path1.isRect(nullptr));
1925 1925
1926 // fail, move on the edge 1926 // fail, move on the edge
1927 path1.reset(); 1927 path1.reset();
1928 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 1928 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
1929 path1.moveTo(r1[index - 1].fX, r1[index - 1].fY); 1929 path1.moveTo(r1[index - 1].fX, r1[index - 1].fY);
1930 path1.lineTo(r1[index].fX, r1[index].fY); 1930 path1.lineTo(r1[index].fX, r1[index].fY);
1931 } 1931 }
1932 path1.close(); 1932 path1.close();
1933 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); 1933 REPORTER_ASSERT(reporter, !path1.isRect(nullptr));
1934 1934
1935 // fail, quad 1935 // fail, quad
1936 path1.reset(); 1936 path1.reset();
1937 path1.moveTo(r1[0].fX, r1[0].fY); 1937 path1.moveTo(r1[0].fX, r1[0].fY);
1938 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 1938 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
1939 if (index == 2) { 1939 if (index == 2) {
1940 path1.quadTo(1, .5f, 1, .5f); 1940 path1.quadTo(1, .5f, 1, .5f);
1941 } 1941 }
1942 path1.lineTo(r1[index].fX, r1[index].fY); 1942 path1.lineTo(r1[index].fX, r1[index].fY);
1943 } 1943 }
1944 path1.close(); 1944 path1.close();
1945 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); 1945 REPORTER_ASSERT(reporter, !path1.isRect(nullptr));
1946 1946
1947 // fail, cubic 1947 // fail, cubic
1948 path1.reset(); 1948 path1.reset();
1949 path1.moveTo(r1[0].fX, r1[0].fY); 1949 path1.moveTo(r1[0].fX, r1[0].fY);
1950 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 1950 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
1951 if (index == 2) { 1951 if (index == 2) {
1952 path1.cubicTo(1, .5f, 1, .5f, 1, .5f); 1952 path1.cubicTo(1, .5f, 1, .5f, 1, .5f);
1953 } 1953 }
1954 path1.lineTo(r1[index].fX, r1[index].fY); 1954 path1.lineTo(r1[index].fX, r1[index].fY);
1955 } 1955 }
1956 path1.close(); 1956 path1.close();
1957 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); 1957 REPORTER_ASSERT(reporter, !path1.isRect(nullptr));
1958 } 1958 }
1959 1959
1960 static void test_isNestedFillRects(skiatest::Reporter* reporter) { 1960 static void test_isNestedFillRects(skiatest::Reporter* reporter) {
1961 // passing tests (all moveTo / lineTo... 1961 // passing tests (all moveTo / lineTo...
1962 SkPoint r1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; // CW 1962 SkPoint r1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; // CW
1963 SkPoint r2[] = {{1, 0}, {1, 1}, {0, 1}, {0, 0}}; 1963 SkPoint r2[] = {{1, 0}, {1, 1}, {0, 1}, {0, 0}};
1964 SkPoint r3[] = {{1, 1}, {0, 1}, {0, 0}, {1, 0}}; 1964 SkPoint r3[] = {{1, 1}, {0, 1}, {0, 0}, {1, 0}};
1965 SkPoint r4[] = {{0, 1}, {0, 0}, {1, 0}, {1, 1}}; 1965 SkPoint r4[] = {{0, 1}, {0, 0}, {1, 0}, {1, 1}};
1966 SkPoint r5[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}}; // CCW 1966 SkPoint r5[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}}; // CCW
1967 SkPoint r6[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; 1967 SkPoint r6[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}};
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2035 for (index = 1; index < tests[testIndex].fPointCount; ++index) { 2035 for (index = 1; index < tests[testIndex].fPointCount; ++index) {
2036 path.lineTo(tests[testIndex].fPoints[index].fX, tests[testIndex] .fPoints[index].fY); 2036 path.lineTo(tests[testIndex].fPoints[index].fX, tests[testIndex] .fPoints[index].fY);
2037 } 2037 }
2038 if (tests[testIndex].fClose) { 2038 if (tests[testIndex].fClose) {
2039 path.close(); 2039 path.close();
2040 } 2040 }
2041 if (!rectFirst) { 2041 if (!rectFirst) {
2042 path.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); 2042 path.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction);
2043 } 2043 }
2044 REPORTER_ASSERT(reporter, 2044 REPORTER_ASSERT(reporter,
2045 tests[testIndex].fIsNestedRect == path.isNestedFillRects(NUL L)); 2045 tests[testIndex].fIsNestedRect == path.isNestedFillRects(nul lptr));
2046 if (tests[testIndex].fIsNestedRect) { 2046 if (tests[testIndex].fIsNestedRect) {
2047 SkRect expected[2], computed[2]; 2047 SkRect expected[2], computed[2];
2048 SkPathPriv::FirstDirection expectedDirs[2]; 2048 SkPathPriv::FirstDirection expectedDirs[2];
2049 SkPath::Direction computedDirs[2]; 2049 SkPath::Direction computedDirs[2];
2050 SkRect testBounds; 2050 SkRect testBounds;
2051 testBounds.set(tests[testIndex].fPoints, tests[testIndex].fPoint Count); 2051 testBounds.set(tests[testIndex].fPoints, tests[testIndex].fPoint Count);
2052 expected[0] = SkRect::MakeLTRB(-1, -1, 2, 2); 2052 expected[0] = SkRect::MakeLTRB(-1, -1, 2, 2);
2053 expected[1] = testBounds; 2053 expected[1] = testBounds;
2054 if (rectFirst) { 2054 if (rectFirst) {
2055 expectedDirs[0] = SkPathPriv::kCW_FirstDirection; 2055 expectedDirs[0] = SkPathPriv::kCW_FirstDirection;
(...skipping 16 matching lines...) Expand all
2072 } 2072 }
2073 path1.moveTo(r1[0].fX, r1[0].fY); 2073 path1.moveTo(r1[0].fX, r1[0].fY);
2074 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 2074 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
2075 path1.lineTo(r1[index].fX, r1[index].fY); 2075 path1.lineTo(r1[index].fX, r1[index].fY);
2076 } 2076 }
2077 path1.close(); 2077 path1.close();
2078 path1.lineTo(1, 0); 2078 path1.lineTo(1, 0);
2079 if (!rectFirst) { 2079 if (!rectFirst) {
2080 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); 2080 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction);
2081 } 2081 }
2082 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(NULL)); 2082 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(nullptr));
2083 2083
2084 // fail, move in the middle 2084 // fail, move in the middle
2085 path1.reset(); 2085 path1.reset();
2086 if (rectFirst) { 2086 if (rectFirst) {
2087 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); 2087 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction);
2088 } 2088 }
2089 path1.moveTo(r1[0].fX, r1[0].fY); 2089 path1.moveTo(r1[0].fX, r1[0].fY);
2090 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 2090 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
2091 if (index == 2) { 2091 if (index == 2) {
2092 path1.moveTo(1, .5f); 2092 path1.moveTo(1, .5f);
2093 } 2093 }
2094 path1.lineTo(r1[index].fX, r1[index].fY); 2094 path1.lineTo(r1[index].fX, r1[index].fY);
2095 } 2095 }
2096 path1.close(); 2096 path1.close();
2097 if (!rectFirst) { 2097 if (!rectFirst) {
2098 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); 2098 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction);
2099 } 2099 }
2100 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(NULL)); 2100 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(nullptr));
2101 2101
2102 // fail, move on the edge 2102 // fail, move on the edge
2103 path1.reset(); 2103 path1.reset();
2104 if (rectFirst) { 2104 if (rectFirst) {
2105 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); 2105 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction);
2106 } 2106 }
2107 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 2107 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
2108 path1.moveTo(r1[index - 1].fX, r1[index - 1].fY); 2108 path1.moveTo(r1[index - 1].fX, r1[index - 1].fY);
2109 path1.lineTo(r1[index].fX, r1[index].fY); 2109 path1.lineTo(r1[index].fX, r1[index].fY);
2110 } 2110 }
2111 path1.close(); 2111 path1.close();
2112 if (!rectFirst) { 2112 if (!rectFirst) {
2113 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); 2113 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction);
2114 } 2114 }
2115 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(NULL)); 2115 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(nullptr));
2116 2116
2117 // fail, quad 2117 // fail, quad
2118 path1.reset(); 2118 path1.reset();
2119 if (rectFirst) { 2119 if (rectFirst) {
2120 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); 2120 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction);
2121 } 2121 }
2122 path1.moveTo(r1[0].fX, r1[0].fY); 2122 path1.moveTo(r1[0].fX, r1[0].fY);
2123 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 2123 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
2124 if (index == 2) { 2124 if (index == 2) {
2125 path1.quadTo(1, .5f, 1, .5f); 2125 path1.quadTo(1, .5f, 1, .5f);
2126 } 2126 }
2127 path1.lineTo(r1[index].fX, r1[index].fY); 2127 path1.lineTo(r1[index].fX, r1[index].fY);
2128 } 2128 }
2129 path1.close(); 2129 path1.close();
2130 if (!rectFirst) { 2130 if (!rectFirst) {
2131 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); 2131 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction);
2132 } 2132 }
2133 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(NULL)); 2133 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(nullptr));
2134 2134
2135 // fail, cubic 2135 // fail, cubic
2136 path1.reset(); 2136 path1.reset();
2137 if (rectFirst) { 2137 if (rectFirst) {
2138 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); 2138 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction);
2139 } 2139 }
2140 path1.moveTo(r1[0].fX, r1[0].fY); 2140 path1.moveTo(r1[0].fX, r1[0].fY);
2141 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) { 2141 for (index = 1; index < SkToInt(SK_ARRAY_COUNT(r1)); ++index) {
2142 if (index == 2) { 2142 if (index == 2) {
2143 path1.cubicTo(1, .5f, 1, .5f, 1, .5f); 2143 path1.cubicTo(1, .5f, 1, .5f, 1, .5f);
2144 } 2144 }
2145 path1.lineTo(r1[index].fX, r1[index].fY); 2145 path1.lineTo(r1[index].fX, r1[index].fY);
2146 } 2146 }
2147 path1.close(); 2147 path1.close();
2148 if (!rectFirst) { 2148 if (!rectFirst) {
2149 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); 2149 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction);
2150 } 2150 }
2151 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(NULL)); 2151 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(nullptr));
2152 2152
2153 // fail, not nested 2153 // fail, not nested
2154 path1.reset(); 2154 path1.reset();
2155 path1.addRect(1, 1, 3, 3, SkPath::kCW_Direction); 2155 path1.addRect(1, 1, 3, 3, SkPath::kCW_Direction);
2156 path1.addRect(2, 2, 4, 4, SkPath::kCW_Direction); 2156 path1.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
2157 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(NULL)); 2157 REPORTER_ASSERT(reporter, !path1.isNestedFillRects(nullptr));
2158 } 2158 }
2159 2159
2160 // pass, constructed explicitly from manually closed rects specified as mov es/lines. 2160 // pass, constructed explicitly from manually closed rects specified as mov es/lines.
2161 SkPath path; 2161 SkPath path;
2162 path.moveTo(0, 0); 2162 path.moveTo(0, 0);
2163 path.lineTo(10, 0); 2163 path.lineTo(10, 0);
2164 path.lineTo(10, 10); 2164 path.lineTo(10, 10);
2165 path.lineTo(0, 10); 2165 path.lineTo(0, 10);
2166 path.lineTo(0, 0); 2166 path.lineTo(0, 0);
2167 path.moveTo(1, 1); 2167 path.moveTo(1, 1);
2168 path.lineTo(9, 1); 2168 path.lineTo(9, 1);
2169 path.lineTo(9, 9); 2169 path.lineTo(9, 9);
2170 path.lineTo(1, 9); 2170 path.lineTo(1, 9);
2171 path.lineTo(1, 1); 2171 path.lineTo(1, 1);
2172 REPORTER_ASSERT(reporter, path.isNestedFillRects(NULL)); 2172 REPORTER_ASSERT(reporter, path.isNestedFillRects(nullptr));
2173 2173
2174 // pass, stroke rect 2174 // pass, stroke rect
2175 SkPath src, dst; 2175 SkPath src, dst;
2176 src.addRect(1, 1, 7, 7, SkPath::kCW_Direction); 2176 src.addRect(1, 1, 7, 7, SkPath::kCW_Direction);
2177 SkPaint strokePaint; 2177 SkPaint strokePaint;
2178 strokePaint.setStyle(SkPaint::kStroke_Style); 2178 strokePaint.setStyle(SkPaint::kStroke_Style);
2179 strokePaint.setStrokeWidth(2); 2179 strokePaint.setStrokeWidth(2);
2180 strokePaint.getFillPath(src, &dst); 2180 strokePaint.getFillPath(src, &dst);
2181 REPORTER_ASSERT(reporter, dst.isNestedFillRects(NULL)); 2181 REPORTER_ASSERT(reporter, dst.isNestedFillRects(nullptr));
2182 } 2182 }
2183 2183
2184 static void write_and_read_back(skiatest::Reporter* reporter, 2184 static void write_and_read_back(skiatest::Reporter* reporter,
2185 const SkPath& p) { 2185 const SkPath& p) {
2186 SkWriter32 writer; 2186 SkWriter32 writer;
2187 writer.writePath(p); 2187 writer.writePath(p);
2188 size_t size = writer.bytesWritten(); 2188 size_t size = writer.bytesWritten();
2189 SkAutoMalloc storage(size); 2189 SkAutoMalloc storage(size);
2190 writer.flatten(storage.get()); 2190 writer.flatten(storage.get());
2191 SkReader32 reader(storage.get(), size); 2191 SkReader32 reader(storage.get(), size);
2192 2192
2193 SkPath readBack; 2193 SkPath readBack;
2194 REPORTER_ASSERT(reporter, readBack != p); 2194 REPORTER_ASSERT(reporter, readBack != p);
2195 reader.readPath(&readBack); 2195 reader.readPath(&readBack);
2196 REPORTER_ASSERT(reporter, readBack == p); 2196 REPORTER_ASSERT(reporter, readBack == p);
2197 2197
2198 REPORTER_ASSERT(reporter, readBack.getConvexityOrUnknown() == 2198 REPORTER_ASSERT(reporter, readBack.getConvexityOrUnknown() ==
2199 p.getConvexityOrUnknown()); 2199 p.getConvexityOrUnknown());
2200 2200
2201 REPORTER_ASSERT(reporter, readBack.isOval(NULL) == p.isOval(NULL)); 2201 REPORTER_ASSERT(reporter, readBack.isOval(nullptr) == p.isOval(nullptr));
2202 2202
2203 const SkRect& origBounds = p.getBounds(); 2203 const SkRect& origBounds = p.getBounds();
2204 const SkRect& readBackBounds = readBack.getBounds(); 2204 const SkRect& readBackBounds = readBack.getBounds();
2205 2205
2206 REPORTER_ASSERT(reporter, origBounds == readBackBounds); 2206 REPORTER_ASSERT(reporter, origBounds == readBackBounds);
2207 } 2207 }
2208 2208
2209 static void test_flattening(skiatest::Reporter* reporter) { 2209 static void test_flattening(skiatest::Reporter* reporter) {
2210 SkPath p; 2210 SkPath p;
2211 2211
2212 static const SkPoint pts[] = { 2212 static const SkPoint pts[] = {
2213 { 0, 0 }, 2213 { 0, 0 },
2214 { SkIntToScalar(10), SkIntToScalar(10) }, 2214 { SkIntToScalar(10), SkIntToScalar(10) },
2215 { SkIntToScalar(20), SkIntToScalar(10) }, { SkIntToScalar(20), 0 }, 2215 { SkIntToScalar(20), SkIntToScalar(10) }, { SkIntToScalar(20), 0 },
2216 { 0, 0 }, { 0, SkIntToScalar(10) }, { SkIntToScalar(1), SkIntToScalar(10 ) } 2216 { 0, 0 }, { 0, SkIntToScalar(10) }, { SkIntToScalar(1), SkIntToScalar(10 ) }
2217 }; 2217 };
2218 p.moveTo(pts[0]); 2218 p.moveTo(pts[0]);
2219 p.lineTo(pts[1]); 2219 p.lineTo(pts[1]);
2220 p.quadTo(pts[2], pts[3]); 2220 p.quadTo(pts[2], pts[3]);
2221 p.cubicTo(pts[4], pts[5], pts[6]); 2221 p.cubicTo(pts[4], pts[5], pts[6]);
2222 2222
2223 write_and_read_back(reporter, p); 2223 write_and_read_back(reporter, p);
2224 2224
2225 // create a buffer that should be much larger than the path so we don't 2225 // create a buffer that should be much larger than the path so we don't
2226 // kill our stack if writer goes too far. 2226 // kill our stack if writer goes too far.
2227 char buffer[1024]; 2227 char buffer[1024];
2228 size_t size1 = p.writeToMemory(NULL); 2228 size_t size1 = p.writeToMemory(nullptr);
2229 size_t size2 = p.writeToMemory(buffer); 2229 size_t size2 = p.writeToMemory(buffer);
2230 REPORTER_ASSERT(reporter, size1 == size2); 2230 REPORTER_ASSERT(reporter, size1 == size2);
2231 2231
2232 SkPath p2; 2232 SkPath p2;
2233 size_t size3 = p2.readFromMemory(buffer, 1024); 2233 size_t size3 = p2.readFromMemory(buffer, 1024);
2234 REPORTER_ASSERT(reporter, size1 == size3); 2234 REPORTER_ASSERT(reporter, size1 == size3);
2235 REPORTER_ASSERT(reporter, p == p2); 2235 REPORTER_ASSERT(reporter, p == p2);
2236 2236
2237 size3 = p2.readFromMemory(buffer, 0); 2237 size3 = p2.readFromMemory(buffer, 0);
2238 REPORTER_ASSERT(reporter, !size3); 2238 REPORTER_ASSERT(reporter, !size3);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
2308 { 2308 {
2309 SkMatrix matrix; 2309 SkMatrix matrix;
2310 matrix.reset(); 2310 matrix.reset();
2311 matrix.setPerspX(4); 2311 matrix.setPerspX(4);
2312 2312
2313 SkPath p1; 2313 SkPath p1;
2314 p1.moveTo(SkPoint::Make(0, 0)); 2314 p1.moveTo(SkPoint::Make(0, 0));
2315 2315
2316 p.transform(matrix, &p1); 2316 p.transform(matrix, &p1);
2317 REPORTER_ASSERT(reporter, matrix.invert(&matrix)); 2317 REPORTER_ASSERT(reporter, matrix.invert(&matrix));
2318 p1.transform(matrix, NULL); 2318 p1.transform(matrix, nullptr);
2319 SkRect pBounds = p.getBounds(); 2319 SkRect pBounds = p.getBounds();
2320 SkRect p1Bounds = p1.getBounds(); 2320 SkRect p1Bounds = p1.getBounds();
2321 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(pBounds.fLeft, p1Bounds.fL eft)); 2321 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(pBounds.fLeft, p1Bounds.fL eft));
2322 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(pBounds.fTop, p1Bounds.fTo p)); 2322 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(pBounds.fTop, p1Bounds.fTo p));
2323 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(pBounds.fRight, p1Bounds.f Right)); 2323 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(pBounds.fRight, p1Bounds.f Right));
2324 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(pBounds.fBottom, p1Bounds. fBottom)); 2324 REPORTER_ASSERT(reporter, SkScalarNearlyEqual(pBounds.fBottom, p1Bounds. fBottom));
2325 } 2325 }
2326 2326
2327 p.reset(); 2327 p.reset();
2328 p.addCircle(0, 0, 1, SkPath::kCW_Direction); 2328 p.addCircle(0, 0, 1, SkPath::kCW_Direction);
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
3082 } 3082 }
3083 3083
3084 static void test_oval(skiatest::Reporter* reporter) { 3084 static void test_oval(skiatest::Reporter* reporter) {
3085 SkRect rect; 3085 SkRect rect;
3086 SkMatrix m; 3086 SkMatrix m;
3087 SkPath path; 3087 SkPath path;
3088 3088
3089 rect = SkRect::MakeWH(SkIntToScalar(30), SkIntToScalar(50)); 3089 rect = SkRect::MakeWH(SkIntToScalar(30), SkIntToScalar(50));
3090 path.addOval(rect); 3090 path.addOval(rect);
3091 3091
3092 REPORTER_ASSERT(reporter, path.isOval(NULL)); 3092 REPORTER_ASSERT(reporter, path.isOval(nullptr));
3093 3093
3094 m.setRotate(SkIntToScalar(90)); 3094 m.setRotate(SkIntToScalar(90));
3095 SkPath tmp; 3095 SkPath tmp;
3096 path.transform(m, &tmp); 3096 path.transform(m, &tmp);
3097 // an oval rotated 90 degrees is still an oval. 3097 // an oval rotated 90 degrees is still an oval.
3098 REPORTER_ASSERT(reporter, tmp.isOval(NULL)); 3098 REPORTER_ASSERT(reporter, tmp.isOval(nullptr));
3099 3099
3100 m.reset(); 3100 m.reset();
3101 m.setRotate(SkIntToScalar(30)); 3101 m.setRotate(SkIntToScalar(30));
3102 tmp.reset(); 3102 tmp.reset();
3103 path.transform(m, &tmp); 3103 path.transform(m, &tmp);
3104 // an oval rotated 30 degrees is not an oval anymore. 3104 // an oval rotated 30 degrees is not an oval anymore.
3105 REPORTER_ASSERT(reporter, !tmp.isOval(NULL)); 3105 REPORTER_ASSERT(reporter, !tmp.isOval(nullptr));
3106 3106
3107 // since empty path being transformed. 3107 // since empty path being transformed.
3108 path.reset(); 3108 path.reset();
3109 tmp.reset(); 3109 tmp.reset();
3110 m.reset(); 3110 m.reset();
3111 path.transform(m, &tmp); 3111 path.transform(m, &tmp);
3112 REPORTER_ASSERT(reporter, !tmp.isOval(NULL)); 3112 REPORTER_ASSERT(reporter, !tmp.isOval(nullptr));
3113 3113
3114 // empty path is not an oval 3114 // empty path is not an oval
3115 tmp.reset(); 3115 tmp.reset();
3116 REPORTER_ASSERT(reporter, !tmp.isOval(NULL)); 3116 REPORTER_ASSERT(reporter, !tmp.isOval(nullptr));
3117 3117
3118 // only has moveTo()s 3118 // only has moveTo()s
3119 tmp.reset(); 3119 tmp.reset();
3120 tmp.moveTo(0, 0); 3120 tmp.moveTo(0, 0);
3121 tmp.moveTo(SkIntToScalar(10), SkIntToScalar(10)); 3121 tmp.moveTo(SkIntToScalar(10), SkIntToScalar(10));
3122 REPORTER_ASSERT(reporter, !tmp.isOval(NULL)); 3122 REPORTER_ASSERT(reporter, !tmp.isOval(nullptr));
3123 3123
3124 // mimic WebKit's calling convention, 3124 // mimic WebKit's calling convention,
3125 // call moveTo() first and then call addOval() 3125 // call moveTo() first and then call addOval()
3126 path.reset(); 3126 path.reset();
3127 path.moveTo(0, 0); 3127 path.moveTo(0, 0);
3128 path.addOval(rect); 3128 path.addOval(rect);
3129 REPORTER_ASSERT(reporter, path.isOval(NULL)); 3129 REPORTER_ASSERT(reporter, path.isOval(nullptr));
3130 3130
3131 // copy path 3131 // copy path
3132 path.reset(); 3132 path.reset();
3133 tmp.reset(); 3133 tmp.reset();
3134 tmp.addOval(rect); 3134 tmp.addOval(rect);
3135 path = tmp; 3135 path = tmp;
3136 REPORTER_ASSERT(reporter, path.isOval(NULL)); 3136 REPORTER_ASSERT(reporter, path.isOval(nullptr));
3137 } 3137 }
3138 3138
3139 static void test_empty(skiatest::Reporter* reporter, const SkPath& p) { 3139 static void test_empty(skiatest::Reporter* reporter, const SkPath& p) {
3140 SkPath empty; 3140 SkPath empty;
3141 3141
3142 REPORTER_ASSERT(reporter, p.isEmpty()); 3142 REPORTER_ASSERT(reporter, p.isEmpty());
3143 REPORTER_ASSERT(reporter, 0 == p.countPoints()); 3143 REPORTER_ASSERT(reporter, 0 == p.countPoints());
3144 REPORTER_ASSERT(reporter, 0 == p.countVerbs()); 3144 REPORTER_ASSERT(reporter, 0 == p.countVerbs());
3145 REPORTER_ASSERT(reporter, 0 == p.getSegmentMasks()); 3145 REPORTER_ASSERT(reporter, 0 == p.getSegmentMasks());
3146 REPORTER_ASSERT(reporter, p.isConvex()); 3146 REPORTER_ASSERT(reporter, p.isConvex());
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
3197 p.addRoundRect(r, 0, 0); 3197 p.addRoundRect(r, 0, 0);
3198 SkRect returnedRect; 3198 SkRect returnedRect;
3199 REPORTER_ASSERT(reporter, p.isRect(&returnedRect)); 3199 REPORTER_ASSERT(reporter, p.isRect(&returnedRect));
3200 REPORTER_ASSERT(reporter, returnedRect == r); 3200 REPORTER_ASSERT(reporter, returnedRect == r);
3201 test_rrect_is_convex(reporter, &p, SkPath::kCW_Direction); 3201 test_rrect_is_convex(reporter, &p, SkPath::kCW_Direction);
3202 SkVector zeroRadii[] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}}; 3202 SkVector zeroRadii[] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};
3203 rr.setRectRadii(r, zeroRadii); 3203 rr.setRectRadii(r, zeroRadii);
3204 p.addRRect(rr); 3204 p.addRRect(rr);
3205 bool closed; 3205 bool closed;
3206 SkPath::Direction dir; 3206 SkPath::Direction dir;
3207 REPORTER_ASSERT(reporter, p.isRect(NULL, &closed, &dir)); 3207 REPORTER_ASSERT(reporter, p.isRect(nullptr, &closed, &dir));
3208 REPORTER_ASSERT(reporter, closed); 3208 REPORTER_ASSERT(reporter, closed);
3209 REPORTER_ASSERT(reporter, SkPath::kCW_Direction == dir); 3209 REPORTER_ASSERT(reporter, SkPath::kCW_Direction == dir);
3210 test_rrect_is_convex(reporter, &p, SkPath::kCW_Direction); 3210 test_rrect_is_convex(reporter, &p, SkPath::kCW_Direction);
3211 p.addRRect(rr, SkPath::kCW_Direction); 3211 p.addRRect(rr, SkPath::kCW_Direction);
3212 p.addRRect(rr, SkPath::kCW_Direction); 3212 p.addRRect(rr, SkPath::kCW_Direction);
3213 REPORTER_ASSERT(reporter, !p.isConvex()); 3213 REPORTER_ASSERT(reporter, !p.isConvex());
3214 p.reset(); 3214 p.reset();
3215 p.addRRect(rr, SkPath::kCCW_Direction); 3215 p.addRRect(rr, SkPath::kCCW_Direction);
3216 p.addRRect(rr, SkPath::kCCW_Direction); 3216 p.addRRect(rr, SkPath::kCCW_Direction);
3217 REPORTER_ASSERT(reporter, !p.isConvex()); 3217 REPORTER_ASSERT(reporter, !p.isConvex());
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
3487 p.conicTo(1, 2, 3, 4, SK_ScalarInfinity); 3487 p.conicTo(1, 2, 3, 4, SK_ScalarInfinity);
3488 check_path_is_line_pair_and_reset(reporter, &p, 1, 2, 3, 4); 3488 check_path_is_line_pair_and_reset(reporter, &p, 1, 2, 3, 4);
3489 p.conicTo(1, 2, 3, 4, 1); 3489 p.conicTo(1, 2, 3, 4, 1);
3490 check_path_is_quad_and_reset(reporter, &p, 1, 2, 3, 4); 3490 check_path_is_quad_and_reset(reporter, &p, 1, 2, 3, 4);
3491 } 3491 }
3492 3492
3493 static void test_get_point(skiatest::Reporter* reporter) { 3493 static void test_get_point(skiatest::Reporter* reporter) {
3494 SkPath p; 3494 SkPath p;
3495 SkPoint pt = p.getPoint(0); 3495 SkPoint pt = p.getPoint(0);
3496 REPORTER_ASSERT(reporter, pt == SkPoint::Make(0, 0)); 3496 REPORTER_ASSERT(reporter, pt == SkPoint::Make(0, 0));
3497 REPORTER_ASSERT(reporter, !p.getLastPt(NULL)); 3497 REPORTER_ASSERT(reporter, !p.getLastPt(nullptr));
3498 REPORTER_ASSERT(reporter, !p.getLastPt(&pt) && pt == SkPoint::Make(0, 0)); 3498 REPORTER_ASSERT(reporter, !p.getLastPt(&pt) && pt == SkPoint::Make(0, 0));
3499 p.setLastPt(10, 10); 3499 p.setLastPt(10, 10);
3500 pt = p.getPoint(0); 3500 pt = p.getPoint(0);
3501 REPORTER_ASSERT(reporter, pt == SkPoint::Make(10, 10)); 3501 REPORTER_ASSERT(reporter, pt == SkPoint::Make(10, 10));
3502 REPORTER_ASSERT(reporter, p.getLastPt(NULL)); 3502 REPORTER_ASSERT(reporter, p.getLastPt(nullptr));
3503 p.rMoveTo(10, 10); 3503 p.rMoveTo(10, 10);
3504 REPORTER_ASSERT(reporter, p.getLastPt(&pt) && pt == SkPoint::Make(20, 20)); 3504 REPORTER_ASSERT(reporter, p.getLastPt(&pt) && pt == SkPoint::Make(20, 20));
3505 } 3505 }
3506 3506
3507 static void test_contains(skiatest::Reporter* reporter) { 3507 static void test_contains(skiatest::Reporter* reporter) {
3508 SkPath p; 3508 SkPath p;
3509 p.setFillType(SkPath::kInverseWinding_FillType); 3509 p.setFillType(SkPath::kInverseWinding_FillType);
3510 REPORTER_ASSERT(reporter, p.contains(0, 0)); 3510 REPORTER_ASSERT(reporter, p.contains(0, 0));
3511 p.setFillType(SkPath::kWinding_FillType); 3511 p.setFillType(SkPath::kWinding_FillType);
3512 REPORTER_ASSERT(reporter, !p.contains(0, 0)); 3512 REPORTER_ASSERT(reporter, !p.contains(0, 0));
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
3608 REPORTER_ASSERT(reporter, kRepeatCnt == pathRef->countVerbs()); 3608 REPORTER_ASSERT(reporter, kRepeatCnt == pathRef->countVerbs());
3609 REPORTER_ASSERT(reporter, 2*kRepeatCnt == pathRef->countPoints()); 3609 REPORTER_ASSERT(reporter, 2*kRepeatCnt == pathRef->countPoints());
3610 REPORTER_ASSERT(reporter, SkPath::kQuad_SegmentMask == pathRef->getS egmentMasks()); 3610 REPORTER_ASSERT(reporter, SkPath::kQuad_SegmentMask == pathRef->getS egmentMasks());
3611 for (int i = 0; i < kRepeatCnt; ++i) { 3611 for (int i = 0; i < kRepeatCnt; ++i) {
3612 REPORTER_ASSERT(reporter, SkPath::kQuad_Verb == pathRef->atVerb( i)); 3612 REPORTER_ASSERT(reporter, SkPath::kQuad_Verb == pathRef->atVerb( i));
3613 } 3613 }
3614 ed.resetToSize(0, 0, 0); 3614 ed.resetToSize(0, 0, 0);
3615 } 3615 }
3616 3616
3617 { 3617 {
3618 SkScalar* weights = NULL; 3618 SkScalar* weights = nullptr;
3619 ed.growForRepeatedVerb(SkPath::kConic_Verb, kRepeatCnt, &weights); 3619 ed.growForRepeatedVerb(SkPath::kConic_Verb, kRepeatCnt, &weights);
3620 REPORTER_ASSERT(reporter, kRepeatCnt == pathRef->countVerbs()); 3620 REPORTER_ASSERT(reporter, kRepeatCnt == pathRef->countVerbs());
3621 REPORTER_ASSERT(reporter, 2*kRepeatCnt == pathRef->countPoints()); 3621 REPORTER_ASSERT(reporter, 2*kRepeatCnt == pathRef->countPoints());
3622 REPORTER_ASSERT(reporter, kRepeatCnt == pathRef->countWeights()); 3622 REPORTER_ASSERT(reporter, kRepeatCnt == pathRef->countWeights());
3623 REPORTER_ASSERT(reporter, SkPath::kConic_SegmentMask == pathRef->get SegmentMasks()); 3623 REPORTER_ASSERT(reporter, SkPath::kConic_SegmentMask == pathRef->get SegmentMasks());
3624 REPORTER_ASSERT(reporter, weights); 3624 REPORTER_ASSERT(reporter, weights);
3625 for (int i = 0; i < kRepeatCnt; ++i) { 3625 for (int i = 0; i < kRepeatCnt; ++i) {
3626 REPORTER_ASSERT(reporter, SkPath::kConic_Verb == pathRef->atVerb (i)); 3626 REPORTER_ASSERT(reporter, SkPath::kConic_Verb == pathRef->atVerb (i));
3627 } 3627 }
3628 ed.resetToSize(0, 0, 0); 3628 ed.resetToSize(0, 0, 0);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
3664 3664
3665 static void compare_dump(skiatest::Reporter* reporter, const SkPath& path, bool force, 3665 static void compare_dump(skiatest::Reporter* reporter, const SkPath& path, bool force,
3666 bool dumpAsHex, const char* str) { 3666 bool dumpAsHex, const char* str) {
3667 SkDynamicMemoryWStream wStream; 3667 SkDynamicMemoryWStream wStream;
3668 path.dump(&wStream, force, dumpAsHex); 3668 path.dump(&wStream, force, dumpAsHex);
3669 SkAutoDataUnref data(wStream.copyToData()); 3669 SkAutoDataUnref data(wStream.copyToData());
3670 REPORTER_ASSERT(reporter, data->size() == strlen(str)); 3670 REPORTER_ASSERT(reporter, data->size() == strlen(str));
3671 if (strlen(str) > 0) { 3671 if (strlen(str) > 0) {
3672 REPORTER_ASSERT(reporter, !memcmp(data->data(), str, strlen(str))); 3672 REPORTER_ASSERT(reporter, !memcmp(data->data(), str, strlen(str)));
3673 } else { 3673 } else {
3674 REPORTER_ASSERT(reporter, data->data() == NULL || !memcmp(data->data(), str, strlen(str))); 3674 REPORTER_ASSERT(reporter, data->data() == nullptr || !memcmp(data->data( ), str, strlen(str)));
3675 } 3675 }
3676 } 3676 }
3677 3677
3678 static void test_dump(skiatest::Reporter* reporter) { 3678 static void test_dump(skiatest::Reporter* reporter) {
3679 SkPath p; 3679 SkPath p;
3680 compare_dump(reporter, p, false, false, ""); 3680 compare_dump(reporter, p, false, false, "");
3681 compare_dump(reporter, p, true, false, ""); 3681 compare_dump(reporter, p, true, false, "");
3682 p.moveTo(1, 2); 3682 p.moveTo(1, 2);
3683 p.lineTo(3, 4); 3683 p.lineTo(3, 4);
3684 compare_dump(reporter, p, false, false, "path.moveTo(1, 2);\n" 3684 compare_dump(reporter, p, false, false, "path.moveTo(1, 2);\n"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
3835 p.addRect(bounds); 3835 p.addRect(bounds);
3836 check_convex_bounds(reporter, p, bounds); 3836 check_convex_bounds(reporter, p, bounds);
3837 // we have only lines 3837 // we have only lines
3838 REPORTER_ASSERT(reporter, SkPath::kLine_SegmentMask == p.getSegmentMasks()); 3838 REPORTER_ASSERT(reporter, SkPath::kLine_SegmentMask == p.getSegmentMasks());
3839 REPORTER_ASSERT(reporter, !p.isEmpty()); 3839 REPORTER_ASSERT(reporter, !p.isEmpty());
3840 3840
3841 REPORTER_ASSERT(reporter, p != empty); 3841 REPORTER_ASSERT(reporter, p != empty);
3842 REPORTER_ASSERT(reporter, !(p == empty)); 3842 REPORTER_ASSERT(reporter, !(p == empty));
3843 3843
3844 // do getPoints and getVerbs return the right result 3844 // do getPoints and getVerbs return the right result
3845 REPORTER_ASSERT(reporter, p.getPoints(NULL, 0) == 4); 3845 REPORTER_ASSERT(reporter, p.getPoints(nullptr, 0) == 4);
3846 REPORTER_ASSERT(reporter, p.getVerbs(NULL, 0) == 5); 3846 REPORTER_ASSERT(reporter, p.getVerbs(nullptr, 0) == 5);
3847 SkPoint pts[4]; 3847 SkPoint pts[4];
3848 int count = p.getPoints(pts, 4); 3848 int count = p.getPoints(pts, 4);
3849 REPORTER_ASSERT(reporter, count == 4); 3849 REPORTER_ASSERT(reporter, count == 4);
3850 uint8_t verbs[6]; 3850 uint8_t verbs[6];
3851 verbs[5] = 0xff; 3851 verbs[5] = 0xff;
3852 p.getVerbs(verbs, 5); 3852 p.getVerbs(verbs, 5);
3853 REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]); 3853 REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
3854 REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[1]); 3854 REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[1]);
3855 REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[2]); 3855 REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[2]);
3856 REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[3]); 3856 REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[3]);
3857 REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[4]); 3857 REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[4]);
3858 REPORTER_ASSERT(reporter, 0xff == verbs[5]); 3858 REPORTER_ASSERT(reporter, 0xff == verbs[5]);
3859 bounds2.set(pts, 4); 3859 bounds2.set(pts, 4);
3860 REPORTER_ASSERT(reporter, bounds == bounds2); 3860 REPORTER_ASSERT(reporter, bounds == bounds2);
3861 3861
3862 bounds.offset(SK_Scalar1*3, SK_Scalar1*4); 3862 bounds.offset(SK_Scalar1*3, SK_Scalar1*4);
3863 p.offset(SK_Scalar1*3, SK_Scalar1*4); 3863 p.offset(SK_Scalar1*3, SK_Scalar1*4);
3864 REPORTER_ASSERT(reporter, bounds == p.getBounds()); 3864 REPORTER_ASSERT(reporter, bounds == p.getBounds());
3865 3865
3866 REPORTER_ASSERT(reporter, p.isRect(NULL)); 3866 REPORTER_ASSERT(reporter, p.isRect(nullptr));
3867 bounds2.setEmpty(); 3867 bounds2.setEmpty();
3868 REPORTER_ASSERT(reporter, p.isRect(&bounds2)); 3868 REPORTER_ASSERT(reporter, p.isRect(&bounds2));
3869 REPORTER_ASSERT(reporter, bounds == bounds2); 3869 REPORTER_ASSERT(reporter, bounds == bounds2);
3870 3870
3871 // now force p to not be a rect 3871 // now force p to not be a rect
3872 bounds.set(0, 0, SK_Scalar1/2, SK_Scalar1/2); 3872 bounds.set(0, 0, SK_Scalar1/2, SK_Scalar1/2);
3873 p.addRect(bounds); 3873 p.addRect(bounds);
3874 REPORTER_ASSERT(reporter, !p.isRect(NULL)); 3874 REPORTER_ASSERT(reporter, !p.isRect(nullptr));
3875 3875
3876 // Test an edge case w.r.t. the bound returned by isRect (i.e., the 3876 // Test an edge case w.r.t. the bound returned by isRect (i.e., the
3877 // path has a trailing moveTo. Please see crbug.com\445368) 3877 // path has a trailing moveTo. Please see crbug.com\445368)
3878 { 3878 {
3879 SkRect r; 3879 SkRect r;
3880 p.reset(); 3880 p.reset();
3881 p.addRect(bounds); 3881 p.addRect(bounds);
3882 REPORTER_ASSERT(reporter, p.isRect(&r)); 3882 REPORTER_ASSERT(reporter, p.isRect(&r));
3883 REPORTER_ASSERT(reporter, r == bounds); 3883 REPORTER_ASSERT(reporter, r == bounds);
3884 // add a moveTo outside of our bounds 3884 // add a moveTo outside of our bounds
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
3940 PathTest_Private::TestPathTo(reporter); 3940 PathTest_Private::TestPathTo(reporter);
3941 PathRefTest_Private::TestPathRef(reporter); 3941 PathRefTest_Private::TestPathRef(reporter);
3942 PathTest_Private::TestPathrefListeners(reporter); 3942 PathTest_Private::TestPathrefListeners(reporter);
3943 test_dump(reporter); 3943 test_dump(reporter);
3944 test_path_crbug389050(reporter); 3944 test_path_crbug389050(reporter);
3945 test_path_crbugskia2820(reporter); 3945 test_path_crbugskia2820(reporter);
3946 test_skbug_3469(reporter); 3946 test_skbug_3469(reporter);
3947 test_skbug_3239(reporter); 3947 test_skbug_3239(reporter);
3948 test_bounds_crbug_513799(reporter); 3948 test_bounds_crbug_513799(reporter);
3949 } 3949 }
OLDNEW
« no previous file with comments | « tests/PathOpsTSectDebug.h ('k') | tests/PictureBBHTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698