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