/*
 * 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 SkTrimPathEffect_DEFINED
#define SkTrimPathEffect_DEFINED

#include "SkPathEffect.h"

class SK_API SkTrimPathEffect {
public:
    enum class Mode {
        kNormal,   // return the subset path [start,stop]
        kInverted, // return the complement/subset paths [0,start] + [stop,1]
    };

    /**
     *  Take start and stop "t" values (values between 0...1), and return a path that is that
     *  subset of the original path.
     *
     *  e.g.
     *      Make(0.5, 1.0) --> return the 2nd half of the path
     *      Make(0.33333, 0.66667) --> return the middle third of the path
     *
     *  The trim values apply to the entire path, so if it contains several contours, all of them
     *  are including in the calculation.
     *
     *  startT and stopT must be 0..1 inclusive. If they are outside of that interval, they will
     *  be pinned to the nearest legal value. If either is NaN, null will be returned.
     *
     *  Note: for Mode::kNormal, this will return one (logical) segment (even if it is spread
     *        across multiple contours). For Mode::kInverted, this will return 2 logical
     *        segments: 0...stopT and startT...1
     */
    static sk_sp<SkPathEffect> Make(SkScalar startT, SkScalar stopT, Mode = Mode::kNormal);
};

#endif
