blob: 1386cdd0e78e6a2c985f0b20cdc8c6f2d247b61a [file] [log] [blame]
reed19d8f9f2015-01-29 10:48:16 -08001/*
2 * Copyright 2015 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 "SkCanvas.h"
10#include "SkRandom.h"
11
12class AddArcGM : public skiagm::GM {
reedd9adfe62015-02-01 19:01:04 -080013public:
14 AddArcGM() : fRotate(0) {}
15
reed19d8f9f2015-01-29 10:48:16 -080016protected:
17 SkString onShortName() SK_OVERRIDE { return SkString("addarc"); }
18
19 SkISize onISize() SK_OVERRIDE { return SkISize::Make(1040, 1040); }
20
21 void onDraw(SkCanvas* canvas) SK_OVERRIDE {
22 canvas->translate(20, 20);
23
24 SkRect r = SkRect::MakeWH(1000, 1000);
25
26 SkPaint paint;
27 paint.setAntiAlias(true);
28 paint.setStyle(SkPaint::kStroke_Style);
29 paint.setStrokeWidth(15);
30
31 const SkScalar inset = paint.getStrokeWidth() + 4;
32 const SkScalar sweepAngle = 345;
33 SkRandom rand;
34
reedd9adfe62015-02-01 19:01:04 -080035 SkScalar sign = 1;
reed19d8f9f2015-01-29 10:48:16 -080036 while (r.width() > paint.getStrokeWidth() * 3) {
37 paint.setColor(rand.nextU() | (0xFF << 24));
38 SkScalar startAngle = rand.nextUScalar1() * 360;
39
reedd9adfe62015-02-01 19:01:04 -080040 SkScalar speed = SkScalarSqrt(16 / r.width()) * 0.5f;
41 startAngle += fRotate * 360 * speed * sign;
42
reed19d8f9f2015-01-29 10:48:16 -080043 SkPath path;
44 path.addArc(r, startAngle, sweepAngle);
45 canvas->drawPath(path, paint);
46
47 r.inset(inset, inset);
reedd9adfe62015-02-01 19:01:04 -080048 sign = -sign;
reed19d8f9f2015-01-29 10:48:16 -080049 }
50 }
51
reedd9adfe62015-02-01 19:01:04 -080052 bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE {
53 fRotate = SkDoubleToScalar(fmod(curr * 0.001, 360));
54 return true;
55 }
56
reed19d8f9f2015-01-29 10:48:16 -080057private:
reedd9adfe62015-02-01 19:01:04 -080058 SkScalar fRotate;
reed19d8f9f2015-01-29 10:48:16 -080059 typedef skiagm::GM INHERITED;
60};
61DEF_GM( return new AddArcGM; )