// 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"

#include <random>

REG_FIDDLE(drawarcs, 256, 256, false, 0) {
void draw(SkCanvas* canvas) {
    SkPaint paint;
    paint.setAntiAlias(true);
    paint.setStyle(SkPaint::kStroke_Style);
    paint.setStrokeWidth(8);

    std::default_random_engine rng;
    const auto randScalar = [&rng](SkScalar min, SkScalar max) -> SkScalar {
        return std::uniform_real_distribution<SkScalar>(min, max)(rng);
    };
    const auto randOpaqueColor = [&rng]() -> SkColor {
        return std::uniform_int_distribution<uint32_t>(0, 0xFFFFFF)(rng) | 0xFF000000;
    };

    for (int i = 0; i < 100; ++i) {
        SkScalar x = randScalar(0, 200);
        SkScalar y = randScalar(0, 200);

        SkPath path = SkPathBuilder()
                      .addArc(SkRect::MakeXYWH(x, y, 70, 70), randScalar(0, 360),
                              randScalar(0, 360))
                      .detach();
        paint.setColor(randOpaqueColor());
        canvas->drawPath(path, paint);
    }
}
}  // END FIDDLE
