Index: tests/PathOpsOpTest.cpp |
=================================================================== |
--- tests/PathOpsOpTest.cpp (revision 9425) |
+++ tests/PathOpsOpTest.cpp (working copy) |
@@ -1385,6 +1385,21 @@ |
testPathOp(reporter, path, pathB, kDifference_PathOp); |
} |
+static void cubicOp74d(skiatest::Reporter* reporter) { |
+ SkPath path, pathB; |
+ path.setFillType(SkPath::kWinding_FillType); |
+ path.moveTo(0,1); |
+ path.cubicTo(1,5, 5,1, 5,1); |
+ path.lineTo(0,1); |
+ path.close(); |
+ pathB.setFillType(SkPath::kWinding_FillType); |
+ pathB.moveTo(1,5); |
+ pathB.cubicTo(1,5, 1,0, 5,1); |
+ pathB.lineTo(1,5); |
+ pathB.close(); |
+ testPathOp(reporter, path, pathB, kDifference_PathOp); |
+} |
+ |
static void cubicOp75d(skiatest::Reporter* reporter) { |
SkPath path, pathB; |
path.setFillType(SkPath::kWinding_FillType); |
@@ -1400,6 +1415,19 @@ |
testPathOp(reporter, path, pathB, kDifference_PathOp); |
} |
+static void cubicOp76u(skiatest::Reporter* reporter) { |
+ SkPath path, pathB; |
+ path.setFillType(SkPath::kWinding_FillType); |
+ path.moveTo(0,1); |
+ path.cubicTo(0,2, 2,0, 5,3); |
+ path.close(); |
+ pathB.setFillType(SkPath::kWinding_FillType); |
+ pathB.moveTo(0,2); |
+ pathB.cubicTo(3,5, 1,0, 2,0); |
+ pathB.close(); |
+ testPathOp(reporter, path, pathB, kUnion_PathOp); |
+} |
+ |
static void cubicOp77i(skiatest::Reporter* reporter) { |
SkPath path, pathB; |
path.setFillType(SkPath::kEvenOdd_FillType); |
@@ -1430,19 +1458,6 @@ |
testPathOp(reporter, path, pathB, kUnion_PathOp); |
} |
-static void cubicOp79d(skiatest::Reporter* reporter) { |
- SkPath path, pathB; |
- path.setFillType(SkPath::kWinding_FillType); |
- path.moveTo(0,2); |
- path.cubicTo(0,1, 3,-0.1f, 1,0); |
- path.close(); |
- pathB.setFillType(SkPath::kWinding_FillType); |
- pathB.moveTo(0,3); |
- pathB.cubicTo(0,1, 2,0, 1,0); |
- pathB.close(); |
- testPathOp(reporter, path, pathB, kDifference_PathOp); |
-} |
- |
static void cubicOp79u(skiatest::Reporter* reporter) { |
SkPath path, pathB; |
path.setFillType(SkPath::kWinding_FillType); |
@@ -1471,6 +1486,19 @@ |
testPathOp(reporter, path, pathB, kIntersect_PathOp); |
} |
+static void cubicOp81d(skiatest::Reporter* reporter) { |
+ SkPath path, pathB; |
+ path.setFillType(SkPath::kWinding_FillType); |
+ path.moveTo(0,1); |
+ path.cubicTo(4,6, 4,3, 5,4); |
+ path.close(); |
+ pathB.setFillType(SkPath::kWinding_FillType); |
+ pathB.moveTo(3,4); |
+ pathB.cubicTo(4,5, 1,0, 6,4); |
+ pathB.close(); |
+ testPathOp(reporter, path, pathB, kDifference_PathOp); |
+} |
+ |
static void cubicOp82i(skiatest::Reporter* reporter) { |
SkPath path, pathB; |
path.setFillType(SkPath::kEvenOdd_FillType); |
@@ -1486,30 +1514,110 @@ |
testPathOp(reporter, path, pathB, kIntersect_PathOp); |
} |
-static void cubicOp81d(skiatest::Reporter* reporter) { |
+static void cubicOp83i(skiatest::Reporter* reporter) { |
SkPath path, pathB; |
path.setFillType(SkPath::kWinding_FillType); |
path.moveTo(0,1); |
- path.cubicTo(4,6, 4,3, 5,4); |
+ path.cubicTo(0,3, 2,1, 4,1); |
+ path.lineTo(0,1); |
path.close(); |
pathB.setFillType(SkPath::kWinding_FillType); |
- pathB.moveTo(3,4); |
- pathB.cubicTo(4,5, 1,0, 6,4); |
+ pathB.moveTo(1,2); |
+ pathB.cubicTo(1,4, 1,0, 3,0); |
+ pathB.lineTo(1,2); |
pathB.close(); |
+ testPathOp(reporter, path, pathB, kIntersect_PathOp); |
+} |
+ |
+static void cubicOp84d(skiatest::Reporter* reporter) { |
+ SkPath path, pathB; |
+ path.setFillType(SkPath::kWinding_FillType); |
+ path.moveTo(0,4); |
+ path.cubicTo(2,3, 6,3, 3,2); |
+ path.close(); |
+ pathB.setFillType(SkPath::kWinding_FillType); |
+ pathB.moveTo(3,6); |
+ pathB.cubicTo(2,3, 4,0, 3,2); |
+ pathB.close(); |
testPathOp(reporter, path, pathB, kDifference_PathOp); |
} |
-static void (*firstTest)(skiatest::Reporter* ) = cubicOp81d; |
+static void skpClip1(skiatest::Reporter* reporter) { |
+ SkPath path; |
+ path.setFillType(SkPath::kEvenOdd_FillType); |
+ path.moveTo(1126.17114f, 877.171204f); |
+ path.quadTo(1127.34314f, 876.000000f, 1129.00000f, 876.000000f); |
+ path.lineTo(1243.00000f, 876.000000f); |
+ path.quadTo(1244.65686f, 876.000000f, 1245.82886f, 877.171204f); |
+ path.quadTo(1247.00000f, 878.343140f, 1247.00000f, 880.000000f); |
+ path.lineTo(1247.00000f, 907.000000f); |
+ path.lineTo(1246.00000f, 907.000000f); |
+ path.lineTo(1246.00000f, 880.000000f); |
+ path.cubicTo(1246.00000f, 878.343140f, 1244.65686f, 877.000000f, 1243.00000f, 877.000000f); |
+ path.lineTo(1129.00000f, 877.000000f); |
+ path.cubicTo(1127.34314f, 877.000000f, 1126.00000f, 878.343140f, 1126.00000f, 880.000000f); |
+ path.lineTo(1126.00000f, 907.000000f); |
+ path.lineTo(1125.00000f, 907.000000f); |
+ path.lineTo(1125.00000f, 880.000000f); |
+ path.quadTo(1125.00000f, 878.343140f, 1126.17114f, 877.171204f); |
+ path.close(); |
+ SkPath pathB; |
+ pathB.setFillType(SkPath::kWinding_FillType); |
+ pathB.moveTo(1247.00000f, 876.000000f); |
+ pathB.lineTo(1231.00000f, 892.000000f); |
+ pathB.lineTo(1246.00000f, 907.000000f); |
+ pathB.lineTo(1247.00000f, 907.000000f); |
+ pathB.lineTo(1247.00000f, 876.000000f); |
+ pathB.close(); |
+ testPathOp(reporter, path, pathB, kIntersect_PathOp); |
+} |
+#if 1 // FIXME: work in progress -- coincident cubic undetected |
+static void skpClip2(skiatest::Reporter* reporter) { |
+ SkPath path; |
+ path.setFillType(SkPath::kEvenOdd_FillType); |
+ path.moveTo(134.000000f, 11414.0000f); |
+ path.cubicTo(131.990234f, 11414.0000f, 130.326660f, 11415.4824f, 130.042755f, 11417.4131f); |
+ path.cubicTo(130.233124f, 11418.3193f, 131.037079f, 11419.0000f, 132.000000f, 11419.0000f); |
+ path.lineTo(806.000000f, 11419.0000f); |
+ path.cubicTo(806.962891f, 11419.0000f, 807.766907f, 11418.3193f, 807.957275f, 11417.4131f); |
+ path.cubicTo(807.673401f, 11415.4824f, 806.009766f, 11414.0000f, 804.000000f, 11414.0000f); |
+ path.lineTo(134.000000f, 11414.0000f); |
+ path.close(); |
+ SkPath pathB; |
+ pathB.setFillType(SkPath::kInverseWinding_FillType); |
+ pathB.moveTo(132.000000f, 11415.0000f); |
+ pathB.lineTo(806.000000f, 11415.0000f); |
+ pathB.cubicTo(807.104553f, 11415.0000f, 808.000000f, 11415.4473f, 808.000000f, 11416.0000f); |
+ pathB.lineTo(808.000000f, 11417.0000f); |
+ pathB.cubicTo(808.000000f, 11418.1045f, 807.104553f, 11419.0000f, 806.000000f, 11419.0000f); |
+ pathB.lineTo(132.000000f, 11419.0000f); |
+ pathB.cubicTo(130.895432f, 11419.0000f, 130.000000f, 11418.1045f, 130.000000f, 11417.0000f); |
+ pathB.lineTo(130.000000f, 11416.0000f); |
+ pathB.cubicTo(130.000000f, 11415.4473f, 130.895432f, 11415.0000f, 132.000000f, 11415.0000f); |
+ pathB.close(); |
+ testPathOp(reporter, path, pathB, kIntersect_PathOp); |
+} |
+#endif |
+ |
+static void (*firstTest)(skiatest::Reporter* ) = 0; |
+ |
static struct TestDesc tests[] = { |
+#if 1 // FIXME: work in progress -- coincident cubic undetected |
+ TEST(skpClip2), |
+#endif |
+ TEST(skpClip1), |
+ TEST(cubicOp84d), |
+ TEST(cubicOp83i), |
TEST(cubicOp82i), |
TEST(cubicOp81d), |
TEST(cubicOp80i), |
TEST(cubicOp79u), |
- TEST(cubicOp79d), |
TEST(cubicOp78u), |
TEST(cubicOp77i), |
+ TEST(cubicOp76u), |
TEST(cubicOp75d), |
+ TEST(cubicOp74d), |
TEST(cubicOp73d), |
TEST(cubicOp72i), |
TEST(cubicOp71d), |