1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 11 #include "gm.h" 12 #include "SkRandom.h" 13 14 namespace skiagm { 15 16 #define W 400 17 #define H 400 18 #define N 100 19 20 static const SkScalar SW = SkIntToScalar(W); 21 static const SkScalar SH = SkIntToScalar(H); 22 23 class StrokeRectsGM : public GM { 24 public: 25 StrokeRectsGM() {} 26 27 protected: 28 29 SkString onShortName() override { 30 return SkString("strokerects"); 31 } 32 33 SkISize onISize() override { 34 return SkISize::Make(W*2, H*2); 35 } 36 37 static void rnd_rect(SkRect* r, SkRandom& rand) { 38 SkScalar x = rand.nextUScalar1() * W; 39 SkScalar y = rand.nextUScalar1() * H; 40 SkScalar w = rand.nextUScalar1() * (W >> 2); 41 SkScalar h = rand.nextUScalar1() * (H >> 2); 42 SkScalar hoffset = rand.nextSScalar1(); 43 SkScalar woffset = rand.nextSScalar1(); 44 45 r->set(x, y, x + w, y + h); 46 r->offset(-w/2 + woffset, -h/2 + hoffset); 47 } 48 49 void onDraw(SkCanvas* canvas) override { 50 SkPaint paint; 51 paint.setStyle(SkPaint::kStroke_Style); 52 53 for (int y = 0; y < 2; y++) { 54 paint.setAntiAlias(!!y); 55 for (int x = 0; x < 2; x++) { 56 paint.setStrokeWidth(x * SkIntToScalar(3)); 57 58 SkAutoCanvasRestore acr(canvas, true); 59 canvas->translate(SW * x, SH * y); 60 canvas->clipRect(SkRect::MakeLTRB( 61 SkIntToScalar(2), SkIntToScalar(2) 62 , SW - SkIntToScalar(2), SH - SkIntToScalar(2) 63 )); 64 65 SkRandom rand; 66 for (int i = 0; i < N; i++) { 67 SkRect r; 68 rnd_rect(&r, rand); 69 canvas->drawRect(r, paint); 70 } 71 } 72 } 73 } 74 75 private: 76 typedef GM INHERITED; 77 }; 78 79 ////////////////////////////////////////////////////////////////////////////// 80 81 static GM* MyFactory(void*) { return new StrokeRectsGM; } 82 static GMRegistry reg(MyFactory); 83 84 } 85