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 "SkRandom.h"
10
11 #define W 400
12 #define H 400
13 #define N 10
14
15 static const SkScalar SH = SkIntToScalar(H);
16
rnd_quad(SkPath * p,SkPaint * paint,SkRandom & rand)17 static void rnd_quad(SkPath* p, SkPaint* paint, SkRandom& rand) {
18 p->moveTo(rand.nextRangeScalar(0, W), rand.nextRangeScalar(0, H));
19 for (int x = 0; x < 2; ++x) {
20 p->quadTo(rand.nextRangeScalar(W / 4, W), rand.nextRangeScalar(0, H),
21 rand.nextRangeScalar(0, W), rand.nextRangeScalar(H / 4, H));
22 }
23 paint->setColor(rand.nextU());
24 SkScalar width = rand.nextRangeScalar(1, 5);
25 width *= width;
26 paint->setStrokeWidth(width);
27 paint->setAlpha(0xFF);
28 }
29
rnd_cubic(SkPath * p,SkPaint * paint,SkRandom & rand)30 static void rnd_cubic(SkPath* p, SkPaint* paint, SkRandom& rand) {
31 p->moveTo(rand.nextRangeScalar(0, W), rand.nextRangeScalar(0, H));
32 for (int x = 0; x < 2; ++x) {
33 p->cubicTo(rand.nextRangeScalar(W / 4, W), rand.nextRangeScalar(0, H),
34 rand.nextRangeScalar(0, W), rand.nextRangeScalar(H / 4, H),
35 rand.nextRangeScalar(W / 4, W), rand.nextRangeScalar(H / 4, H));
36 }
37 paint->setColor(rand.nextU());
38 SkScalar width = rand.nextRangeScalar(1, 5);
39 width *= width;
40 paint->setStrokeWidth(width);
41 paint->setAlpha(0xFF);
42 }
43
44 class BeziersGM : public skiagm::GM {
45 public:
BeziersGM()46 BeziersGM() {}
47
48 protected:
49
onShortName()50 SkString onShortName() override {
51 return SkString("beziers");
52 }
53
onISize()54 SkISize onISize() override {
55 return SkISize::Make(W, H*2);
56 }
57
onDraw(SkCanvas * canvas)58 void onDraw(SkCanvas* canvas) override {
59 SkPaint paint;
60 paint.setStyle(SkPaint::kStroke_Style);
61 paint.setStrokeWidth(SkIntToScalar(9)/2);
62 paint.setAntiAlias(true);
63
64 SkRandom rand;
65 for (int i = 0; i < N; i++) {
66 SkPath p;
67 rnd_quad(&p, &paint, rand);
68 canvas->drawPath(p, paint);
69 }
70 canvas->translate(0, SH);
71 for (int i = 0; i < N; i++) {
72 SkPath p;
73 rnd_cubic(&p, &paint, rand);
74 canvas->drawPath(p, paint);
75 }
76 }
77
78 private:
79 typedef skiagm::GM INHERITED;
80 };
81
F0(void *)82 static skiagm::GM* F0(void*) { return new BeziersGM; }
83 static skiagm::GMRegistry R0(F0);
84