| Index: tests/PathOpsExtendedTest.cpp
|
| diff --git a/tests/PathOpsExtendedTest.cpp b/tests/PathOpsExtendedTest.cpp
|
| index 3e72ba901dea43fd69e30dc24b530631a0264328..7a7dcb375914c64e8cdf637f34c17dc98a6ec159 100644
|
| --- a/tests/PathOpsExtendedTest.cpp
|
| +++ b/tests/PathOpsExtendedTest.cpp
|
| @@ -45,27 +45,34 @@ static bool gComparePaths = true;
|
| static bool gComparePathsAssert = true;
|
| static bool gPathStrAssert = true;
|
|
|
| -static void showPathContours(SkPath::Iter& iter, const char* suffix) {
|
| +static const char* gFillTypeStr[] = {
|
| + "kWinding_FillType",
|
| + "kEvenOdd_FillType",
|
| + "kInverseWinding_FillType",
|
| + "kInverseEvenOdd_FillType"
|
| +};
|
| +
|
| +static void showPathContours(SkPath::RawIter& iter, const char* pathName) {
|
| uint8_t verb;
|
| SkPoint pts[4];
|
| while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
|
| switch (verb) {
|
| case SkPath::kMove_Verb:
|
| - SkDebugf(" path%s.moveTo(%1.9g,%1.9g);\n", suffix, pts[0].fX, pts[0].fY);
|
| + SkDebugf(" %s.moveTo(%#1.9gf, %#1.9gf);\n", pathName, pts[0].fX, pts[0].fY);
|
| continue;
|
| case SkPath::kLine_Verb:
|
| - SkDebugf(" path%s.lineTo(%1.9g,%1.9g);\n", suffix, pts[1].fX, pts[1].fY);
|
| + SkDebugf(" %s.lineTo(%#1.9gf, %#1.9gf);\n", pathName, pts[1].fX, pts[1].fY);
|
| break;
|
| case SkPath::kQuad_Verb:
|
| - SkDebugf(" path%s.quadTo(%1.9g,%1.9g, %1.9g,%1.9g);\n", suffix,
|
| + SkDebugf(" %s.quadTo(%#1.9gf, %#1.9gf, %#1.9gf, %#1.9gf);\n", pathName,
|
| pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY);
|
| break;
|
| case SkPath::kCubic_Verb:
|
| - SkDebugf(" path%s.cubicTo(%1.9g,%1.9g, %1.9g,%1.9g, %1.9g,%1.9g);\n", suffix,
|
| - pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, pts[3].fX, pts[3].fY);
|
| + SkDebugf(" %s.cubicTo(%#1.9gf, %#1.9gf, %#1.9gf, %#1.9gf, %#1.9gf, %#1.9gf);\n",
|
| + pathName, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, pts[3].fX, pts[3].fY);
|
| break;
|
| case SkPath::kClose_Verb:
|
| - SkDebugf(" path%s.close();\n", suffix);
|
| + SkDebugf(" %s.close();\n", pathName);
|
| break;
|
| default:
|
| SkDEBUGFAIL("bad verb");
|
| @@ -74,15 +81,8 @@ static void showPathContours(SkPath::Iter& iter, const char* suffix) {
|
| }
|
| }
|
|
|
| -static const char* fillTypeStr[] = {
|
| - "kWinding_FillType",
|
| - "kEvenOdd_FillType",
|
| - "kInverseWinding_FillType",
|
| - "kInverseEvenOdd_FillType"
|
| -};
|
| -
|
| -static void showPath(const SkPath& path, const char* suffix) {
|
| - SkPath::Iter iter(path, true);
|
| +static void showPath(const SkPath& path, const char* pathName, bool includeDeclaration) {
|
| + SkPath::RawIter iter(path);
|
| #define SUPPORT_RECT_CONTOUR_DETECTION 0
|
| #if SUPPORT_RECT_CONTOUR_DETECTION
|
| int rectCount = path.isRectContours() ? path.rectContours(NULL, NULL) : 0;
|
| @@ -103,14 +103,17 @@ static void showPath(const SkPath& path, const char* suffix) {
|
| #endif
|
| SkPath::FillType fillType = path.getFillType();
|
| SkASSERT(fillType >= SkPath::kWinding_FillType && fillType <= SkPath::kInverseEvenOdd_FillType);
|
| - SkDebugf(" path%s.setFillType(SkPath::%s);\n", suffix, fillTypeStr[fillType]);
|
| - iter.setPath(path, true);
|
| - showPathContours(iter, suffix);
|
| + if (includeDeclaration) {
|
| + SkDebugf(" SkPath %s;\n", pathName);
|
| + }
|
| + SkDebugf(" %s.setFillType(SkPath::%s);\n", pathName, gFillTypeStr[fillType]);
|
| + iter.setPath(path);
|
| + showPathContours(iter, pathName);
|
| }
|
|
|
| #if DEBUG_SHOW_TEST_NAME
|
| static void showPathData(const SkPath& path) {
|
| - SkPath::Iter iter(path, true);
|
| + SkPath::RawIter iter(path);
|
| uint8_t verb;
|
| SkPoint pts[4];
|
| while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
|
| @@ -162,16 +165,26 @@ void showOp(const SkPathOp op) {
|
| }
|
| }
|
|
|
| -#if 0
|
| -static void showPath(const SkPath& path, const char* str, const SkMatrix& scale) {
|
| - SkPath scaled;
|
| - SkMatrix inverse;
|
| - bool success = scale.invert(&inverse);
|
| - if (!success) {
|
| - SkASSERT(0);
|
| +#if DEBUG_SHOW_TEST_NAME
|
| +
|
| +void ShowFunctionHeader(const char* functionName) {
|
| + SkDebugf("\nstatic void %s(skiatest::Reporter* reporter) {\n", functionName);
|
| + if (strcmp("skphealth_com76", functionName) == 0) {
|
| + SkDebugf("found it\n");
|
| }
|
| - path.transform(inverse, &scaled);
|
| - showPath(scaled, str);
|
| +}
|
| +
|
| +static const char* gOpStrs[] = {
|
| + "kDifference_PathOp",
|
| + "kIntersect_PathOp",
|
| + "kUnion_PathOp",
|
| + "kXor_PathOp",
|
| + "kReverseDifference_PathOp",
|
| +};
|
| +
|
| +void ShowOp(SkPathOp op, const char* pathOne, const char* pathTwo) {
|
| + SkDebugf(" testPathOp(reporter, %s, %s, %s);\n", pathOne, pathTwo, gOpStrs[op]);
|
| + SkDebugf("}\n");
|
| }
|
| #endif
|
|
|
| @@ -325,8 +338,7 @@ bool drawAsciiPaths(const SkPath& one, const SkPath& two, bool drawPaths) {
|
|
|
| static void showSimplifiedPath(const SkPath& one, const SkPath& two,
|
| const SkPath& scaledOne, const SkPath& scaledTwo) {
|
| - showPath(one, "");
|
| - // showPath(two, "simplified:");
|
| + showPath(one, "path", false);
|
| drawAsciiPaths(scaledOne, scaledTwo, true);
|
| }
|
|
|
| @@ -356,13 +368,10 @@ static void showPathOpPath(const SkPath& one, const SkPath& two, const SkPath& a
|
| SkASSERT((unsigned) shapeOp < SK_ARRAY_COUNT(opStrs));
|
| SkDebugf("static void xOp#%s(skiatest::Reporter* reporter) {\n", opSuffixes[shapeOp]);
|
| SkDebugf(" SkPath path, pathB;\n");
|
| - showPath(a, "");
|
| - showPath(b, "B");
|
| + showPath(a, "path", false);
|
| + showPath(b, "pathB", false);
|
| SkDebugf(" testPathOp(reporter, path, pathB, %s);\n", opStrs[shapeOp]);
|
| SkDebugf("}\n");
|
| - // the region often isn't very helpful since it approximates curves with a lot of line-tos
|
| - // if (0) showPath(scaledOne, "region:", scale);
|
| - // showPath(two, "op result:");
|
| drawAsciiPaths(scaledOne, scaledTwo, true);
|
| }
|
|
|
| @@ -450,7 +459,7 @@ bool testSimplify(SkPath& path, bool useXor, SkPath& out, PathOpsThreadState& st
|
| SkPath::FillType fillType = useXor ? SkPath::kEvenOdd_FillType : SkPath::kWinding_FillType;
|
| path.setFillType(fillType);
|
| if (gShowPath) {
|
| - showPath(path, "");
|
| + showPath(path, "path", false);
|
| }
|
| if (!Simplify(path, &out)) {
|
| SkDebugf("%s did not expect failure\n", __FUNCTION__);
|
| @@ -499,12 +508,25 @@ bool testSimplify(skiatest::Reporter* reporter, const SkPath& path) {
|
| return result == 0;
|
| }
|
|
|
| +#if DEBUG_SHOW_TEST_NAME
|
| +void DebugShowPath(const SkPath& a, const SkPath& b, SkPathOp shapeOp, const char* testName) {
|
| + ShowFunctionHeader(testName);
|
| + showPath(a, "path", true);
|
| + showPath(b, "pathB", true);
|
| + ShowOp(shapeOp, "path", "pathB");
|
| +}
|
| +#endif
|
| +
|
| bool testPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
|
| - const SkPathOp shapeOp) {
|
| + const SkPathOp shapeOp, const char* testName) {
|
| #if DEBUG_SHOW_TEST_NAME
|
| - showPathData(a);
|
| - showOp(shapeOp);
|
| - showPathData(b);
|
| + if (testName == NULL) {
|
| + showPathData(a);
|
| + showOp(shapeOp);
|
| + showPathData(b);
|
| + } else {
|
| + DebugShowPath(a, b, shapeOp, testName);
|
| + }
|
| #endif
|
| SkPath out;
|
| if (!Op(a, b, shapeOp, &out) ) {
|
|
|