// Copyright 2020 Google LLC
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#include "tools/fiddle/examples.h"
REG_FIDDLE(convex_overstroke_quad, 256, 256, false, 0) {
void draw(SkCanvas* canvas) {
    const float SCALE = 1;
    const int WIDTH = 100;

    canvas->scale(SCALE, SCALE);
    canvas->translate(30, 30);

    SkPoint p1 = SkPoint::Make(50, 50);
    SkPoint p2 = SkPoint::Make(80, 50);

    SkPoint p3 = SkPoint::Make(65, 30);

    SkPath path = SkPathBuilder()
                  .moveTo(p1)
                  .lineTo(p2)
                  .quadTo(p3, p1)
                //.close();
                  .detach();

    SkPaint p;
    p.setColor(SK_ColorRED);
    p.setAntiAlias(true);
    p.setStyle(SkPaint::kStroke_Style);
    p.setStrokeWidth(WIDTH);

    SkPath fillpath = skpathutils::FillPathWithPaint(path, p);

    SkPaint fillp;
    fillp.setColor(SK_ColorBLACK);
    fillp.setAntiAlias(true);
    fillp.setStyle(SkPaint::kStroke_Style);

    canvas->drawPath(path, p);
    canvas->drawPath(fillpath, fillp);
}
}  // END FIDDLE
