| 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
|
|
|