2 * Copyright 2006 The Android Open Source Project
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #ifndef SkDiscretePathEffect_DEFINED
9 #define SkDiscretePathEffect_DEFINED
11 #include "SkPathEffect.h"
13 /** \class SkDiscretePathEffect
15 This path effect chops a path into discrete segments, and randomly displaces them.
17 class SK_API SkDiscretePathEffect : public SkPathEffect {
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
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.
32 static SkDiscretePathEffect* Create(SkScalar segLength,
34 uint32_t seedAssist=0) {
35 return SkNEW_ARGS(SkDiscretePathEffect,
36 (segLength, deviation, seedAssist));
39 virtual bool filterPath(SkPath* dst, const SkPath& src,
40 SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
42 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiscretePathEffect)
45 SkDiscretePathEffect(SkScalar segLength,
48 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
49 explicit SkDiscretePathEffect(SkReadBuffer&);
51 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
54 SkScalar fSegLength, fPerterb;
56 /* Caller-supplied 32 bit seed assist */
59 typedef SkPathEffect INHERITED;