diff options
author | halcanary <halcanary@google.com> | 2015-09-09 08:16:41 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-09 08:16:41 -0700 |
commit | 2a24338c777462e04a2b26295f9c034155ee8f3e (patch) | |
tree | cab82add826f6d77e75c8265ea960f16929033a8 /gm/linepaths.cpp | |
parent | 157e6483fb089bf4d2e5cd2c18b521e5ab4ff32a (diff) |
GM: replace boilerplate with macros
I have verified locally that nothing draws differently.
Motivation:
* SK_SIMPLE_GM makes it easier to write a GM.
* Reducing 1100 lines of code makes maintenance easier.
* Simple GMs are easy to convert to Fiddles.
Review URL: https://codereview.chromium.org/1333553002
Diffstat (limited to 'gm/linepaths.cpp')
-rw-r--r-- | gm/linepaths.cpp | 202 |
1 files changed, 23 insertions, 179 deletions
diff --git a/gm/linepaths.cpp b/gm/linepaths.cpp index 0c99fa754c..51df788dd4 100644 --- a/gm/linepaths.cpp +++ b/gm/linepaths.cpp @@ -11,24 +11,10 @@ #include "SkPaint.h" #include "SkRandom.h" -namespace skiagm { - -class LinePathGM : public GM { -public: - LinePathGM() {} - -protected: - - SkString onShortName() { - return SkString("linepath"); - } - - SkISize onISize() { return SkISize::Make(1240, 390); } - - void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, - const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, - SkPaint::Style style, SkPath::FillType fill, - SkScalar strokeWidth) { +static void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, + const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, + SkPaint::Style style, SkPath::FillType fill, + SkScalar strokeWidth) { path.setFillType(fill); SkPaint paint; paint.setStrokeCap(cap); @@ -40,9 +26,9 @@ protected: canvas->clipRect(clip); canvas->drawPath(path, paint); canvas->restore(); - } +} - virtual void onDraw(SkCanvas* canvas) { +static void draw(SkCanvas* canvas, bool doClose) { struct FillAndName { SkPath::FillType fFill; const char* fName; @@ -79,157 +65,23 @@ protected: PathAndName path; path.fPath.moveTo(25*SK_Scalar1, 15*SK_Scalar1); path.fPath.lineTo(75*SK_Scalar1, 15*SK_Scalar1); - path.fName = "moveTo-line"; - - SkPaint titlePaint; - titlePaint.setColor(SK_ColorBLACK); - titlePaint.setAntiAlias(true); - sk_tool_utils::set_portable_typeface(&titlePaint); - titlePaint.setTextSize(15 * SK_Scalar1); - const char title[] = "Line Drawn Into Rectangle Clips With " - "Indicated Style, Fill and Linecaps, with stroke width 10"; - canvas->drawText(title, strlen(title), - 20 * SK_Scalar1, - 20 * SK_Scalar1, - titlePaint); - - SkRandom rand; - SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1); - canvas->save(); - canvas->translate(10 * SK_Scalar1, 30 * SK_Scalar1); - canvas->save(); - for (size_t cap = 0; cap < SK_ARRAY_COUNT(gCaps); ++cap) { - if (0 < cap) { - canvas->translate((rect.width() + 40 * SK_Scalar1) * SK_ARRAY_COUNT(gStyles), 0); - } - canvas->save(); - for (size_t fill = 0; fill < SK_ARRAY_COUNT(gFills); ++fill) { - if (0 < fill) { - canvas->translate(0, rect.height() + 40 * SK_Scalar1); - } - canvas->save(); - for (size_t style = 0; style < SK_ARRAY_COUNT(gStyles); ++style) { - if (0 < style) { - canvas->translate(rect.width() + 40 * SK_Scalar1, 0); - } - - SkColor color = sk_tool_utils::color_to_565(0xff007000); - this->drawPath(path.fPath, canvas, color, rect, - gCaps[cap].fCap, gCaps[cap].fJoin, gStyles[style].fStyle, - gFills[fill].fFill, SK_Scalar1*10); - - SkPaint rectPaint; - rectPaint.setColor(SK_ColorBLACK); - rectPaint.setStyle(SkPaint::kStroke_Style); - rectPaint.setStrokeWidth(-1); - rectPaint.setAntiAlias(true); - canvas->drawRect(rect, rectPaint); - - SkPaint labelPaint; - labelPaint.setColor(color); - labelPaint.setAntiAlias(true); - sk_tool_utils::set_portable_typeface(&labelPaint); - labelPaint.setTextSize(10 * SK_Scalar1); - canvas->drawText(gStyles[style].fName, - strlen(gStyles[style].fName), - 0, rect.height() + 12 * SK_Scalar1, - labelPaint); - canvas->drawText(gFills[fill].fName, - strlen(gFills[fill].fName), - 0, rect.height() + 24 * SK_Scalar1, - labelPaint); - canvas->drawText(gCaps[cap].fName, - strlen(gCaps[cap].fName), - 0, rect.height() + 36 * SK_Scalar1, - labelPaint); - } - canvas->restore(); - } - canvas->restore(); + if (doClose) { + path.fPath.close(); + path.fName = "moveTo-line-close"; + } else { + path.fName = "moveTo-line"; } - canvas->restore(); - canvas->restore(); - } - -private: - typedef GM INHERITED; -}; - -class LineClosePathGM : public GM { -public: - LineClosePathGM() {} - -protected: - SkString onShortName() { - return SkString("lineclosepath"); - } - - SkISize onISize() { return SkISize::Make(1240, 390); } - - void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, - const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, - SkPaint::Style style, SkPath::FillType fill, - SkScalar strokeWidth) { - path.setFillType(fill); - SkPaint paint; - paint.setStrokeCap(cap); - paint.setStrokeWidth(strokeWidth); - paint.setStrokeJoin(join); - paint.setColor(color); - paint.setStyle(style); - canvas->save(); - canvas->clipRect(clip); - canvas->drawPath(path, paint); - canvas->restore(); - } - - virtual void onDraw(SkCanvas* canvas) { - struct FillAndName { - SkPath::FillType fFill; - const char* fName; - }; - static const FillAndName gFills[] = { - {SkPath::kWinding_FillType, "Winding"}, - {SkPath::kEvenOdd_FillType, "Even / Odd"}, - {SkPath::kInverseWinding_FillType, "Inverse Winding"}, - {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, - }; - struct StyleAndName { - SkPaint::Style fStyle; - const char* fName; - }; - static const StyleAndName gStyles[] = { - {SkPaint::kFill_Style, "Fill"}, - {SkPaint::kStroke_Style, "Stroke"}, - {SkPaint::kStrokeAndFill_Style, "Stroke And Fill"}, - }; - struct CapAndName { - SkPaint::Cap fCap; - SkPaint::Join fJoin; - const char* fName; - }; - static const CapAndName gCaps[] = { - {SkPaint::kButt_Cap, SkPaint::kBevel_Join, "Butt"}, - {SkPaint::kRound_Cap, SkPaint::kRound_Join, "Round"}, - {SkPaint::kSquare_Cap, SkPaint::kBevel_Join, "Square"} - }; - struct PathAndName { - SkPath fPath; - const char* fName; - }; - PathAndName path; - path.fPath.moveTo(25*SK_Scalar1, 15*SK_Scalar1); - path.fPath.lineTo(75*SK_Scalar1, 15*SK_Scalar1); - path.fPath.close(); - path.fName = "moveTo-line-close"; SkPaint titlePaint; titlePaint.setColor(SK_ColorBLACK); titlePaint.setAntiAlias(true); sk_tool_utils::set_portable_typeface(&titlePaint); titlePaint.setTextSize(15 * SK_Scalar1); - const char title[] = "Line Closed Drawn Into Rectangle Clips With " - "Indicated Style, Fill and Linecaps, with stroke width 10"; + const char titleNoClose[] = "Line Drawn Into Rectangle Clips With " + "Indicated Style, Fill and Linecaps, with stroke width 10"; + const char titleClose[] = "Line Closed Drawn Into Rectangle Clips With " + "Indicated Style, Fill and Linecaps, with stroke width 10"; + const char* title = doClose ? titleClose : titleNoClose; canvas->drawText(title, strlen(title), 20 * SK_Scalar1, 20 * SK_Scalar1, @@ -256,7 +108,7 @@ protected: } SkColor color = sk_tool_utils::color_to_565(0xff007000); - this->drawPath(path.fPath, canvas, color, rect, + drawPath(path.fPath, canvas, color, rect, gCaps[cap].fCap, gCaps[cap].fJoin, gStyles[style].fStyle, gFills[fill].fFill, SK_Scalar1*10); @@ -291,18 +143,10 @@ protected: } canvas->restore(); canvas->restore(); - } - -private: - typedef GM INHERITED; -}; - -////////////////////////////////////////////////////////////////////////////// - -static GM* LinePathFactory(void*) { return new LinePathGM; } -static GMRegistry regLinePath(LinePathFactory); - -static GM* LineClosePathFactory(void*) { return new LineClosePathGM; } -static GMRegistry regLineClosePath(LineClosePathFactory); - +} +DEF_SIMPLE_GM(linepath, canvas, 1240, 390) { + draw(canvas, false); +} +DEF_SIMPLE_GM(lineclosepath, canvas, 1240, 390) { + draw(canvas, true); } |