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: 42a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 43a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 44a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 45a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 46f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual SkString onShortName() { 47f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org return SkString("strokes_round"); 48f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 49ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 50f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual SkISize onISize() { 514384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return SkISize::Make(W, H*2); 52f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 53ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 54ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com virtual void onDraw(SkCanvas* canvas) { 55f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkPaint paint; 56f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setStyle(SkPaint::kStroke_Style); 57f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setStrokeWidth(SkIntToScalar(9)/2); 58ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 59f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int y = 0; y < 2; y++) { 60f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setAntiAlias(!!y); 61f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkAutoCanvasRestore acr(canvas, true); 62f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->translate(0, SH * y); 63f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->clipRect(SkRect::MakeLTRB( 64f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkIntToScalar(2), SkIntToScalar(2) 65f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org , SW - SkIntToScalar(2), SH - SkIntToScalar(2) 66f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org )); 67ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 68e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 69f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int i = 0; i < N; i++) { 70f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkRect r; 71f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rnd_rect(&r, &paint, rand); 72f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->drawOval(r, paint); 73f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rnd_rect(&r, &paint, rand); 74f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->drawRoundRect(r, r.width()/4, r.height()/4, paint); 75f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rnd_rect(&r, &paint, rand); 76f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 77f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 78f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 79ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 80f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprivate: 814384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com typedef skiagm::GM INHERITED; 82f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org}; 83f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 844384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass Strokes2GM : public skiagm::GM { 85f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkPath fPath; 86f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgpublic: 87f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org Strokes2GM() { 88e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 89f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org fPath.moveTo(0, 0); 90f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int i = 0; i < 13; i++) { 91f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkScalar x = rand.nextUScalar1() * (W >> 1); 92f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkScalar y = rand.nextUScalar1() * (H >> 1); 93f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org fPath.lineTo(x, y); 94f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 95f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 96ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 97f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprotected: 98a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 99a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 100a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 101a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 102f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual SkString onShortName() { 103f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org return SkString("strokes_poly"); 104f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 105ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 106f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual SkISize onISize() { 1074384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return SkISize::Make(W, H*2); 108f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 109ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 110f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org static void rotate(SkScalar angle, SkScalar px, SkScalar py, SkCanvas* canvas) { 111f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkMatrix matrix; 112f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org matrix.setRotate(angle, px, py); 113f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->concat(matrix); 114f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 115f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 116f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org virtual void onDraw(SkCanvas* canvas) { 117f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->drawColor(SK_ColorWHITE); 118ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 119f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkPaint paint; 120f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setStyle(SkPaint::kStroke_Style); 121f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setStrokeWidth(SkIntToScalar(9)/2); 122ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 123f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int y = 0; y < 2; y++) { 124f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org paint.setAntiAlias(!!y); 125f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkAutoCanvasRestore acr(canvas, true); 126f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->translate(0, SH * y); 127f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->clipRect(SkRect::MakeLTRB(SkIntToScalar(2), 128f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkIntToScalar(2), 129f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SW - SkIntToScalar(2), 130f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SH - SkIntToScalar(2))); 131ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 132e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 133f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org for (int i = 0; i < N/2; i++) { 134f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org SkRect r; 135f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rnd_rect(&r, &paint, rand); 136f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org rotate(SkIntToScalar(15), SW/2, SH/2, canvas); 137f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org canvas->drawPath(fPath, paint); 138f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 139f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 140f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org } 141ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 142f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprivate: 1434384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com typedef skiagm::GM INHERITED; 144f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org}; 145f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 146f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org////////////////////////////////////////////////////////////////////////////// 147f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 1484384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic SkRect inset(const SkRect& r) { 1494384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkRect rr(r); 1504384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com rr.inset(r.width()/10, r.height()/10); 1514384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return rr; 1524384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com} 153f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org 1544384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass Strokes3GM : public skiagm::GM { 1554384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make0(SkPath* path, const SkRect& bounds, SkString* title) { 1564384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(bounds, SkPath::kCW_Direction); 1574384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(inset(bounds), SkPath::kCW_Direction); 1584384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CW"); 1594384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 160ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1614384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make1(SkPath* path, const SkRect& bounds, SkString* title) { 1624384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(bounds, SkPath::kCW_Direction); 1634384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(inset(bounds), SkPath::kCCW_Direction); 1644384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CCW"); 1654384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 166ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1674384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make2(SkPath* path, const SkRect& bounds, SkString* title) { 1684384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(bounds, SkPath::kCW_Direction); 1694384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(inset(bounds), SkPath::kCW_Direction); 1704384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CW"); 1714384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 172ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1734384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make3(SkPath* path, const SkRect& bounds, SkString* title) { 1744384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(bounds, SkPath::kCW_Direction); 1754384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(inset(bounds), SkPath::kCCW_Direction); 1764384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CCW"); 1774384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 178ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1794384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make4(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::kCW_Direction); 1844384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CW"); 1854384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 186ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1874384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static void make5(SkPath* path, const SkRect& bounds, SkString* title) { 1884384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addRect(bounds, SkPath::kCW_Direction); 1894384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkRect r = bounds; 1904384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com r.inset(bounds.width() / 10, -bounds.height() / 10); 1914384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com path->addOval(r, SkPath::kCCW_Direction); 1924384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com title->set("CW CCW"); 1934384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 1944384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 1954384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.compublic: 1964384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com Strokes3GM() {} 197ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1984384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comprotected: 199a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 200a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 201a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 202a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 2034384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com virtual SkString onShortName() { 2044384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return SkString("strokes3"); 2054384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 206ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2074384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com virtual SkISize onISize() { 2084384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com return SkISize::Make(W, H*2); 2094384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 210ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2114384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com virtual void onDraw(SkCanvas* canvas) { 2124384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint origPaint; 2134384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com origPaint.setAntiAlias(true); 2144384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com origPaint.setStyle(SkPaint::kStroke_Style); 2154384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint fillPaint(origPaint); 2164384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com fillPaint.setColor(SK_ColorRED); 2174384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint strokePaint(origPaint); 2184384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com strokePaint.setColor(0xFF4444FF); 2194384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2204384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com void (*procs[])(SkPath*, const SkRect&, SkString*) = { 2214384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com make0, make1, make2, make3, make4, make5 2224384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com }; 2234384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2244384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); 2254384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2264384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkRect bounds = SkRect::MakeWH(SkIntToScalar(50), SkIntToScalar(50)); 2274384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkScalar dx = bounds.width() * 4/3; 2284384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkScalar dy = bounds.height() * 5; 2294384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2304384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(procs); ++i) { 2314384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPath orig; 2324384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkString str; 2334384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com procs[i](&orig, bounds, &str); 234ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2354384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->save(); 2364384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com for (int j = 0; j < 13; ++j) { 2374384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com strokePaint.setStrokeWidth(SK_Scalar1 * j * j); 2384384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->drawPath(orig, strokePaint); 2394384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->drawPath(orig, origPaint); 2404384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPath fill; 2414384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com strokePaint.getFillPath(orig, &fill); 2424384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->drawPath(fill, fillPaint); 2434384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->translate(dx + strokePaint.getStrokeWidth(), 0); 2444384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 2454384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->restore(); 2464384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->translate(0, dy); 2474384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 2484384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 249ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2504384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comprivate: 2514384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com typedef skiagm::GM INHERITED; 2524384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com}; 2534384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2544384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com////////////////////////////////////////////////////////////////////////////// 2554384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2564384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F0(void*) { return new StrokesGM; } 2574384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F1(void*) { return new Strokes2GM; } 2584384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F2(void*) { return new Strokes3GM; } 2594384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 2604384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R0(F0); 2614384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R1(F1); 2624384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R2(F2); 263