void onDrawContent(SkCanvas* canvas) override { const float SCALE = 1; canvas->translate(30, 40); canvas->scale(SCALE, SCALE); SkPoint p1 = SkPoint::Make(50, 50); SkPoint p2 = SkPoint::Make(80, 50); SkPath path; switch (fPathType) { case 0: path = quadPath(p1, p2); break; case 1: path = cubicPath(p1, p2); break; case 2: path = rectPath(p1); break; case 3: path = linSemicirclePath(p1, p2); break; default: path = quadPath(p1, p2); break; } if (fClosePath) { path.close(); } SkPaint p; p.setColor(SK_ColorRED); p.setAntiAlias(true); p.setStyle(SkPaint::kStroke_Style); p.setStrokeWidth(fStroke); canvas->drawPath(path, p); if (fDumpHex) { std::cerr << "path dumpHex" << std::endl; path.dumpHex(); } SkPaint hairp; hairp.setColor(SK_ColorBLACK); hairp.setAntiAlias(true); hairp.setStyle(SkPaint::kStroke_Style); if (fDrawFillPath) { SkPath fillpath; p.getFillPath(path, &fillpath); canvas->drawPath(fillpath, hairp); if (fDumpHex) { std::cerr << "fillpath dumpHex" << std::endl; fillpath.dumpHex(); } } if (fDumpHex) { std::cerr << std::endl; fDumpHex = false; } // draw original path with green hairline hairp.setColor(SK_ColorGREEN); canvas->drawPath(path, hairp); }