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

#ifndef SkTrimImpl_DEFINED
#define SkTrimImpl_DEFINED

#include "include/effects/SkTrimPathEffect.h"
#include "src/core/SkPathEffectBase.h"

class SkTrimPE : public SkPathEffectBase {
public:
    SkTrimPE(SkScalar startT, SkScalar stopT, SkTrimPathEffect::Mode);

protected:
    void flatten(SkWriteBuffer&) const override;
    bool onFilterPath(SkPathBuilder* dst, const SkPath& src, SkStrokeRec*, const SkRect*,
                      const SkMatrix&) const override;

private:
    SK_FLATTENABLE_HOOKS(SkTrimPE)

    bool computeFastBounds(SkRect* bounds) const override {
        // Trimming a path returns a subset of the input path so just return true and leave bounds
        // unmodified
        return true;
    }

    const SkScalar               fStartT,
                                 fStopT;
    const SkTrimPathEffect::Mode fMode;

    using INHERITED = SkPathEffectBase;
};

#endif
