// 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 "fiddle/examples.h"
// HASH=cedd6233848198e1fca4d1e14816baaf
REG_FIDDLE(Paint_060, 256, 192, false, 0) {
void draw(SkCanvas* canvas) {
    SkPaint strokePaint;
    strokePaint.setAntiAlias(true);
    strokePaint.setStyle(SkPaint::kStroke_Style);
    strokePaint.setStrokeWidth(.1f);
    SkPath strokePath;
    strokePath.moveTo(.08f, .08f);
    strokePath.quadTo(.09f, .08f, .17f, .17f);
    SkPath fillPath;
    SkPaint outlinePaint(strokePaint);
    outlinePaint.setStrokeWidth(2);
    SkMatrix scale = SkMatrix::MakeScale(300, 300);
    for (SkScalar precision : { 0.01f, .1f, 1.f, 10.f, 100.f } ) {
        strokePaint.getFillPath(strokePath, &fillPath, nullptr, precision);
        fillPath.transform(scale);
        canvas->drawPath(fillPath, outlinePaint);
        canvas->translate(60, 0);
        if (1.f == precision) canvas->translate(-180, 100);
    }
    strokePath.transform(scale);
    strokePaint.setStrokeWidth(30);
    canvas->drawPath(strokePath, strokePaint);
}
}  // END FIDDLE
