// 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(zero_off_dashing, 256, 256, false, 0) {
static constexpr float kPi = 3.14159265358979323846f;
void draw(SkCanvas* canvas) {
    SkPaint p;
    canvas->drawCircle(128, 128, 60, p);

    p.setColor(0x88FF0000);
    p.setAntiAlias(true);
    p.setStyle(SkPaint::kStroke_Style);
    p.setStrokeCap(SkPaint::kSquare_Cap);
    p.setStrokeWidth(80);
    SkScalar interv[2] = {120 * kPi / 6 - 0.05f, 0.0000f};
    p.setPathEffect(SkDashPathEffect::Make(interv, 0.5));

    SkPath path = SkPath::Circle(128, 128, 60);
    canvas->drawPath(path, p);

    p.setColor(0x8800FF00);
    SkScalar interv2[2] = {120 * kPi / 6 - 0.05f, 10000.0000f};
    p.setPathEffect(SkDashPathEffect::Make(interv2, 0));
    canvas->drawPath(path, p);

    SkPath path2 = skpathutils::FillPathWithPaint(path, p);
    p.setColor(0xFF000000);
    p.setStrokeWidth(0);
    p.setPathEffect(nullptr);
    canvas->drawPath(path2, p);
}
}  // END FIDDLE
