/*
 * Copyright 2020 Google Inc.
 *
 * 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/SkPaint.h"
#include "include/core/SkPath.h"

// See crbug.com/1086705. The convex linearizing path renderer would collapse too many of the
// very-near duplicate vertices and turn the path into a triangle. Since the stroke width is larger
// than the radius of the circle, there's the separate issue of what to do when stroke
// self-intersects
DEF_SIMPLE_GM(crbug_1086705, canvas, 200, 200) {
    SkPaint paint;
    paint.setStyle(SkPaint::kStroke_Style);
    paint.setStrokeWidth(5.f);
    paint.setAntiAlias(true);

    SkPoint circleVertices[700];
    for (int i = 0; i < 700; ++i) {
        SkScalar angleRads = 2 * SK_ScalarPI * i / 700.f;
        circleVertices[i] = {100.f + 2.f * SkScalarCos(angleRads),
                             100.f + 2.f * SkScalarSin(angleRads)};
    }

    SkPath circle;
    circle.moveTo(circleVertices[0]);
    for (int i = 1; i < 700; ++i) {
        circle.lineTo(circleVertices[i]);
    }
    circle.close();

    canvas->drawPath(circle, paint);
}
