blob: 53126f2b23d9a2b21334f0f625ab4643d3190fc9 [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 Sk1DPathEffect_DEFINED
11#define Sk1DPathEffect_DEFINED
12
13#include "SkPathEffect.h"
14#include "SkPath.h"
15
16class SkPathMeasure;
17
18// This class is not exported to java.
19class Sk1DPathEffect : public SkPathEffect {
20public:
21 // override from SkPathEffect
22 virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width);
23
24protected:
25 /** Called at the start of each contour, returns the initial offset
26 into that contour.
27 */
28 virtual SkScalar begin(SkScalar contourLength) = 0;
29 /** Called with the current distance along the path, with the current matrix
30 for the point/tangent at the specified distance.
31 Return the distance to travel for the next call. If return <= 0, then that
32 contour is done.
33 */
34 virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure&) = 0;
35
36private:
37 typedef SkPathEffect INHERITED;
38};
39
40class SkPath1DPathEffect : public Sk1DPathEffect {
41public:
42 enum Style {
43 kTranslate_Style, // translate the shape to each position
44 kRotate_Style, // rotate the shape about its center
45 kMorph_Style, // transform each point, and turn lines into curves
46
47 kStyleCount
48 };
49
50 /** Dash by replicating the specified path.
51 @param path The path to replicate (dash)
52 @param advance The space between instances of path
53 @param phase distance (mod advance) along path for its initial position
54 @param style how to transform path at each point (based on the current
55 position and tangent)
56 */
57 SkPath1DPathEffect(const SkPath& path, SkScalar advance, SkScalar phase, Style);
58
59 // override from SkPathEffect
mike@reedtribe.org259210c2011-11-23 02:08:50 +000060 virtual bool filterPath(SkPath*, const SkPath&, SkScalar* width) SK_OVERRIDE;
reed@android.com8a1c16f2008-12-17 15:59:43 +000061
djsollen@google.comba28d032012-03-26 17:57:35 +000062 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath1DPathEffect)
reed@google.come28b9172011-08-09 18:14:31 +000063
reed@android.com8a1c16f2008-12-17 15:59:43 +000064protected:
65 SkPath1DPathEffect(SkFlattenableReadBuffer& buffer);
66
67 // overrides from Sk1DPathEffect
mike@reedtribe.org259210c2011-11-23 02:08:50 +000068 virtual SkScalar begin(SkScalar contourLength) SK_OVERRIDE;
69 virtual SkScalar next(SkPath*, SkScalar distance, SkPathMeasure&) SK_OVERRIDE;
reed@android.com8a1c16f2008-12-17 15:59:43 +000070 // overrides from SkFlattenable
mike@reedtribe.org259210c2011-11-23 02:08:50 +000071 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE;
reed@android.com8a1c16f2008-12-17 15:59:43 +000072
73private:
74 SkPath fPath; // copied from constructor
75 SkScalar fAdvance; // copied from constructor
76 SkScalar fInitialOffset; // computed from phase
77 Style fStyle; // copied from constructor
reed@android.com8a1c16f2008-12-17 15:59:43 +000078
79 typedef Sk1DPathEffect INHERITED;
80};
81
82
83#endif