// 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 "tools/fiddle/examples.h"
REG_FIDDLE(Path_arcTo_4, 256, 160, false, 0) {
void draw(SkCanvas* canvas) {
    SkPaint paint;
    paint.setAntiAlias(true);
    paint.setStyle(SkPaint::kStroke_Style);
    for (auto sweep: { SkPathDirection::kCW, SkPathDirection::kCCW } ) {
        for (auto arcSize : { SkPathBuilder::kSmall_ArcSize, SkPathBuilder::kLarge_ArcSize } ) {
            SkPath path = SkPathBuilder()
                          .moveTo({120, 50})
                          .arcTo({70, 40}, 30, arcSize, sweep, {120.1f, 50})
                          .detach();
            if (SkPathDirection::kCCW == sweep && SkPathBuilder::kLarge_ArcSize == arcSize) {
                paint.setColor(SK_ColorBLUE);
                paint.setStrokeWidth(3);
            }
            canvas->drawPath(path, paint);
         }
    }
}
}  // END FIDDLE
