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 "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 const SkScalar kMaxDashCount = 1000000; 30 31 /** See comments for InternalFilter */ 32 enum class StrokeRecApplication { 33 kDisallow, 34 kAllow, 35 }; 36 37 /** 38 * Caller should have already used ValidDashPath to exclude invalid data. Typically, this leaves 39 * the strokeRec unmodified. However, for some simple shapes (e.g. a line) it may directly 40 * evaluate the dash and stroke to produce a stroked output path with a fill strokeRec. Passing 41 * true for disallowStrokeRecApplication turns this behavior off. 42 */ 43 bool InternalFilter(SkPath* dst, const SkPath& src, SkStrokeRec* rec, 44 const SkRect* cullRect, const SkScalar aIntervals[], 45 int32_t count, SkScalar initialDashLength, int32_t initialDashIndex, 46 SkScalar intervalLength, 47 StrokeRecApplication = StrokeRecApplication::kAllow); 48 49 bool ValidDashPath(SkScalar phase, const SkScalar intervals[], int32_t count); 50 } 51 52 #endif 53