Sk1DPathEffect.h revision 54924243c1b65b3ee6d8fa064b50a9b1bb2a19a5
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 Sk1DPathEffect_DEFINED
11#define Sk1DPathEffect_DEFINED
12
13#include "SkPathEffect.h"
14#include "SkPath.h"
15
16class SkPathMeasure;
17
18//  This class is not exported to java.
19class Sk1DPathEffect : public SkPathEffect {
20public:
21    //  override from SkPathEffect
22    virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width);
23
24protected:
25    /** Called at the start of each contour, returns the initial offset
26        into that contour.
27    */
28    virtual SkScalar begin(SkScalar contourLength) = 0;
29    /** Called with the current distance along the path, with the current matrix
30        for the point/tangent at the specified distance.
31        Return the distance to travel for the next call. If return <= 0, then that
32        contour is done.
33    */
34    virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure&) = 0;
35
36private:
37    typedef SkPathEffect INHERITED;
38};
39
40class SkPath1DPathEffect : public Sk1DPathEffect {
41public:
42    enum Style {
43        kTranslate_Style,   // translate the shape to each position
44        kRotate_Style,      // rotate the shape about its center
45        kMorph_Style,       // transform each point, and turn lines into curves
46
47        kStyleCount
48    };
49
50    /** Dash by replicating the specified path.
51        @param path The path to replicate (dash)
52        @param advance The space between instances of path
53        @param phase distance (mod advance) along path for its initial position
54        @param style how to transform path at each point (based on the current
55                     position and tangent)
56    */
57    SkPath1DPathEffect(const SkPath& path, SkScalar advance, SkScalar phase, Style);
58
59    // override from SkPathEffect
60    virtual bool filterPath(SkPath*, const SkPath&, SkScalar* width) SK_OVERRIDE;
61
62    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath1DPathEffect)
63
64protected:
65    SkPath1DPathEffect(SkFlattenableReadBuffer& buffer);
66    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
67
68    // overrides from Sk1DPathEffect
69    virtual SkScalar begin(SkScalar contourLength) SK_OVERRIDE;
70    virtual SkScalar next(SkPath*, SkScalar distance, SkPathMeasure&) SK_OVERRIDE;
71
72private:
73    SkPath      fPath;          // copied from constructor
74    SkScalar    fAdvance;       // copied from constructor
75    SkScalar    fInitialOffset; // computed from phase
76    Style       fStyle;         // copied from constructor
77
78    typedef Sk1DPathEffect INHERITED;
79};
80
81
82#endif
83