SkDashPathEffect.h revision 9797272edfc73f18b4807751377518317991b880
1 2/* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10#ifndef SkDashPathEffect_DEFINED 11#define SkDashPathEffect_DEFINED 12 13#include "SkPathEffect.h" 14 15/** \class SkDashPathEffect 16 17 SkDashPathEffect is a subclass of SkPathEffect that implements dashing 18*/ 19class SK_API SkDashPathEffect : public SkPathEffect { 20public: 21 /** intervals: array containing an even number of entries (>=2), with 22 the even indices specifying the length of "on" intervals, and the odd 23 indices specifying the length of "off" intervals. 24 count: number of elements in the intervals array 25 phase: offset into the intervals array (mod the sum of all of the 26 intervals). 27 28 For example: if intervals[] = {10, 20}, count = 2, and phase = 25, 29 this will set up a dashed path like so: 30 5 pixels off 31 10 pixels on 32 20 pixels off 33 10 pixels on 34 20 pixels off 35 ... 36 A phase of -5, 25, 55, 85, etc. would all result in the same path, 37 because the sum of all the intervals is 30. 38 39 Note: only affects stroked paths. 40 */ 41 SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase, bool scaleToFit = false); 42 virtual ~SkDashPathEffect(); 43 44 virtual bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*) SK_OVERRIDE; 45 46 // overrides for SkFlattenable 47 // This method is not exported to java. 48 virtual Factory getFactory(); 49 static SkFlattenable* CreateProc(SkFlattenableReadBuffer&); 50 51protected: 52 SkDashPathEffect(SkFlattenableReadBuffer&); 53 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 54 55private: 56 SkScalar* fIntervals; 57 int32_t fCount; 58 // computed from phase 59 SkScalar fInitialDashLength; 60 int32_t fInitialDashIndex; 61 SkScalar fIntervalLength; 62 bool fScaleToFit; 63 64 typedef SkPathEffect INHERITED; 65}; 66 67#endif 68 69