blob: 87580aa37d88598c293e4ad57f06f61565664784 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
reed@android.com8a1c16f2008-12-17 15:59:43 +00002/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00003 * Copyright 2006 The Android Open Source Project
reed@android.com8a1c16f2008-12-17 15:59:43 +00004 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00005 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
reed@android.com8a1c16f2008-12-17 15:59:43 +00007 */
8
epoger@google.comec3ed6a2011-07-28 14:26:00 +00009
reed@android.com8a1c16f2008-12-17 15:59:43 +000010#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*/
ctguil@chromium.org7ffb1b22011-03-15 21:27:08 +000019class SK_API SkDashPathEffect : public SkPathEffect {
reed@android.com8a1c16f2008-12-17 15:59:43 +000020public:
epoger@google.com20bf4ca2012-04-27 13:34:52 +000021 /** 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.
reed@android.com8a1c16f2008-12-17 15:59:43 +000040 */
41 SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase, bool scaleToFit = false);
42 virtual ~SkDashPathEffect();
43
reed@google.comfd4be262012-05-25 01:04:12 +000044 virtual bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*) SK_OVERRIDE;
reed@android.com8a1c16f2008-12-17 15:59:43 +000045
46 // overrides for SkFlattenable
47 // This method is not exported to java.
48 virtual Factory getFactory();
reed@google.com6bac9472011-06-21 19:24:00 +000049 static SkFlattenable* CreateProc(SkFlattenableReadBuffer&);
50
reed@android.com8a1c16f2008-12-17 15:59:43 +000051protected:
52 SkDashPathEffect(SkFlattenableReadBuffer&);
djsollen@google.com54924242012-03-29 15:18:04 +000053 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
reed@android.com8a1c16f2008-12-17 15:59:43 +000054
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
reed@android.com8a1c16f2008-12-17 15:59:43 +000064 typedef SkPathEffect INHERITED;
65};
66
67#endif
68