OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "gm.h" | 8 #include "gm.h" |
9 #include "SkAnimTimer.h" | 9 #include "SkAnimTimer.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 private: | 212 private: |
213 SkScalar fRotate; | 213 SkScalar fRotate; |
214 | 214 |
215 typedef skiagm::GM INHERITED; | 215 typedef skiagm::GM INHERITED; |
216 }; | 216 }; |
217 DEF_GM( return new FillCircleGM; ) | 217 DEF_GM( return new FillCircleGM; ) |
218 | 218 |
219 ////////////////////// | 219 ////////////////////// |
220 | 220 |
221 static void html_canvas_arc(SkPath* path, SkScalar x, SkScalar y, SkScalar r, Sk
Scalar start, | 221 static void html_canvas_arc(SkPath* path, SkScalar x, SkScalar y, SkScalar r, Sk
Scalar start, |
222 SkScalar end, bool ccw) { | 222 SkScalar end, bool ccw, bool callArcTo) { |
223 SkRect bounds = { x - r, y - r, x + r, y + r }; | 223 SkRect bounds = { x - r, y - r, x + r, y + r }; |
224 SkScalar sweep = ccw ? end - start : start - end; | 224 SkScalar sweep = ccw ? end - start : start - end; |
225 path->arcTo(bounds, start, sweep, false); | 225 if (callArcTo) |
| 226 path->arcTo(bounds, start, sweep, false); |
| 227 else |
| 228 path->addArc(bounds, start, sweep); |
226 } | 229 } |
227 | 230 |
228 // Lifted from canvas-arc-circumference-fill-diffs.html | 231 // Lifted from canvas-arc-circumference-fill-diffs.html |
229 class ManyArcsGM : public skiagm::GM { | 232 class ManyArcsGM : public skiagm::GM { |
230 public: | 233 public: |
231 ManyArcsGM() {} | 234 ManyArcsGM() {} |
232 | 235 |
233 protected: | 236 protected: |
234 SkString onShortName() override { return SkString("manyarcs"); } | 237 SkString onShortName() override { return SkString("manyarcs"); } |
235 | 238 |
(...skipping 26 matching lines...) Expand all Loading... |
262 if (i == SK_ARRAY_COUNT(startAngles)) { | 265 if (i == SK_ARRAY_COUNT(startAngles)) { |
263 anticlockwise = true; | 266 anticlockwise = true; |
264 sign = -1; | 267 sign = -1; |
265 } | 268 } |
266 SkScalar startAngle = startAngles[i % SK_ARRAY_COUNT(startAngles)] *
sign; | 269 SkScalar startAngle = startAngles[i % SK_ARRAY_COUNT(startAngles)] *
sign; |
267 canvas->save(); | 270 canvas->save(); |
268 for (size_t j = 0; j < SK_ARRAY_COUNT(sweepAngles); ++j) { | 271 for (size_t j = 0; j < SK_ARRAY_COUNT(sweepAngles); ++j) { |
269 SkPath path; | 272 SkPath path; |
270 path.moveTo(0, 2); | 273 path.moveTo(0, 2); |
271 html_canvas_arc(&path, 18, 15, 10, startAngle, startAngle + (swe
epAngles[j] * sign), | 274 html_canvas_arc(&path, 18, 15, 10, startAngle, startAngle + (swe
epAngles[j] * sign), |
272 anticlockwise); | 275 anticlockwise, true); |
273 path.lineTo(0, 28); | 276 path.lineTo(0, 28); |
274 canvas->drawPath(path, paint); | 277 canvas->drawPath(path, paint); |
275 canvas->translate(30, 0); | 278 canvas->translate(30, 0); |
276 } | 279 } |
277 canvas->restore(); | 280 canvas->restore(); |
278 canvas->translate(0, 40); | 281 canvas->translate(0, 40); |
279 } | 282 } |
280 } | 283 } |
281 | 284 |
282 private: | 285 private: |
283 typedef skiagm::GM INHERITED; | 286 typedef skiagm::GM INHERITED; |
284 }; | 287 }; |
285 DEF_GM( return new ManyArcsGM; ) | 288 DEF_GM( return new ManyArcsGM; ) |
| 289 |
| 290 // Lifted from https://bugs.chromium.org/p/chromium/issues/detail?id=640031 |
| 291 class TinyAngleBigRadiusArcsGM : public skiagm::GM { |
| 292 public: |
| 293 TinyAngleBigRadiusArcsGM() {} |
| 294 |
| 295 protected: |
| 296 SkString onShortName() override { return SkString("tinyanglearcs"); } |
| 297 |
| 298 SkISize onISize() override { return SkISize::Make(620, 330); } |
| 299 |
| 300 void onDraw(SkCanvas* canvas) override { |
| 301 SkPaint paint; |
| 302 paint.setAntiAlias(true); |
| 303 paint.setStyle(SkPaint::kStroke_Style); |
| 304 |
| 305 canvas->translate(50, 50); |
| 306 |
| 307 SkPath path; |
| 308 path.moveTo(50, 20); |
| 309 path.lineTo(50, 0); |
| 310 // A combination of tiny sweepAngle + large radius, we should draw a lin
e. |
| 311 html_canvas_arc(&path, 50, 100000, 100000, 270, 270.0f - 0.00572957795f, |
| 312 false, true); |
| 313 path.lineTo(60, 20); |
| 314 html_canvas_arc(&path, 50, 100000, 99980, 270.0f - 0.00572957795f, 270, |
| 315 false, false); |
| 316 canvas->drawPath(path, paint); |
| 317 } |
| 318 |
| 319 private: |
| 320 typedef skiagm::GM INHERITED; |
| 321 }; |
| 322 DEF_GM( return new TinyAngleBigRadiusArcsGM; ) |
OLD | NEW |