| 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 | 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 |  | 
|---|