blob: 2371fdd0ebb9458bb12a184fdcfb259fb3cd2b4c [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:
49 virtual uint32_t onGetFlags() const SK_OVERRIDE {
50 return kSkipTiled_Flag;
51 }
52
53 virtual SkString onShortName() {
54 return SkString("beziers");
55 }
56
57 virtual SkISize onISize() {
58 return SkISize::Make(W, H*2);
59 }
60
61 virtual void onDraw(SkCanvas* canvas) {
62 SkPaint paint;
63 paint.setStyle(SkPaint::kStroke_Style);
64 paint.setStrokeWidth(SkIntToScalar(9)/2);
65 paint.setAntiAlias(true);
66
scroggof9d61012014-12-15 12:54:51 -080067 SkRandom rand;
caryclarkfeff7d22014-10-09 05:36:03 -070068 for (int i = 0; i < N; i++) {
69 SkPath p;
70 rnd_quad(&p, &paint, rand);
71 canvas->drawPath(p, paint);
72 }
73 canvas->translate(0, SH);
74 for (int i = 0; i < N; i++) {
75 SkPath p;
76 rnd_cubic(&p, &paint, rand);
77 canvas->drawPath(p, paint);
78 }
79 }
80
81private:
82 typedef skiagm::GM INHERITED;
83};
84
85static skiagm::GM* F0(void*) { return new BeziersGM; }
86static skiagm::GMRegistry R0(F0);