• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2013 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 "SkPath.h"
11 
12 // Reproduces https://code.google.com/p/chromium/issues/detail?id=279014
13 
14 static const int kWidth = 640;
15 static const int kHeight = 480;
16 static const SkScalar kAngle = 0.305f;
17 
18 // Renders a string art shape.
19 // The particular shape rendered can be controlled by adjusting kAngle, from 0 to 1
20 
21 class StringArtGM : public skiagm::GM {
22 public:
StringArtGM()23     StringArtGM() {}
24 
25 protected:
onShortName()26     virtual SkString onShortName() {
27         return SkString("stringart");
28     }
29 
onISize()30     virtual SkISize onISize() {
31         return SkISize::Make(kWidth, kHeight);
32     }
33 
onDraw(SkCanvas * canvas)34     virtual void onDraw(SkCanvas* canvas) {
35         SkScalar angle = kAngle*SK_ScalarPI + SkScalarHalf(SK_ScalarPI);
36         SkScalar size = SkIntToScalar(SkMin32(kWidth, kHeight));
37         SkPoint center = SkPoint::Make(SkScalarHalf(kWidth), SkScalarHalf(kHeight));
38         SkScalar length = 5;
39         SkScalar step = angle;
40 
41         SkPath path;
42         path.moveTo(center);
43 
44         while (length < (SkScalarHalf(size) - 10.f))
45         {
46             SkPoint rp = SkPoint::Make(length*SkScalarCos(step) + center.fX,
47                                        length*SkScalarSin(step) + center.fY);
48             path.lineTo(rp);
49             length += SkScalarDiv(angle, SkScalarHalf(SK_ScalarPI));
50             step += angle;
51         }
52         path.close();
53 
54         SkPaint paint;
55         paint.setAntiAlias(true);
56         paint.setStyle(SkPaint::kStroke_Style);
57         paint.setColor(0xFF007700);
58 
59         canvas->drawPath(path, paint);
60     }
61 
62 private:
63     typedef GM INHERITED;
64 };
65 
66 DEF_GM( return new StringArtGM; )
67