1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkDashPathPriv_DEFINED 9 #define SkDashPathPriv_DEFINED 10 11 #include "include/core/SkPathEffect.h" 12 13 namespace SkDashPath { 14 /** 15 * Calculates the initialDashLength, initialDashIndex, and intervalLength based on the 16 * inputed phase and intervals. If adjustedPhase is passed in, then the phase will be 17 * adjusted to be between 0 and intervalLength. The result will be stored in adjustedPhase. 18 * If adjustedPhase is nullptr then it is assumed phase is already between 0 and intervalLength 19 * 20 * Caller should have already used ValidDashPath to exclude invalid data. 21 */ 22 void CalcDashParameters(SkScalar phase, const SkScalar intervals[], int32_t count, 23 SkScalar* initialDashLength, int32_t* initialDashIndex, 24 SkScalar* intervalLength, SkScalar* adjustedPhase = nullptr); 25 26 bool FilterDashPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect*, 27 const SkPathEffect::DashInfo& info); 28 29 #ifdef SK_BUILD_FOR_FUZZER 30 const SkScalar kMaxDashCount = 10000; 31 #else 32 const SkScalar kMaxDashCount = 1000000; 33 #endif 34 35 /** See comments for InternalFilter */ 36 enum class StrokeRecApplication { 37 kDisallow, 38 kAllow, 39 }; 40 41 /** 42 * Caller should have already used ValidDashPath to exclude invalid data. Typically, this leaves 43 * the strokeRec unmodified. However, for some simple shapes (e.g. a line) it may directly 44 * evaluate the dash and stroke to produce a stroked output path with a fill strokeRec. Passing 45 * true for disallowStrokeRecApplication turns this behavior off. 46 */ 47 bool InternalFilter(SkPath* dst, const SkPath& src, SkStrokeRec* rec, 48 const SkRect* cullRect, const SkScalar aIntervals[], 49 int32_t count, SkScalar initialDashLength, int32_t initialDashIndex, 50 SkScalar intervalLength, 51 StrokeRecApplication = StrokeRecApplication::kAllow); 52 53 bool ValidDashPath(SkScalar phase, const SkScalar intervals[], int32_t count); 54 } // namespace SkDashPath 55 56 #endif 57