SkDashPathEffect.h revision b5e391025e9859937fd6b4b3f4b8204d0bb73859
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 SkDashPathEffect_DEFINED
9#define SkDashPathEffect_DEFINED
10
11#include "SkPathEffect.h"
12
13/** \class SkDashPathEffect
14
15    SkDashPathEffect is a subclass of SkPathEffect that implements dashing
16*/
17class SK_API SkDashPathEffect : public SkPathEffect {
18public:
19    /** intervals: array containing an even number of entries (>=2), with
20         the even indices specifying the length of "on" intervals, and the odd
21         indices specifying the length of "off" intervals.
22        count: number of elements in the intervals array
23        phase: offset into the intervals array (mod the sum of all of the
24         intervals).
25
26        For example: if intervals[] = {10, 20}, count = 2, and phase = 25,
27         this will set up a dashed path like so:
28         5 pixels off
29         10 pixels on
30         20 pixels off
31         10 pixels on
32         20 pixels off
33         ...
34        A phase of -5, 25, 55, 85, etc. would all result in the same path,
35         because the sum of all the intervals is 30.
36
37        Note: only affects stroked paths.
38    */
39    SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase,
40                     bool scaleToFit = false);
41    virtual ~SkDashPathEffect();
42
43    virtual bool filterPath(SkPath* dst, const SkPath& src,
44                            SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
45
46    virtual bool asPoints(PointData* results, const SkPath& src,
47                          const SkStrokeRec&, const SkMatrix&,
48                          const SkRect*) const SK_OVERRIDE;
49
50    virtual Factory getFactory() SK_OVERRIDE;
51
52    static SkFlattenable* CreateProc(SkFlattenableReadBuffer&);
53
54protected:
55    SkDashPathEffect(SkFlattenableReadBuffer&);
56    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
57
58private:
59    SkScalar*   fIntervals;
60    int32_t     fCount;
61    // computed from phase
62    SkScalar    fInitialDashLength;
63    int32_t     fInitialDashIndex;
64    SkScalar    fIntervalLength;
65    bool        fScaleToFit;
66
67    typedef SkPathEffect INHERITED;
68};
69
70#endif
71