5ad34fb633b3fbb6cca5f94bfc0d23f4079a530f
[platform/upstream/libSkiaSharp.git] / gm / beziers.cpp
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
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
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:
46     BeziersGM() {}
47
48 protected:
49
50     SkString onShortName() SK_OVERRIDE {
51         return SkString("beziers");
52     }
53
54     SkISize onISize() SK_OVERRIDE {
55         return SkISize::Make(W, H*2);
56     }
57
58     void onDraw(SkCanvas* canvas) SK_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
82 static skiagm::GM* F0(void*) { return new BeziersGM; }
83 static skiagm::GMRegistry R0(F0);