• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2014 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "gm.h"
9 #include "SkPath.h"
10 #include "SkRandom.h"
11 
12 #define W   400
13 #define H   400
14 #define N   10
15 
16 static const SkScalar SH = SkIntToScalar(H);
17 
rnd_quad(SkPath * p,SkPaint * paint,SkRandom & rand)18 static void rnd_quad(SkPath* p, SkPaint* paint, SkRandom& rand) {
19     p->moveTo(rand.nextRangeScalar(0,  W), rand.nextRangeScalar(0,  H));
20     for (int x = 0; x < 2; ++x) {
21         p->quadTo(rand.nextRangeScalar(W / 4,  W), rand.nextRangeScalar(0,  H),
22                 rand.nextRangeScalar(0,  W), rand.nextRangeScalar(H / 4,  H));
23     }
24     paint->setColor(rand.nextU());
25     SkScalar width = rand.nextRangeScalar(1, 5);
26     width *= width;
27     paint->setStrokeWidth(width);
28     paint->setAlpha(0xFF);
29 }
30 
rnd_cubic(SkPath * p,SkPaint * paint,SkRandom & rand)31 static void rnd_cubic(SkPath* p, SkPaint* paint, SkRandom& rand) {
32     p->moveTo(rand.nextRangeScalar(0,  W), rand.nextRangeScalar(0,  H));
33     for (int x = 0; x < 2; ++x) {
34         p->cubicTo(rand.nextRangeScalar(W / 4,  W), rand.nextRangeScalar(0,  H),
35                 rand.nextRangeScalar(0,  W), rand.nextRangeScalar(H / 4,  H),
36                 rand.nextRangeScalar(W / 4,  W), rand.nextRangeScalar(H / 4,  H));
37     }
38     paint->setColor(rand.nextU());
39     SkScalar width = rand.nextRangeScalar(1, 5);
40     width *= width;
41     paint->setStrokeWidth(width);
42     paint->setAlpha(0xFF);
43 }
44 
45 class BeziersGM : public skiagm::GM {
46 public:
BeziersGM()47     BeziersGM() {}
48 
49 protected:
50 
onShortName()51     SkString onShortName() override {
52         return SkString("beziers");
53     }
54 
onISize()55     SkISize onISize() override {
56         return SkISize::Make(W, H*2);
57     }
58 
onDraw(SkCanvas * canvas)59     void onDraw(SkCanvas* canvas) override {
60         SkPaint paint;
61         paint.setStyle(SkPaint::kStroke_Style);
62         paint.setStrokeWidth(SkIntToScalar(9)/2);
63         paint.setAntiAlias(true);
64 
65         SkRandom rand;
66         for (int i = 0; i < N; i++) {
67             SkPath p;
68             rnd_quad(&p, &paint, rand);
69             canvas->drawPath(p, paint);
70         }
71         canvas->translate(0, SH);
72         for (int i = 0; i < N; i++) {
73             SkPath p;
74             rnd_cubic(&p, &paint, rand);
75             canvas->drawPath(p, paint);
76         }
77     }
78 
79 private:
80     typedef skiagm::GM INHERITED;
81 };
82 
83 DEF_GM( return new BeziersGM; )
84