blob: 603bf829459e69cedaad7df3d357f589254423c0 [file] [log] [blame]
/*
* 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);
};