// 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_AddPathMode, 256, 180, false, 0) {
void draw(SkCanvas* canvas) {
    SkPathBuilder path;
    path.moveTo(20, 20)
        .lineTo(20, 40)
        .lineTo(40, 20);
    SkPath path2 = SkPathBuilder()
                   .moveTo(60, 60)
                   .lineTo(80, 60)
                   .lineTo(80, 40)
                   .detach();
    SkPaint paint;
    paint.setStyle(SkPaint::kStroke_Style);
    for (int i = 0; i < 2; i++) {
        for (auto addPathMode : { SkPath::kAppend_AddPathMode, SkPath::kExtend_AddPathMode } ) {
            SkPath test = SkPathBuilder(path)
                          .addPath(path2, addPathMode)
                          .detach();
            canvas->drawPath(test, paint);
            canvas->translate(100, 0);
        }
        canvas->translate(-200, 100);
        path.close();
    }
}
}  // END FIDDLE
