Home | History | Annotate | Download | only in utils
      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