1 /* 2 * Copyright 2006 The Android Open Source Project 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 SkDashPathEffect_DEFINED 9 #define SkDashPathEffect_DEFINED 10 11 #include "SkPathEffect.h" 12 13 /** \class SkDashPathEffect 14 15 SkDashPathEffect is a subclass of SkPathEffect that implements dashing 16 */ 17 class SK_API SkDashPathEffect : public SkPathEffect { 18 public: 19 /** intervals: array containing an even number of entries (>=2), with 20 the even indices specifying the length of "on" intervals, and the odd 21 indices specifying the length of "off" intervals. 22 count: number of elements in the intervals array 23 phase: offset into the intervals array (mod the sum of all of the 24 intervals). 25 26 For example: if intervals[] = {10, 20}, count = 2, and phase = 25, 27 this will set up a dashed path like so: 28 5 pixels off 29 10 pixels on 30 20 pixels off 31 10 pixels on 32 20 pixels off 33 ... 34 A phase of -5, 25, 55, 85, etc. would all result in the same path, 35 because the sum of all the intervals is 30. 36 37 Note: only affects stroked paths. 38 */ Create(const SkScalar intervals[],int count,SkScalar phase)39 static SkDashPathEffect* Create(const SkScalar intervals[], int count, 40 SkScalar phase) { 41 return SkNEW_ARGS(SkDashPathEffect, (intervals, count, phase)); 42 } 43 virtual ~SkDashPathEffect(); 44 45 virtual bool filterPath(SkPath* dst, const SkPath& src, 46 SkStrokeRec*, const SkRect*) const override; 47 48 virtual bool asPoints(PointData* results, const SkPath& src, 49 const SkStrokeRec&, const SkMatrix&, 50 const SkRect*) const override; 51 52 DashType asADash(DashInfo* info) const override; 53 54 SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDashPathEffect)55 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDashPathEffect) 56 57 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK 58 bool exposedInAndroidJavaAPI() const override { return true; } 59 #endif 60 61 protected: 62 SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase); 63 void flatten(SkWriteBuffer&) const override; 64 65 private: 66 SkScalar* fIntervals; 67 int32_t fCount; 68 SkScalar fPhase; 69 // computed from phase 70 SkScalar fInitialDashLength; 71 int32_t fInitialDashIndex; 72 SkScalar fIntervalLength; 73 74 typedef SkPathEffect INHERITED; 75 }; 76 77 #endif 78