/*
 * Copyright 2018 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkOpPathEffect_DEFINED
#define SkOpPathEffect_DEFINED

#include "SkPathEffect.h"
#include "SkPaint.h"
#include "SkPathOps.h"

class SkMergePathEffect {
public:
    /*  Defers to two other patheffects, and then combines their outputs using the specified op.
     *  e.g.
     *      result = output_one op output_two
     *
     *  If either one or two is nullptr, then the original path is passed through to the op.
     */
    static sk_sp<SkPathEffect> Make(sk_sp<SkPathEffect> one, sk_sp<SkPathEffect> two, SkPathOp op);
};

class SkMatrixPathEffect {
public:
    static sk_sp<SkPathEffect> MakeTranslate(SkScalar dx, SkScalar dy);
    static sk_sp<SkPathEffect> Make(const SkMatrix&);
};

class SkStrokePathEffect {
public:
    static sk_sp<SkPathEffect> Make(SkScalar width, SkPaint::Join, SkPaint::Cap,
                                    SkScalar miter = 4);
};

#endif
