1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2018 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkTrimPathEffect_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkTrimPathEffect_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker class SkPathEffect; 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker class SK_API SkTrimPathEffect { 18*c8dee2aaSAndroid Build Coastguard Worker public: 19*c8dee2aaSAndroid Build Coastguard Worker enum class Mode { 20*c8dee2aaSAndroid Build Coastguard Worker kNormal, // return the subset path [start,stop] 21*c8dee2aaSAndroid Build Coastguard Worker kInverted, // return the complement/subset paths [0,start] + [stop,1] 22*c8dee2aaSAndroid Build Coastguard Worker }; 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker /** 25*c8dee2aaSAndroid Build Coastguard Worker * Take start and stop "t" values (values between 0...1), and return a path that is that 26*c8dee2aaSAndroid Build Coastguard Worker * subset of the original path. 27*c8dee2aaSAndroid Build Coastguard Worker * 28*c8dee2aaSAndroid Build Coastguard Worker * e.g. 29*c8dee2aaSAndroid Build Coastguard Worker * Make(0.5, 1.0) --> return the 2nd half of the path 30*c8dee2aaSAndroid Build Coastguard Worker * Make(0.33333, 0.66667) --> return the middle third of the path 31*c8dee2aaSAndroid Build Coastguard Worker * 32*c8dee2aaSAndroid Build Coastguard Worker * The trim values apply to the entire path, so if it contains several contours, all of them 33*c8dee2aaSAndroid Build Coastguard Worker * are including in the calculation. 34*c8dee2aaSAndroid Build Coastguard Worker * 35*c8dee2aaSAndroid Build Coastguard Worker * startT and stopT must be 0..1 inclusive. If they are outside of that interval, they will 36*c8dee2aaSAndroid Build Coastguard Worker * be pinned to the nearest legal value. If either is NaN, null will be returned. 37*c8dee2aaSAndroid Build Coastguard Worker * 38*c8dee2aaSAndroid Build Coastguard Worker * Note: for Mode::kNormal, this will return one (logical) segment (even if it is spread 39*c8dee2aaSAndroid Build Coastguard Worker * across multiple contours). For Mode::kInverted, this will return 2 logical 40*c8dee2aaSAndroid Build Coastguard Worker * segments: stopT..1 and 0...startT, in this order. 41*c8dee2aaSAndroid Build Coastguard Worker */ 42*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<SkPathEffect> Make(SkScalar startT, SkScalar stopT, Mode = Mode::kNormal); 43*c8dee2aaSAndroid Build Coastguard Worker }; 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker #endif 46