blob: 3dd8fa79007bffd91d627ab8805cf6357b41e14f [file] [log] [blame]
caryclarkfeff7d22014-10-09 05:36:03 -07001/*
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
caryclarkfeff7d22014-10-09 05:36:03 -070015static const SkScalar SH = SkIntToScalar(H);
16
scroggof9d61012014-12-15 12:54:51 -080017static void rnd_quad(SkPath* p, SkPaint* paint, SkRandom& rand) {
caryclarkfeff7d22014-10-09 05:36:03 -070018 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
scroggof9d61012014-12-15 12:54:51 -080030static void rnd_cubic(SkPath* p, SkPaint* paint, SkRandom& rand) {
caryclarkfeff7d22014-10-09 05:36:03 -070031 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
44class BeziersGM : public skiagm::GM {
45public:
46 BeziersGM() {}
47
48protected:
caryclarkfeff7d22014-10-09 05:36:03 -070049
mtklein36352bf2015-03-25 18:17:31 -070050 SkString onShortName() override {
caryclarkfeff7d22014-10-09 05:36:03 -070051 return SkString("beziers");
52 }
53
mtklein36352bf2015-03-25 18:17:31 -070054 SkISize onISize() override {
caryclarkfeff7d22014-10-09 05:36:03 -070055 return SkISize::Make(W, H*2);
56 }
57
mtklein36352bf2015-03-25 18:17:31 -070058 void onDraw(SkCanvas* canvas) override {
caryclarkfeff7d22014-10-09 05:36:03 -070059 SkPaint paint;
60 paint.setStyle(SkPaint::kStroke_Style);
61 paint.setStrokeWidth(SkIntToScalar(9)/2);
62 paint.setAntiAlias(true);
63
scroggof9d61012014-12-15 12:54:51 -080064 SkRandom rand;
caryclarkfeff7d22014-10-09 05:36:03 -070065 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
78private:
79 typedef skiagm::GM INHERITED;
80};
81
82static skiagm::GM* F0(void*) { return new BeziersGM; }
83static skiagm::GMRegistry R0(F0);