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*/
17class SK_API SkDiscretePathEffect : public SkPathEffect {
18public:
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 SkDiscretePathEffect* Create(SkScalar segLength,
33                                        SkScalar deviation,
34                                        uint32_t seedAssist=0) {
35        return SkNEW_ARGS(SkDiscretePathEffect,
36                          (segLength, deviation, seedAssist));
37    }
38
39    virtual bool filterPath(SkPath* dst, const SkPath& src,
40                            SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
41
42    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiscretePathEffect)
43
44protected:
45    SkDiscretePathEffect(SkScalar segLength,
46                         SkScalar deviation,
47                         uint32_t seedAssist);
48    explicit SkDiscretePathEffect(SkReadBuffer&);
49    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
50
51private:
52    SkScalar fSegLength, fPerterb;
53
54    /* Caller-supplied 32 bit seed assist */
55    uint32_t fSeedAssist;
56
57    typedef SkPathEffect INHERITED;
58};
59
60#endif
61