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