18d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com/*
28d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com * Copyright 2012 Google Inc.
38d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com *
48d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com * Use of this source code is governed by a BSD-style license that can be
58d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com * found in the LICENSE file.
68d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com */
78d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
88d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com#include "gm.h"
98d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com#include "SkCanvas.h"
108d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com#include "SkPath.h"
118d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com#include "SkParsePath.h"
128d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com#include "SkDashPathEffect.h"
138d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
148d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com/*
158d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com *  Inspired by http://code.google.com/p/chromium/issues/detail?id=112145
168d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com */
178d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
188d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.comclass DashCubicsGM : public skiagm::GM {
198d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.compublic:
208d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com    DashCubicsGM() {}
218d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
228d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.comprotected:
23a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
248d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com    virtual SkString onShortName() {
258d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        return SkString("dashcubics");
268d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com    }
278d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
288d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com    virtual SkISize onISize() {
296df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        return SkISize::Make(860, 700);
308d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com    }
318d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
326df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark    void flower(SkCanvas* canvas, const SkPath& path, SkScalar intervals[2], SkPaint::Join join) {
330a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org        SkPathEffect* pe = SkDashPathEffect::Create(intervals, 2, 0);
348d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
358d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        SkPaint paint;
368d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setAntiAlias(true);
378d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setStyle(SkPaint::kStroke_Style);
386df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        paint.setStrokeJoin(join);
398d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setStrokeWidth(42);
408d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        canvas->drawPath(path, paint);
418d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
428d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setColor(SK_ColorRED);
438d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setStrokeWidth(21);
448d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setPathEffect(pe)->unref();
458d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        canvas->drawPath(path, paint);
468d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
478d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setColor(SK_ColorGREEN);
488d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setPathEffect(NULL);
498d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        paint.setStrokeWidth(0);
508d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com        canvas->drawPath(path, paint);
518d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com    }
528d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
536df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark    virtual void onDraw(SkCanvas* canvas) {
546df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        SkPath path;
556df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        const char* d = "M 337,98 C 250,141 250,212 250,212 C 250,212 250,212 250,212"
566df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        "C 250,212 250,212 250,212 C 250,212 250,141 163,98 C 156,195 217,231 217,231"
576df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        "C 217,231 217,231 217,231 C 217,231 217,231 217,231 C 217,231 156,195 75,250"
586df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        "C 156,305 217,269 217,269 C 217,269 217,269 217,269 C 217,269 217,269 217,269"
596df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        "C 217,269 156,305 163,402 C 250,359 250,288 250,288 C 250,288 250,288 250,288"
606df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        "C 250,288 250,288 250,288 C 250,288 250,359 338,402 C 345,305 283,269 283,269"
616df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        "C 283,269 283,269 283,269 C 283,269 283,269 283,269 C 283,269 345,305 425,250"
626df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        "C 344,195 283,231 283,231 C 283,231 283,231 283,231 C 283,231 283,231 283,231"
636df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        "C 283,231 344,195 338,98";
646df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark
656df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        SkParsePath::FromSVGString(d, &path);
666df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark            canvas->translate(-35.f, -55.f);
676df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        for (int x = 0; x < 2; ++x) {
686df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark            for (int y = 0; y < 2; ++y) {
696df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark                canvas->save();
706df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark                canvas->translate(x * 430.f, y * 355.f);
716df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark                SkScalar intervals[] = { 5 + (x ? 0 : 0.0001f + 0.0001f), 10 };
726df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark                flower(canvas, path, intervals, y ? SkPaint::kDefault_Join : SkPaint::kRound_Join);
736df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark                canvas->restore();
746df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark            }
756df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark        }
766df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark    }
776df8e3495a677a5df2476d2ff3bbe878fd178e4bcaryclark
788d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.comprivate:
798d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com    typedef GM INHERITED;
808d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com};
818d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
828d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com//////////////////////////////////////////////////////////////////////////////
838d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.com
848d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.comstatic skiagm::GM* MyFactory(void*) { return new DashCubicsGM; }
858d850be3aa5164879cdaee5e98caaa507eb3d117reed@google.comstatic skiagm::GMRegistry reg(MyFactory);
86