xref: /aosp_15_r20/external/skia/gm/convexpaths.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2011 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #include "gm/gm.h"
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColor.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkMatrix.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPathBuilder.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRRect.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRect.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h"
17*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h"
18*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h"
19*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h"
20*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h"
21*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkRandom.h"
22*c8dee2aaSAndroid Build Coastguard Worker 
23*c8dee2aaSAndroid Build Coastguard Worker using namespace skia_private;
24*c8dee2aaSAndroid Build Coastguard Worker 
25*c8dee2aaSAndroid Build Coastguard Worker namespace {
26*c8dee2aaSAndroid Build Coastguard Worker 
27*c8dee2aaSAndroid Build Coastguard Worker class SkDoOnce {
28*c8dee2aaSAndroid Build Coastguard Worker public:
SkDoOnce()29*c8dee2aaSAndroid Build Coastguard Worker     SkDoOnce() { fDidOnce = false; }
30*c8dee2aaSAndroid Build Coastguard Worker     // Make noncopyable
31*c8dee2aaSAndroid Build Coastguard Worker     SkDoOnce(SkDoOnce&) = delete;
32*c8dee2aaSAndroid Build Coastguard Worker     SkDoOnce& operator=(SkDoOnce&) = delete;
33*c8dee2aaSAndroid Build Coastguard Worker 
needToDo() const34*c8dee2aaSAndroid Build Coastguard Worker     bool needToDo() const { return !fDidOnce; }
alreadyDone() const35*c8dee2aaSAndroid Build Coastguard Worker     bool alreadyDone() const { return fDidOnce; }
accomplished()36*c8dee2aaSAndroid Build Coastguard Worker     void accomplished() {
37*c8dee2aaSAndroid Build Coastguard Worker         SkASSERT(!fDidOnce);
38*c8dee2aaSAndroid Build Coastguard Worker         fDidOnce = true;
39*c8dee2aaSAndroid Build Coastguard Worker     }
40*c8dee2aaSAndroid Build Coastguard Worker 
41*c8dee2aaSAndroid Build Coastguard Worker private:
42*c8dee2aaSAndroid Build Coastguard Worker     bool fDidOnce;
43*c8dee2aaSAndroid Build Coastguard Worker };
44*c8dee2aaSAndroid Build Coastguard Worker 
45*c8dee2aaSAndroid Build Coastguard Worker class ConvexPathsGM : public skiagm::GM {
46*c8dee2aaSAndroid Build Coastguard Worker     SkDoOnce fOnce;
47*c8dee2aaSAndroid Build Coastguard Worker 
onOnceBeforeDraw()48*c8dee2aaSAndroid Build Coastguard Worker     void onOnceBeforeDraw() override { this->setBGColor(0xFF000000); }
49*c8dee2aaSAndroid Build Coastguard Worker 
getName() const50*c8dee2aaSAndroid Build Coastguard Worker     SkString getName() const override { return SkString("convexpaths"); }
51*c8dee2aaSAndroid Build Coastguard Worker 
getISize()52*c8dee2aaSAndroid Build Coastguard Worker     SkISize getISize() override { return {1200, 1100}; }
53*c8dee2aaSAndroid Build Coastguard Worker 
makePaths()54*c8dee2aaSAndroid Build Coastguard Worker     void makePaths() {
55*c8dee2aaSAndroid Build Coastguard Worker         if (fOnce.alreadyDone()) {
56*c8dee2aaSAndroid Build Coastguard Worker             return;
57*c8dee2aaSAndroid Build Coastguard Worker         }
58*c8dee2aaSAndroid Build Coastguard Worker         fOnce.accomplished();
59*c8dee2aaSAndroid Build Coastguard Worker 
60*c8dee2aaSAndroid Build Coastguard Worker         SkPathBuilder b;
61*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 0)
62*c8dee2aaSAndroid Build Coastguard Worker                           .quadTo(50, 100, 0, 100)
63*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(0, 0)
64*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
65*c8dee2aaSAndroid Build Coastguard Worker 
66*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 50)
67*c8dee2aaSAndroid Build Coastguard Worker                           .quadTo(50, 0, 100, 50)
68*c8dee2aaSAndroid Build Coastguard Worker                           .quadTo(50, 100, 0, 50)
69*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
70*c8dee2aaSAndroid Build Coastguard Worker 
71*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Rect({0, 0, 100, 100}, SkPathDirection::kCW));
72*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Rect({0, 0, 100, 100}, SkPathDirection::kCCW));
73*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Circle(50, 50, 50, SkPathDirection::kCW));
74*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Oval(SkRect::MakeXYWH(0, 0, 50, 100), SkPathDirection::kCW));
75*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Oval(SkRect::MakeXYWH(0, 0, 100, 5), SkPathDirection::kCCW));
76*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Oval(SkRect::MakeXYWH(0, 0, 1, 100), SkPathDirection::kCCW));
77*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::RRect(SkRRect::MakeRectXY({0, 0, 100, 100}, 40, 20),
78*c8dee2aaSAndroid Build Coastguard Worker                                        SkPathDirection::kCW));
79*c8dee2aaSAndroid Build Coastguard Worker 
80*c8dee2aaSAndroid Build Coastguard Worker         // large number of points
81*c8dee2aaSAndroid Build Coastguard Worker         static constexpr int kLength = 100;
82*c8dee2aaSAndroid Build Coastguard Worker         static constexpr int kPtsPerSide = (1 << 12);
83*c8dee2aaSAndroid Build Coastguard Worker 
84*c8dee2aaSAndroid Build Coastguard Worker         b.moveTo(0, 0);
85*c8dee2aaSAndroid Build Coastguard Worker         for (int i = 1; i < kPtsPerSide; ++i) { // skip the first point due to moveTo.
86*c8dee2aaSAndroid Build Coastguard Worker             b.lineTo(kLength * SkIntToScalar(i) / kPtsPerSide, 0);
87*c8dee2aaSAndroid Build Coastguard Worker         }
88*c8dee2aaSAndroid Build Coastguard Worker         for (int i = 0; i < kPtsPerSide; ++i) {
89*c8dee2aaSAndroid Build Coastguard Worker             b.lineTo(kLength, kLength * SkIntToScalar(i) / kPtsPerSide);
90*c8dee2aaSAndroid Build Coastguard Worker         }
91*c8dee2aaSAndroid Build Coastguard Worker         for (int i = kPtsPerSide; i > 0; --i) {
92*c8dee2aaSAndroid Build Coastguard Worker             b.lineTo(kLength * SkIntToScalar(i) / kPtsPerSide, kLength);
93*c8dee2aaSAndroid Build Coastguard Worker         }
94*c8dee2aaSAndroid Build Coastguard Worker         for (int i = kPtsPerSide; i > 0; --i) {
95*c8dee2aaSAndroid Build Coastguard Worker             b.lineTo(0, kLength * SkIntToScalar(i) / kPtsPerSide);
96*c8dee2aaSAndroid Build Coastguard Worker         }
97*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.detach());
98*c8dee2aaSAndroid Build Coastguard Worker 
99*c8dee2aaSAndroid Build Coastguard Worker         // shallow diagonals
100*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Polygon({{0,0}, {100,1}, {98,100}, {3,96}}, false));
101*c8dee2aaSAndroid Build Coastguard Worker 
102*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.arcTo(SkRect::MakeXYWH(0, 0, 50, 100), 25, 130, false)
103*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
104*c8dee2aaSAndroid Build Coastguard Worker 
105*c8dee2aaSAndroid Build Coastguard Worker         // cubics
106*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.cubicTo(  1,  1, 10,  90, 0, 100).detach());
107*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.cubicTo(100, 50, 20, 100, 0,   0).detach());
108*c8dee2aaSAndroid Build Coastguard Worker 
109*c8dee2aaSAndroid Build Coastguard Worker         // path that has a cubic with a repeated first control point and
110*c8dee2aaSAndroid Build Coastguard Worker         // a repeated last control point.
111*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(10, 10)
112*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(10, 10, 10, 0, 20, 0)
113*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(40, 0)
114*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(40, 0, 50, 0, 50, 10)
115*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
116*c8dee2aaSAndroid Build Coastguard Worker 
117*c8dee2aaSAndroid Build Coastguard Worker         // path that has two cubics with repeated middle control points.
118*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(10, 10)
119*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(10, 0, 10, 0, 20, 0)
120*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(40, 0)
121*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(50, 0, 50, 0, 50, 10)
122*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
123*c8dee2aaSAndroid Build Coastguard Worker 
124*c8dee2aaSAndroid Build Coastguard Worker         // cubic where last three points are almost a line
125*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 228.0f/8)
126*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo( 628.0f/ 8,  82.0f/8,
127*c8dee2aaSAndroid Build Coastguard Worker                                    1255.0f/ 8, 141.0f/8,
128*c8dee2aaSAndroid Build Coastguard Worker                                    1883.0f/ 8, 202.0f/8)
129*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
130*c8dee2aaSAndroid Build Coastguard Worker 
131*c8dee2aaSAndroid Build Coastguard Worker         // flat cubic where the at end point tangents both point outward.
132*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(10, 0)
133*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(0, 1, 30, 1, 20, 0)
134*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
135*c8dee2aaSAndroid Build Coastguard Worker 
136*c8dee2aaSAndroid Build Coastguard Worker         // flat cubic where initial tangent is in, end tangent out
137*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 0)
138*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(10, 1, 30, 1, 20, 0)
139*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
140*c8dee2aaSAndroid Build Coastguard Worker 
141*c8dee2aaSAndroid Build Coastguard Worker         // flat cubic where initial tangent is out, end tangent in
142*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(10, 0)
143*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(0, 1, 20, 1, 30, 0)
144*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
145*c8dee2aaSAndroid Build Coastguard Worker 
146*c8dee2aaSAndroid Build Coastguard Worker         // triangle where one edge is a degenerate quad
147*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(8.59375f, 45)
148*c8dee2aaSAndroid Build Coastguard Worker                           .quadTo(16.9921875f,   45,
149*c8dee2aaSAndroid Build Coastguard Worker                                   31.25f,        45)
150*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(100,          100)
151*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(8.59375f,      45)
152*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
153*c8dee2aaSAndroid Build Coastguard Worker 
154*c8dee2aaSAndroid Build Coastguard Worker         // triangle where one edge is a quad with a repeated point
155*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 25)
156*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(50, 0)
157*c8dee2aaSAndroid Build Coastguard Worker                           .quadTo(50, 50, 50, 50)
158*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
159*c8dee2aaSAndroid Build Coastguard Worker 
160*c8dee2aaSAndroid Build Coastguard Worker         // triangle where one edge is a cubic with a 2x repeated point
161*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 25)
162*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(50, 0)
163*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(50, 0, 50, 50, 50, 50)
164*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
165*c8dee2aaSAndroid Build Coastguard Worker 
166*c8dee2aaSAndroid Build Coastguard Worker         // triangle where one edge is a quad with a nearly repeated point
167*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 25)
168*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(50, 0)
169*c8dee2aaSAndroid Build Coastguard Worker                           .quadTo(50, 49.95f, 50, 50)
170*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
171*c8dee2aaSAndroid Build Coastguard Worker 
172*c8dee2aaSAndroid Build Coastguard Worker         // triangle where one edge is a cubic with a 3x nearly repeated point
173*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 25)
174*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(50, 0)
175*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(50, 49.95f, 50, 49.97f, 50, 50)
176*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
177*c8dee2aaSAndroid Build Coastguard Worker 
178*c8dee2aaSAndroid Build Coastguard Worker         // triangle where there is a point degenerate cubic at one corner
179*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 25)
180*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(50, 0)
181*c8dee2aaSAndroid Build Coastguard Worker                           .lineTo(50, 50)
182*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(50, 50, 50, 50, 50, 50)
183*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
184*c8dee2aaSAndroid Build Coastguard Worker 
185*c8dee2aaSAndroid Build Coastguard Worker         // point line
186*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Line({50, 50}, {50, 50}));
187*c8dee2aaSAndroid Build Coastguard Worker 
188*c8dee2aaSAndroid Build Coastguard Worker         // point quad
189*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(50, 50)
190*c8dee2aaSAndroid Build Coastguard Worker                           .quadTo(50, 50, 50, 50)
191*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
192*c8dee2aaSAndroid Build Coastguard Worker 
193*c8dee2aaSAndroid Build Coastguard Worker         // point cubic
194*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(50, 50)
195*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(50, 50, 50, 50, 50, 50)
196*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
197*c8dee2aaSAndroid Build Coastguard Worker 
198*c8dee2aaSAndroid Build Coastguard Worker         // moveTo only paths
199*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 0)
200*c8dee2aaSAndroid Build Coastguard Worker                           .moveTo(0, 0)
201*c8dee2aaSAndroid Build Coastguard Worker                           .moveTo(1, 1)
202*c8dee2aaSAndroid Build Coastguard Worker                           .moveTo(1, 1)
203*c8dee2aaSAndroid Build Coastguard Worker                           .moveTo(10, 10)
204*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
205*c8dee2aaSAndroid Build Coastguard Worker 
206*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(0, 0)
207*c8dee2aaSAndroid Build Coastguard Worker                           .moveTo(0, 0)
208*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
209*c8dee2aaSAndroid Build Coastguard Worker 
210*c8dee2aaSAndroid Build Coastguard Worker         // line degenerate
211*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.lineTo(100, 100).detach());
212*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.quadTo(100, 100, 0, 0).detach());
213*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.quadTo(100, 100, 50, 50).detach());
214*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.quadTo(50, 50, 100, 100).detach());
215*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.cubicTo(0, 0, 0, 0, 100, 100).detach());
216*c8dee2aaSAndroid Build Coastguard Worker 
217*c8dee2aaSAndroid Build Coastguard Worker         // skbug.com/8928
218*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(b.moveTo(16.875f, 192.594f)
219*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(45.625f, 192.594f, 74.375f, 192.594f, 103.125f, 192.594f)
220*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(88.75f, 167.708f, 74.375f, 142.823f, 60, 117.938f)
221*c8dee2aaSAndroid Build Coastguard Worker                           .cubicTo(45.625f, 142.823f, 31.25f, 167.708f, 16.875f, 192.594f)
222*c8dee2aaSAndroid Build Coastguard Worker                           .close()
223*c8dee2aaSAndroid Build Coastguard Worker                           .detach());
224*c8dee2aaSAndroid Build Coastguard Worker         SkMatrix m;
225*c8dee2aaSAndroid Build Coastguard Worker         m.setAll(0.1f, 0, -1, 0, 0.115207f, -2.64977f, 0, 0, 1);
226*c8dee2aaSAndroid Build Coastguard Worker         fPaths.back().transform(m);
227*c8dee2aaSAndroid Build Coastguard Worker 
228*c8dee2aaSAndroid Build Coastguard Worker         // small circle. This is listed last so that it has device coords far
229*c8dee2aaSAndroid Build Coastguard Worker         // from the origin (small area relative to x,y values).
230*c8dee2aaSAndroid Build Coastguard Worker         fPaths.push_back(SkPath::Circle(0, 0, 1.2f));
231*c8dee2aaSAndroid Build Coastguard Worker     }
232*c8dee2aaSAndroid Build Coastguard Worker 
onDraw(SkCanvas * canvas)233*c8dee2aaSAndroid Build Coastguard Worker     void onDraw(SkCanvas* canvas) override {
234*c8dee2aaSAndroid Build Coastguard Worker         this->makePaths();
235*c8dee2aaSAndroid Build Coastguard Worker 
236*c8dee2aaSAndroid Build Coastguard Worker         SkPaint paint;
237*c8dee2aaSAndroid Build Coastguard Worker         paint.setAntiAlias(true);
238*c8dee2aaSAndroid Build Coastguard Worker         SkRandom rand;
239*c8dee2aaSAndroid Build Coastguard Worker         canvas->translate(20, 20);
240*c8dee2aaSAndroid Build Coastguard Worker 
241*c8dee2aaSAndroid Build Coastguard Worker         // As we've added more paths this has gotten pretty big. Scale the whole thing down.
242*c8dee2aaSAndroid Build Coastguard Worker         canvas->scale(2.0f/3, 2.0f/3);
243*c8dee2aaSAndroid Build Coastguard Worker 
244*c8dee2aaSAndroid Build Coastguard Worker         for (int i = 0; i < fPaths.size(); ++i) {
245*c8dee2aaSAndroid Build Coastguard Worker             canvas->save();
246*c8dee2aaSAndroid Build Coastguard Worker             // position the path, and make it at off-integer coords.
247*c8dee2aaSAndroid Build Coastguard Worker             canvas->translate(200.0f * (i % 5) + 1.0f/10,
248*c8dee2aaSAndroid Build Coastguard Worker                               200.0f * (i / 5) + 9.0f/10);
249*c8dee2aaSAndroid Build Coastguard Worker             SkColor color = rand.nextU();
250*c8dee2aaSAndroid Build Coastguard Worker             color |= 0xff000000;
251*c8dee2aaSAndroid Build Coastguard Worker             paint.setColor(color);
252*c8dee2aaSAndroid Build Coastguard Worker #if 0       // This hitting on 32bit Linux builds for some paths. Temporarily disabling while it is
253*c8dee2aaSAndroid Build Coastguard Worker             // debugged.
254*c8dee2aaSAndroid Build Coastguard Worker             SkASSERT(fPaths[i].isConvex());
255*c8dee2aaSAndroid Build Coastguard Worker #endif
256*c8dee2aaSAndroid Build Coastguard Worker             canvas->drawPath(fPaths[i], paint);
257*c8dee2aaSAndroid Build Coastguard Worker             canvas->restore();
258*c8dee2aaSAndroid Build Coastguard Worker         }
259*c8dee2aaSAndroid Build Coastguard Worker     }
260*c8dee2aaSAndroid Build Coastguard Worker 
261*c8dee2aaSAndroid Build Coastguard Worker     TArray<SkPath> fPaths;
262*c8dee2aaSAndroid Build Coastguard Worker };
263*c8dee2aaSAndroid Build Coastguard Worker }  // namespace
264*c8dee2aaSAndroid Build Coastguard Worker 
265*c8dee2aaSAndroid Build Coastguard Worker DEF_GM( return new ConvexPathsGM; )
266