Line data Source code
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 : */
17 : class SK_API SkDashPathEffect : public SkPathEffect {
18 : public:
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 : static sk_sp<SkPathEffect> Make(const SkScalar intervals[], int count, SkScalar phase);
40 :
41 : virtual bool filterPath(SkPath* dst, const SkPath& src,
42 : SkStrokeRec*, const SkRect*) const override;
43 :
44 : virtual bool asPoints(PointData* results, const SkPath& src,
45 : const SkStrokeRec&, const SkMatrix&,
46 : const SkRect*) const override;
47 :
48 : DashType asADash(DashInfo* info) const override;
49 :
50 : SK_TO_STRING_OVERRIDE()
51 0 : SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDashPathEffect)
52 :
53 : #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
54 : bool exposedInAndroidJavaAPI() const override { return true; }
55 : #endif
56 :
57 : protected:
58 : ~SkDashPathEffect() override;
59 : SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase);
60 : void flatten(SkWriteBuffer&) const override;
61 :
62 : private:
63 : SkScalar* fIntervals;
64 : int32_t fCount;
65 : SkScalar fPhase;
66 : // computed from phase
67 :
68 : SkScalar fInitialDashLength;
69 : int32_t fInitialDashIndex;
70 : SkScalar fIntervalLength;
71 :
72 : typedef SkPathEffect INHERITED;
73 : };
74 :
75 : #endif
|