Index: src/pathops/SkPathOpsDebug.cpp |
=================================================================== |
--- src/pathops/SkPathOpsDebug.cpp (revision 9040) |
+++ src/pathops/SkPathOpsDebug.cpp (working copy) |
@@ -6,6 +6,7 @@ |
*/ |
#include "SkPathOpsDebug.h" |
+#include "SkPath.h" |
#if defined SK_DEBUG || !FORCE_RELEASE |
@@ -59,3 +60,65 @@ |
#if DEBUG_ACTIVE_OP |
const char* kPathOpStr[] = {"diff", "sect", "union", "xor"}; |
#endif |
+ |
+#if DEBUG_SHOW_PATH |
+static void showPathContours(SkPath::Iter& 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("%s.moveTo(%#1.9gf, %#1.9gf);\n", pathName, pts[0].fX, pts[0].fY); |
+ continue; |
+ case SkPath::kLine_Verb: |
+ SkDebugf("%s.lineTo(%#1.9gf, %#1.9gf);\n", pathName, pts[1].fX, pts[1].fY); |
+ break; |
+ case SkPath::kQuad_Verb: |
+ 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("%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("%s.close();\n", pathName); |
+ break; |
+ default: |
+ SkDEBUGFAIL("bad verb"); |
+ return; |
+ } |
+ } |
+} |
+ |
+static const char* gFillTypeStr[] = { |
+ "kWinding_FillType", |
+ "kEvenOdd_FillType", |
+ "kInverseWinding_FillType", |
+ "kInverseEvenOdd_FillType" |
+}; |
+ |
+void ShowPath(const SkPath& path, const char* pathName) { |
+ SkPath::Iter iter(path, true); |
+ SkPath::FillType fillType = path.getFillType(); |
+ SkASSERT(fillType >= SkPath::kWinding_FillType && fillType <= SkPath::kInverseEvenOdd_FillType); |
+ SkDebugf("SkPath %s;\n", pathName); |
+ SkDebugf("%s.setFillType(SkPath::%s);\n", pathName, gFillTypeStr[fillType]); |
+ iter.setPath(path, true); |
+ showPathContours(iter, pathName); |
+} |
+ |
+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("SkPath result;\n"); |
+ SkDebugf("bool success = Op(%s, %s, %s, &result);\n", pathOne, pathTwo, gOpStrs[op]); |
+ SkDebugf("SkASSERT(success);\n"); |
+} |
+#endif |