OLD | NEW |
| (Empty) |
1 /* | |
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 | |
10 #include "SkDashPathEffect.h" | |
11 #include "SkPaint.h" | |
12 #include "SkPath.h" | |
13 #include "SkRRect.h" | |
14 | |
15 namespace skiagm { | |
16 | |
17 class ContourStartGM : public GM { | |
18 public: | |
19 ContourStartGM() { | |
20 const SkScalar kMaxDashLen = 100; | |
21 const SkScalar kDashGrowth = 1.2f; | |
22 | |
23 SkSTArray<100, SkScalar> intervals; | |
24 for (SkScalar len = 1; len < kMaxDashLen; len *= kDashGrowth) { | |
25 intervals.push_back(len); | |
26 intervals.push_back(len); | |
27 } | |
28 | |
29 SkAutoTUnref<SkPathEffect> effect( | |
30 SkDashPathEffect::Create(intervals.begin(), intervals.count(), 0)); | |
31 | |
32 fDashPaint.setAntiAlias(true); | |
33 fDashPaint.setStyle(SkPaint::kStroke_Style); | |
34 fDashPaint.setStrokeWidth(6); | |
35 fDashPaint.setColor(0xff008000); | |
36 fDashPaint.setPathEffect(effect); | |
37 | |
38 fPointsPaint.setColor(0xff800000); | |
39 fPointsPaint.setStrokeWidth(3); | |
40 | |
41 fRect = SkRect::MakeLTRB(10, 10, 100, 70); | |
42 } | |
43 | |
44 protected: | |
45 SkString onShortName() override { | |
46 return SkString("contour_start"); | |
47 } | |
48 | |
49 SkISize onISize() override { return SkISize::Make(kImageWidth, kImageHeight)
; } | |
50 | |
51 void onDraw(SkCanvas* canvas) override { | |
52 | |
53 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { | |
54 SkPath path; | |
55 path.addRect(rect, dir, startIndex); | |
56 return path; | |
57 }); | |
58 | |
59 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { | |
60 SkPath path; | |
61 path.addOval(rect, dir, startIndex); | |
62 return path; | |
63 }); | |
64 | |
65 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { | |
66 SkRRect rrect; | |
67 const SkVector radii[4] = { {15, 15}, {15, 15}, {15, 15}, {15, 15}}; | |
68 rrect.setRectRadii(rect, radii); | |
69 | |
70 SkPath path; | |
71 path.addRRect(rrect, dir, startIndex); | |
72 return path; | |
73 }); | |
74 | |
75 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { | |
76 SkRRect rrect; | |
77 rrect.setRect(rect); | |
78 | |
79 SkPath path; | |
80 path.addRRect(rrect, dir, startIndex); | |
81 return path; | |
82 }); | |
83 | |
84 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { | |
85 SkRRect rrect; | |
86 rrect.setOval(rect); | |
87 | |
88 SkPath path; | |
89 path.addRRect(rrect, dir, startIndex); | |
90 return path; | |
91 }); | |
92 | |
93 } | |
94 | |
95 private: | |
96 static const int kImageWidth = 1200; | |
97 static const int kImageHeight = 600; | |
98 | |
99 SkPaint fDashPaint, fPointsPaint; | |
100 SkRect fRect; | |
101 | |
102 void drawDirs(SkCanvas* canvas, | |
103 SkPath (*makePath)(const SkRect&, SkPath::Direction, unsigned)
) const { | |
104 drawOneColumn(canvas, SkPath::kCW_Direction, makePath); | |
105 canvas->translate(kImageWidth / 10, 0); | |
106 drawOneColumn(canvas, SkPath::kCCW_Direction, makePath); | |
107 canvas->translate(kImageWidth / 10, 0); | |
108 } | |
109 | |
110 void drawOneColumn(SkCanvas* canvas, SkPath::Direction dir, | |
111 SkPath (*makePath)(const SkRect&, SkPath::Direction, unsi
gned)) const { | |
112 SkAutoCanvasRestore acr(canvas, true); | |
113 | |
114 for (unsigned i = 0; i < 8; ++i) { | |
115 const SkPath path = makePath(fRect, dir, i); | |
116 canvas->drawPath(path, fDashPaint); | |
117 | |
118 const int n = path.countPoints(); | |
119 SkAutoTArray<SkPoint> points(n); | |
120 path.getPoints(points.get(), n); | |
121 canvas->drawPoints(SkCanvas::kPoints_PointMode, n, points.get(), fPo
intsPaint); | |
122 | |
123 canvas->translate(0, kImageHeight / 8); | |
124 } | |
125 } | |
126 | |
127 typedef GM INHERITED; | |
128 }; | |
129 | |
130 DEF_GM( return new ContourStartGM(); ) | |
131 | |
132 } // namespace skiagm | |
133 | |
OLD | NEW |