/* * Copyright 2019 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gm/gm.h" #include "include/core/SkCanvas.h" #include "include/core/SkPath.h" #include "include/core/SkPaint.h" // crbug.com/982968 // Intended to draw a curvy triangle. // With the bug, we extend the left side of the triangle with lines, a bit like a flag pole. // The bug/fix is related to precision of the calculation. The original impl used all floats, // but the very shallow angle causes our sin/cos and other calcs to lose too many bits. // The fix was to use doubles for this part of the calc in SkPath::arcTo(). // DEF_SIMPLE_GM(shallow_angle_path_arcto, canvas, 300, 300) { SkPath path; SkPaint paint; paint.setStyle(SkPaint::kStroke_Style); path.moveTo(313.44189096331155f, 106.6009423589212f); path.arcTo(284.3113082008462f, 207.1407719157063f, 255.15053777129728f, 307.6718505416374f, 697212.0011054524f); path.lineTo(255.15053777129728f, 307.6718505416374f); path.arcTo(340.4737465981018f, 252.6907319346971f, 433.54333477716153f, 212.18116363345337f, 1251.2484277907251f); path.lineTo(433.54333477716153f, 212.18116363345337f); path.arcTo(350.19513833839466f, 185.89280014838369f, 313.44189096331155f, 106.6009423589212f, 198.03116885327813f); canvas->translate(-200, -50); canvas->drawPath(path, paint); };