Home | History | Annotate | Download | only in gm
      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