OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright 2016 Google Inc. | |
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 #include "SkCurveMeasure.h" | |
9 #include "SkGeometry.h" | |
10 #include "SkPath.h" | |
11 #include "SkPathEffect.h" | |
12 #include "SkPathMeasurePriv.h" | |
13 | |
14 static inline void getDashedPath(const SkPath& path, | |
15 const struct SkPathEffect::DashInfo& dashInfo, | |
16 SkPath* dst) { | |
17 const SkScalar* intervals = dashInfo.fIntervals; | |
18 | |
19 SkScalar interval_accum = 0.0f; | |
caryclark
2016/08/11 12:35:12
remove this
Harry Stern
2016/08/11 15:21:09
Done.
| |
20 int32_t interval_index = 0; | |
21 | |
22 interval_accum = intervals[interval_index]; | |
caryclark
2016/08/11 12:35:12
SkScalar internal_accum ...
Harry Stern
2016/08/11 15:21:09
Done.
| |
23 | |
24 SkPath::Iter iter(path, false); | |
25 SkPath::Verb current; | |
26 SkPoint pts[4]; | |
27 | |
28 while ((current = iter.next(pts)) != SkPath::kDone_Verb) { | |
29 SkSegType segtype; | |
30 SkPoint end; | |
31 switch (current) { | |
32 case (SkPath::kMove_Verb): | |
caryclark
2016/08/11 12:35:12
no need for parens
Harry Stern
2016/08/11 15:21:09
Done.
| |
33 dst->moveTo(pts[0]); | |
34 continue; | |
35 case (SkPath::kLine_Verb): | |
36 segtype = kLine_SegType; | |
37 end = pts[1]; | |
38 break; | |
39 case (SkPath::kQuad_Verb): | |
40 segtype = kQuad_SegType; | |
41 end = pts[2]; | |
42 break; | |
43 case (SkPath::kConic_Verb): | |
44 segtype = kConic_SegType; | |
45 end = pts[3]; | |
caryclark
2016/08/11 12:35:12
pts[2]
Harry Stern
2016/08/11 15:21:09
Done.
| |
46 break; | |
47 case (SkPath::kCubic_Verb): | |
48 segtype = kCubic_SegType; | |
49 end = pts[3]; | |
50 break; | |
51 case (SkPath::kClose_Verb): | |
52 // should not appear in the iter since we're not using RawIter | |
53 SkASSERT(false); | |
54 break; | |
55 default: // unreachable | |
56 SkASSERT(false); | |
57 break; | |
58 } | |
59 | |
60 // TODO(hstern): Do heuristic check to see whether we should do | |
61 // pathmeasure or curvemeasure. probably do it before the outer loop | |
62 // by giving CurveMeasure a reset() and reusing the object inside. | |
63 SkCurveMeasure meas(pts, segtype); | |
64 | |
65 SkScalar prevT = 0.0f; | |
caryclark
2016/08/11 12:35:12
0 is fine here
Harry Stern
2016/08/11 15:21:09
Done.
| |
66 | |
67 SkScalar current_length = meas.getLength(); | |
68 while (interval_accum < current_length) { | |
69 SkScalar time; | |
70 SkPoint pos; | |
71 meas.getPosTanTime(interval_accum, &pos, nullptr, &time); | |
72 if (!(interval_index%2)) { | |
caryclark
2016/08/11 12:35:12
spaces on both sides of %
Harry Stern
2016/08/11 15:21:09
Done. I'm actually going to put this in a tiny hel
| |
73 SkPathMeasure_segTo(pts, segtype, prevT, time, dst); | |
74 } | |
75 else { | |
76 dst->moveTo(pos); | |
caryclark
2016/08/11 12:35:12
put else on same line as close brace
Harry Stern
2016/08/11 15:21:09
Done, but I have written my elses on separate line
| |
77 } | |
78 prevT = time; | |
79 | |
80 interval_accum += intervals[interval_index]; | |
81 interval_index = (interval_index+1)%dashInfo.fCount; | |
caryclark
2016/08/11 12:35:12
spaces on both sides of %
Harry Stern
2016/08/11 15:21:09
Done.
| |
82 } | |
83 if (!(interval_index%2)) { | |
caryclark
2016/08/11 12:35:12
spaces on either side of %
Harry Stern
2016/08/11 15:21:09
Done.
| |
84 SkPathMeasure_segTo(pts, segtype, prevT, 1.0f, dst); | |
caryclark
2016/08/11 12:35:12
1 is fine here
Harry Stern
2016/08/11 15:21:09
Done.
| |
85 } | |
86 else { | |
caryclark
2016/08/11 12:35:12
put else on same line as close brace
Harry Stern
2016/08/11 15:21:09
Done.
| |
87 dst->moveTo(end); | |
88 } | |
89 | |
90 interval_accum = interval_accum - current_length; | |
91 } | |
92 } | |
OLD | NEW |