strokes.cpp revision e0e7cfe44bb9d66d76120a79e5275c294bacaa22
1f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org */ 8f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 9f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 10ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 11f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#include "gm.h" 12f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#include "SkRandom.h" 13f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 14f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#define W 400 15f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#define H 400 16f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#define N 50 17f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 18f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgstatic const SkScalar SW = SkIntToScalar(W); 19f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgstatic const SkScalar SH = SkIntToScalar(H); 20f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 21e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic void rnd_rect(SkRect* r, SkPaint* paint, SkLCGRandom& rand) { 22f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkScalar x = rand.nextUScalar1() * W; 23f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkScalar y = rand.nextUScalar1() * H; 24f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkScalar w = rand.nextUScalar1() * (W >> 2); 25f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkScalar h = rand.nextUScalar1() * (H >> 2); 2617b78946096265d80215a6c946286ecaa35ea7edepoger@google.com SkScalar hoffset = rand.nextSScalar1(); 2717b78946096265d80215a6c946286ecaa35ea7edepoger@google.com SkScalar woffset = rand.nextSScalar1(); 28ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 29f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org r->set(x, y, x + w, y + h); 3017b78946096265d80215a6c946286ecaa35ea7edepoger@google.com r->offset(-w/2 + woffset, -h/2 + hoffset); 31ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 32f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint->setColor(rand.nextU()); 33f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint->setAlpha(0xFF); 34f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org} 35f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 36ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 374384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass StrokesGM : public skiagm::GM { 38f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgpublic: 39f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org StrokesGM() {} 40ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 41f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprotected: 42f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual SkString onShortName() { 43f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org return SkString("strokes_round"); 44f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 45ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 46f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual SkISize onISize() { 474384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return SkISize::Make(W, H*2); 48f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 49ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 50ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com virtual void onDraw(SkCanvas* canvas) { 51f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkPaint paint; 52f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setStyle(SkPaint::kStroke_Style); 53f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setStrokeWidth(SkIntToScalar(9)/2); 54ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 55f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int y = 0; y < 2; y++) { 56f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setAntiAlias(!!y); 57f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkAutoCanvasRestore acr(canvas, true); 58f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->translate(0, SH * y); 59f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->clipRect(SkRect::MakeLTRB( 60f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkIntToScalar(2), SkIntToScalar(2) 61f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org , SW - SkIntToScalar(2), SH - SkIntToScalar(2) 62f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org )); 63ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 64e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 65f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int i = 0; i < N; i++) { 66f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkRect r; 67f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rnd_rect(&r, &paint, rand); 68f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->drawOval(r, paint); 69f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rnd_rect(&r, &paint, rand); 70f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->drawRoundRect(r, r.width()/4, r.height()/4, paint); 71f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rnd_rect(&r, &paint, rand); 72f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 73f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 74f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 75ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 76f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprivate: 774384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com typedef skiagm::GM INHERITED; 78f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org}; 79f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 804384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass Strokes2GM : public skiagm::GM { 81f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkPath fPath; 82f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgpublic: 83f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org Strokes2GM() { 84e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 85f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org fPath.moveTo(0, 0); 86f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int i = 0; i < 13; i++) { 87f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkScalar x = rand.nextUScalar1() * (W >> 1); 88f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkScalar y = rand.nextUScalar1() * (H >> 1); 89f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org fPath.lineTo(x, y); 90f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 91f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 92ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 93f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprotected: 94f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual SkString onShortName() { 95f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org return SkString("strokes_poly"); 96f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 97ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 98f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual SkISize onISize() { 994384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return SkISize::Make(W, H*2); 100f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 101ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 102f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org static void rotate(SkScalar angle, SkScalar px, SkScalar py, SkCanvas* canvas) { 103f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkMatrix matrix; 104f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org matrix.setRotate(angle, px, py); 105f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->concat(matrix); 106f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 107f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 108f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual void onDraw(SkCanvas* canvas) { 109f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->drawColor(SK_ColorWHITE); 110ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 111f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkPaint paint; 112f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setStyle(SkPaint::kStroke_Style); 113f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setStrokeWidth(SkIntToScalar(9)/2); 114ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 115f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int y = 0; y < 2; y++) { 116f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setAntiAlias(!!y); 117f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkAutoCanvasRestore acr(canvas, true); 118f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->translate(0, SH * y); 119f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->clipRect(SkRect::MakeLTRB(SkIntToScalar(2), 120f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkIntToScalar(2), 121f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SW - SkIntToScalar(2), 122f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SH - SkIntToScalar(2))); 123ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 124e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 125f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int i = 0; i < N/2; i++) { 126f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkRect r; 127f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rnd_rect(&r, &paint, rand); 128f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rotate(SkIntToScalar(15), SW/2, SH/2, canvas); 129f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->drawPath(fPath, paint); 130f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 131f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 132f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 133ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 134f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprivate: 1354384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com typedef skiagm::GM INHERITED; 136f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org}; 137f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 138f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org////////////////////////////////////////////////////////////////////////////// 139f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 1404384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic SkRect inset(const SkRect& r) { 1414384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkRect rr(r); 1424384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com rr.inset(r.width()/10, r.height()/10); 1434384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return rr; 1444384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com} 145f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 1464384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass Strokes3GM : public skiagm::GM { 1474384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make0(SkPath* path, const SkRect& bounds, SkString* title) { 1484384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(bounds, SkPath::kCW_Direction); 1494384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(inset(bounds), SkPath::kCW_Direction); 1504384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CW"); 1514384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 152ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1534384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make1(SkPath* path, const SkRect& bounds, SkString* title) { 1544384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(bounds, SkPath::kCW_Direction); 1554384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(inset(bounds), SkPath::kCCW_Direction); 1564384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CCW"); 1574384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 158ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1594384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make2(SkPath* path, const SkRect& bounds, SkString* title) { 1604384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(bounds, SkPath::kCW_Direction); 1614384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(inset(bounds), SkPath::kCW_Direction); 1624384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CW"); 1634384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 164ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1654384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make3(SkPath* path, const SkRect& bounds, SkString* title) { 1664384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(bounds, SkPath::kCW_Direction); 1674384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(inset(bounds), SkPath::kCCW_Direction); 1684384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CCW"); 1694384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 170ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1714384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make4(SkPath* path, const SkRect& bounds, SkString* title) { 1724384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(bounds, SkPath::kCW_Direction); 1734384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkRect r = bounds; 1744384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com r.inset(bounds.width() / 10, -bounds.height() / 10); 1754384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(r, SkPath::kCW_Direction); 1764384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CW"); 1774384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 178ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1794384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make5(SkPath* path, const SkRect& bounds, SkString* title) { 1804384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(bounds, SkPath::kCW_Direction); 1814384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkRect r = bounds; 1824384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com r.inset(bounds.width() / 10, -bounds.height() / 10); 1834384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(r, SkPath::kCCW_Direction); 1844384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CCW"); 1854384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 1864384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 1874384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.compublic: 1884384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com Strokes3GM() {} 189ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1904384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comprotected: 1914384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com virtual SkString onShortName() { 1924384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return SkString("strokes3"); 1934384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 194ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1954384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com virtual SkISize onISize() { 1964384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return SkISize::Make(W, H*2); 1974384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 198ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1994384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com virtual void onDraw(SkCanvas* canvas) { 2004384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint origPaint; 2014384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com origPaint.setAntiAlias(true); 2024384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com origPaint.setStyle(SkPaint::kStroke_Style); 2034384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint fillPaint(origPaint); 2044384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com fillPaint.setColor(SK_ColorRED); 2054384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint strokePaint(origPaint); 2064384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com strokePaint.setColor(0xFF4444FF); 2074384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2084384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com void (*procs[])(SkPath*, const SkRect&, SkString*) = { 2094384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com make0, make1, make2, make3, make4, make5 2104384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com }; 2114384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2124384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); 2134384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2144384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkRect bounds = SkRect::MakeWH(SkIntToScalar(50), SkIntToScalar(50)); 2154384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkScalar dx = bounds.width() * 4/3; 2164384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkScalar dy = bounds.height() * 5; 2174384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2184384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(procs); ++i) { 2194384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPath orig; 2204384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkString str; 2214384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com procs[i](&orig, bounds, &str); 222ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2234384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->save(); 2244384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com for (int j = 0; j < 13; ++j) { 2254384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com strokePaint.setStrokeWidth(SK_Scalar1 * j * j); 2264384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->drawPath(orig, strokePaint); 2274384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->drawPath(orig, origPaint); 2284384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPath fill; 2294384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com strokePaint.getFillPath(orig, &fill); 2304384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->drawPath(fill, fillPaint); 2314384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->translate(dx + strokePaint.getStrokeWidth(), 0); 2324384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 2334384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->restore(); 2344384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->translate(0, dy); 2354384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 2364384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 237ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2384384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comprivate: 2394384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com typedef skiagm::GM INHERITED; 2404384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com}; 2414384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2424384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com////////////////////////////////////////////////////////////////////////////// 2434384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2444384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F0(void*) { return new StrokesGM; } 2454384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F1(void*) { return new Strokes2GM; } 2464384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F2(void*) { return new Strokes3GM; } 2474384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2484384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R0(F0); 2494384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R1(F1); 2504384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R2(F2); 251