diff options
Diffstat (limited to 'gm/dashing.cpp')
-rw-r--r-- | gm/dashing.cpp | 95 |
1 files changed, 85 insertions, 10 deletions
diff --git a/gm/dashing.cpp b/gm/dashing.cpp index 55addc8a66..d6c1c97df9 100644 --- a/gm/dashing.cpp +++ b/gm/dashing.cpp @@ -12,7 +12,8 @@ static void drawline(SkCanvas* canvas, int on, int off, const SkPaint& paint, SkScalar finalX = SkIntToScalar(600), SkScalar finalY = SkIntToScalar(0), - SkScalar phase = SkIntToScalar(0)) { + SkScalar phase = SkIntToScalar(0), + SkScalar startX = SkIntToScalar(0), SkScalar startY = SkIntToScalar(0)) { SkPaint p(paint); const SkScalar intervals[] = { @@ -21,7 +22,7 @@ static void drawline(SkCanvas* canvas, int on, int off, const SkPaint& paint, }; p.setPathEffect(SkDashPathEffect::Create(intervals, 2, phase))->unref(); - canvas->drawLine(0, 0, finalX, finalY, p); + canvas->drawLine(startX, startY, finalX, finalY, p); } // earlier bug stopped us from drawing very long single-segment dashes, because @@ -396,12 +397,86 @@ protected: ////////////////////////////////////////////////////////////////////////////// -static skiagm::GM* F0(void*) { return new DashingGM; } -static skiagm::GM* F1(void*) { return new Dashing2GM; } -static skiagm::GM* F2(void*) { return new Dashing3GM; } -static skiagm::GM* F3(void*) { return new Dashing4GM; } +class Dashing5GM : public skiagm::GM { +public: + Dashing5GM(bool doAA) : fDoAA(doAA) {} + +protected: + virtual uint32_t onGetFlags() const SK_OVERRIDE { return kAsBench_Flag | kSkipTiled_Flag; } + + virtual SkString onShortName() SK_OVERRIDE { + if (fDoAA) { + return SkString("dashing5_aa"); + } else { + return SkString("dashing5_bw"); + } + } + + virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(400, 200); } + + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { + static const int kOn = 4; + static const int kOff = 4; + static const int kIntervalLength = kOn + kOff; + + static const SkColor gColors[kIntervalLength] = { + SK_ColorRED, + SK_ColorGREEN, + SK_ColorBLUE, + SK_ColorCYAN, + SK_ColorMAGENTA, + SK_ColorYELLOW, + SK_ColorGRAY, + SK_ColorDKGRAY + }; + + SkPaint paint; + paint.setStyle(SkPaint::kStroke_Style); + + paint.setAntiAlias(fDoAA); + + SkMatrix rot; + rot.setRotate(90); + SkASSERT(rot.rectStaysRect()); + + canvas->concat(rot); + + int sign; // used to toggle the direction of the lines + int phase = 0; + + for (int x = 0; x < 200; x += 10) { + paint.setStrokeWidth(SkIntToScalar(phase+1)); + paint.setColor(gColors[phase]); + sign = (x % 20) ? 1 : -1; + drawline(canvas, kOn, kOff, paint, + SkIntToScalar(x), -sign * SkIntToScalar(10003), + SkIntToScalar(phase), + SkIntToScalar(x), sign * SkIntToScalar(10003)); + phase = (phase + 1) % kIntervalLength; + } + + for (int y = -400; y < 0; y += 10) { + paint.setStrokeWidth(SkIntToScalar(phase+1)); + paint.setColor(gColors[phase]); + sign = (y % 20) ? 1 : -1; + drawline(canvas, kOn, kOff, paint, + -sign * SkIntToScalar(10003), SkIntToScalar(y), + SkIntToScalar(phase), + sign * SkIntToScalar(10003), SkIntToScalar(y)); + phase = (phase + 1) % kIntervalLength; + } + } + +private: + bool fDoAA; +}; + +////////////////////////////////////////////////////////////////////////////// + +DEF_GM(return SkNEW(DashingGM);) +DEF_GM(return SkNEW(Dashing2GM);) +DEF_GM(return SkNEW(Dashing3GM);) +DEF_GM(return SkNEW(Dashing4GM);) +DEF_GM(return SkNEW_ARGS(Dashing5GM, (true));) +DEF_GM(return SkNEW_ARGS(Dashing5GM, (false));) -static skiagm::GMRegistry gR0(F0); -static skiagm::GMRegistry gR1(F1); -static skiagm::GMRegistry gR2(F2); -static skiagm::GMRegistry gR3(F3); |