| Index: gm/linepaths.cpp
|
| diff --git a/gm/linepaths.cpp b/gm/linepaths.cpp
|
| index 0c99fa754caea7e5b997ee753d86687a01465571..51df788dd42861a76ff2470a7962668668288630 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);
|
| }
|
|
|