| Index: gm/dashing.cpp
|
| diff --git a/gm/dashing.cpp b/gm/dashing.cpp
|
| index 55addc8a66f3cba4086924ff90289e90c29ad938..d6c1c97df9c81ba4177117a02f3a6f72d6718b97 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);
|
|
|