| Index: tests/PathOpsOpTest.cpp
|
| diff --git a/tests/PathOpsOpTest.cpp b/tests/PathOpsOpTest.cpp
|
| index 75b6030aa5879f2b1d005f5e6393cf6e97287006..d2abd0037b334395907834d1a1ae496b882b2c74 100644
|
| --- a/tests/PathOpsOpTest.cpp
|
| +++ b/tests/PathOpsOpTest.cpp
|
| @@ -2065,6 +2065,11 @@ static void rectOp3x(skiatest::Reporter* reporter, const char* filename) {
|
| testPathOp(reporter, path, pathB, kXOR_PathOp, filename);
|
| }
|
|
|
| +#define ISSUE_1435_FIXED 0
|
| +#if ISSUE_1435_FIXED
|
| +// this fails to generate two interior line segments
|
| +// an earlier pathops succeeded, but still failed to generate one interior line segment
|
| +// (but was saved by assemble, which works around a single line missing segment)
|
| static void issue1435(skiatest::Reporter* reporter, const char* filename) {
|
| SkPath path1;
|
| path1.moveTo(160, 60);
|
| @@ -2115,6 +2120,7 @@ static void issue1435(skiatest::Reporter* reporter, const char* filename) {
|
| path2.setFillType(SkPath::kEvenOdd_FillType);
|
| testPathOp(reporter, path1, path2, kIntersect_PathOp, filename);
|
| }
|
| +#endif
|
|
|
| static void skpkkiste_to716(skiatest::Reporter* reporter, const char* filename) {
|
| SkPath path;
|
| @@ -3348,10 +3354,116 @@ static void issue2504(skiatest::Reporter* reporter, const char* filename) {
|
| testPathOp(reporter, path1, path2, kUnion_PathOp, filename);
|
| }
|
|
|
| +#define TEST_2540 0
|
| +#if TEST_2540 // FIXME: extends cubic arm for sorting, marks extension with wrong winding?
|
| +static void issue2540(skiatest::Reporter* reporter, const char* filename) {
|
| + SkPath path1;
|
| + path1.moveTo(26.5054988861083984375, 85.73960113525390625);
|
| + path1.cubicTo(84.19739532470703125, 17.77140045166015625, 16.93920135498046875, 101.86199951171875, 12.631000518798828125, 105.24700164794921875);
|
| + path1.cubicTo(11.0819997787475585937500000, 106.46399688720703125, 11.5260000228881835937500000, 104.464996337890625, 11.5260000228881835937500000, 104.464996337890625);
|
| + path1.lineTo(23.1654987335205078125, 89.72879791259765625);
|
| + path1.cubicTo(23.1654987335205078125, 89.72879791259765625, -10.1713008880615234375, 119.9160003662109375, -17.1620006561279296875, 120.8249969482421875);
|
| + path1.cubicTo(-19.1149997711181640625, 121.07900238037109375, -18.0380001068115234375, 119.79299163818359375, -18.0380001068115234375, 119.79299163818359375);
|
| + path1.cubicTo(-18.0380001068115234375, 119.79299163818359375, 14.22100067138671875, 90.60700225830078125, 26.5054988861083984375, 85.73960113525390625);
|
| + path1.close();
|
| +
|
| + SkPath path2;
|
| + path2.moveTo(-25.077999114990234375, 124.9120025634765625);
|
| + path2.cubicTo(-25.077999114990234375, 124.9120025634765625, -25.9509983062744140625, 125.95400238037109375, -24.368999481201171875, 125.7480010986328125);
|
| + path2.cubicTo(-16.06999969482421875, 124.66899871826171875, 1.2680000066757202148437500, 91.23999786376953125, 37.264003753662109375, 95.35400390625);
|
| + path2.cubicTo(37.264003753662109375, 95.35400390625, 11.3710002899169921875, 83.7339935302734375, -25.077999114990234375, 124.9120025634765625);
|
| + path2.close();
|
| + testPathOp(reporter, path1, path2, kUnion_PathOp, filename);
|
| +}
|
| +#endif
|
| +
|
| +static void rects1(skiatest::Reporter* reporter, const char* filename) {
|
| + SkPath path, pathB;
|
| + path.setFillType(SkPath::kEvenOdd_FillType);
|
| + path.moveTo(0, 0);
|
| + path.lineTo(1, 0);
|
| + path.lineTo(1, 1);
|
| + path.lineTo(0, 1);
|
| + path.close();
|
| + path.moveTo(0, 0);
|
| + path.lineTo(6, 0);
|
| + path.lineTo(6, 6);
|
| + path.lineTo(0, 6);
|
| + path.close();
|
| + pathB.setFillType(SkPath::kEvenOdd_FillType);
|
| + pathB.moveTo(0, 0);
|
| + pathB.lineTo(1, 0);
|
| + pathB.lineTo(1, 1);
|
| + pathB.lineTo(0, 1);
|
| + pathB.close();
|
| + pathB.moveTo(0, 0);
|
| + pathB.lineTo(2, 0);
|
| + pathB.lineTo(2, 2);
|
| + pathB.lineTo(0, 2);
|
| + pathB.close();
|
| + testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
|
| +}
|
| +
|
| +static void rects2(skiatest::Reporter* reporter, const char* filename) {
|
| + SkPath path, pathB;
|
| + path.setFillType(SkPath::kEvenOdd_FillType);
|
| + path.moveTo(0, 0);
|
| + path.lineTo(4, 0);
|
| + path.lineTo(4, 4);
|
| + path.lineTo(0, 4);
|
| + path.close();
|
| + path.moveTo(3, 3);
|
| + path.lineTo(4, 3);
|
| + path.lineTo(4, 4);
|
| + path.lineTo(3, 4);
|
| + path.close();
|
| + pathB.setFillType(SkPath::kWinding_FillType);
|
| + pathB.moveTo(3, 3);
|
| + pathB.lineTo(6, 3);
|
| + pathB.lineTo(6, 6);
|
| + pathB.lineTo(3, 6);
|
| + pathB.close();
|
| + pathB.moveTo(3, 3);
|
| + pathB.lineTo(4, 3);
|
| + pathB.lineTo(4, 4);
|
| + pathB.lineTo(3, 4);
|
| + pathB.close();
|
| + testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
|
| +}
|
| +
|
| +static void rects3(skiatest::Reporter* reporter, const char* filename) {
|
| + SkPath path, pathB;
|
| + path.setFillType(SkPath::kEvenOdd_FillType);
|
| + path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
|
| + path.addRect(0, 0, 4, 4, SkPath::kCW_Direction);
|
| + pathB.setFillType(SkPath::kWinding_FillType);
|
| + pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
|
| + pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
|
| + testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
|
| +}
|
| +
|
| +static void rects4(skiatest::Reporter* reporter, const char* filename) {
|
| + SkPath path, pathB;
|
| + path.setFillType(SkPath::kEvenOdd_FillType);
|
| + path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
|
| + path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
|
| + pathB.setFillType(SkPath::kWinding_FillType);
|
| + pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
|
| + pathB.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
|
| + testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
|
| +}
|
| +
|
| static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;
|
| static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;
|
|
|
| static struct TestDesc tests[] = {
|
| + TEST(rects4),
|
| + TEST(rects3),
|
| + TEST(rects2),
|
| + TEST(rects1),
|
| +#if TEST_2540 // FIXME: extends cubic arm for sorting, marks extension with wrong winding?
|
| + TEST(issue2540),
|
| +#endif
|
| TEST(issue2504),
|
| TEST(kari1),
|
| TEST(quadOp10i),
|
| @@ -3390,7 +3502,9 @@ static struct TestDesc tests[] = {
|
| TEST(cubicOp101),
|
| TEST(cubicOp100),
|
| TEST(cubicOp99),
|
| +#if ISSUE_1435_FIXED
|
| TEST(issue1435),
|
| +#endif
|
| TEST(cubicOp98x),
|
| TEST(cubicOp97x),
|
| TEST(skpcarpetplanet_ru22), // cubic/cubic intersect detects unwanted coincidence
|
|
|