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 SkDiscretePathEffect_DEFINED 9 #define SkDiscretePathEffect_DEFINED 10 11 #include "SkPathEffect.h" 12 13 /** \class SkDiscretePathEffect 14 15 This path effect chops a path into discrete segments, and randomly displaces them. 16 */ 17 class SK_API SkDiscretePathEffect : public SkPathEffect { 18 public: 19 /** Break the path into segments of segLength length, and randomly move the endpoints 20 away from the original path by a maximum of deviation. 21 Note: works on filled or framed paths 22 23 @param seedAssist This is a caller-supplied seedAssist that modifies 24 the seed value that is used to randomize the path 25 segments' endpoints. If not supplied it defaults to 0, 26 in which case filtering a path multiple times will 27 result in the same set of segments (this is useful for 28 testing). If a caller does not want this behaviour 29 they can pass in a different seedAssist to get a 30 different set of path segments. 31 */ 32 static SkPathEffect* Create(SkScalar segLength, SkScalar deviation, uint32_t seedAssist = 0) { 33 return new SkDiscretePathEffect(segLength, deviation, seedAssist); 34 } 35 36 virtual bool filterPath(SkPath* dst, const SkPath& src, 37 SkStrokeRec*, const SkRect*) const override; 38 39 SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiscretePathEffect)40 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiscretePathEffect) 41 42 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK 43 bool exposedInAndroidJavaAPI() const override { return true; } 44 #endif 45 46 protected: 47 SkDiscretePathEffect(SkScalar segLength, 48 SkScalar deviation, 49 uint32_t seedAssist); 50 void flatten(SkWriteBuffer&) const override; 51 52 private: 53 SkScalar fSegLength, fPerterb; 54 55 /* Caller-supplied 32 bit seed assist */ 56 uint32_t fSeedAssist; 57 58 typedef SkPathEffect INHERITED; 59 }; 60 61 #endif 62