SkDashPathEffect.h revision 20bf4ca8f5a5c00d19d8474d40208e456ee26838
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    // overrides for SkPathEffect
45    //  This method is not exported to java.
46    virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width);
47
48    // overrides for SkFlattenable
49    //  This method is not exported to java.
50    virtual Factory getFactory();
51    static SkFlattenable* CreateProc(SkFlattenableReadBuffer&);
52
53protected:
54    SkDashPathEffect(SkFlattenableReadBuffer&);
55    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
56
57private:
58    SkScalar*   fIntervals;
59    int32_t     fCount;
60    // computed from phase
61    SkScalar    fInitialDashLength;
62    int32_t     fInitialDashIndex;
63    SkScalar    fIntervalLength;
64    bool        fScaleToFit;
65
66    typedef SkPathEffect INHERITED;
67};
68
69#endif
70
71