OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/animation/SVGPathSegInterpolationFunctions.h" | 5 #include "core/animation/SVGPathSegInterpolationFunctions.h" |
6 | 6 |
7 #include <memory> | |
8 | |
9 namespace blink { | 7 namespace blink { |
10 | 8 |
11 | 9 |
12 std::unique_ptr<InterpolableNumber> consumeControlAxis(double value, bool isAbso
lute, double currentValue) | 10 PassOwnPtr<InterpolableNumber> consumeControlAxis(double value, bool isAbsolute,
double currentValue) |
13 { | 11 { |
14 return InterpolableNumber::create(isAbsolute ? value : currentValue + value)
; | 12 return InterpolableNumber::create(isAbsolute ? value : currentValue + value)
; |
15 } | 13 } |
16 | 14 |
17 double consumeInterpolableControlAxis(const InterpolableValue* number, bool isAb
solute, double currentValue) | 15 double consumeInterpolableControlAxis(const InterpolableValue* number, bool isAb
solute, double currentValue) |
18 { | 16 { |
19 double value = toInterpolableNumber(number)->value(); | 17 double value = toInterpolableNumber(number)->value(); |
20 return isAbsolute ? value : value - currentValue; | 18 return isAbsolute ? value : value - currentValue; |
21 } | 19 } |
22 | 20 |
23 std::unique_ptr<InterpolableNumber> consumeCoordinateAxis(double value, bool isA
bsolute, double& currentValue) | 21 PassOwnPtr<InterpolableNumber> consumeCoordinateAxis(double value, bool isAbsolu
te, double& currentValue) |
24 { | 22 { |
25 if (isAbsolute) | 23 if (isAbsolute) |
26 currentValue = value; | 24 currentValue = value; |
27 else | 25 else |
28 currentValue += value; | 26 currentValue += value; |
29 return InterpolableNumber::create(currentValue); | 27 return InterpolableNumber::create(currentValue); |
30 } | 28 } |
31 | 29 |
32 double consumeInterpolableCoordinateAxis(const InterpolableValue* number, bool i
sAbsolute, double& currentValue) | 30 double consumeInterpolableCoordinateAxis(const InterpolableValue* number, bool i
sAbsolute, double& currentValue) |
33 { | 31 { |
34 double previousValue = currentValue; | 32 double previousValue = currentValue; |
35 currentValue = toInterpolableNumber(number)->value(); | 33 currentValue = toInterpolableNumber(number)->value(); |
36 return isAbsolute ? currentValue : currentValue - previousValue; | 34 return isAbsolute ? currentValue : currentValue - previousValue; |
37 } | 35 } |
38 | 36 |
39 std::unique_ptr<InterpolableValue> consumeClosePath(const PathSegmentData&, Path
Coordinates& coordinates) | 37 PassOwnPtr<InterpolableValue> consumeClosePath(const PathSegmentData&, PathCoord
inates& coordinates) |
40 { | 38 { |
41 coordinates.currentX = coordinates.initialX; | 39 coordinates.currentX = coordinates.initialX; |
42 coordinates.currentY = coordinates.initialY; | 40 coordinates.currentY = coordinates.initialY; |
43 return InterpolableList::create(0); | 41 return InterpolableList::create(0); |
44 } | 42 } |
45 | 43 |
46 PathSegmentData consumeInterpolableClosePath(const InterpolableValue&, SVGPathSe
gType segType, PathCoordinates& coordinates) | 44 PathSegmentData consumeInterpolableClosePath(const InterpolableValue&, SVGPathSe
gType segType, PathCoordinates& coordinates) |
47 { | 45 { |
48 coordinates.currentX = coordinates.initialX; | 46 coordinates.currentX = coordinates.initialX; |
49 coordinates.currentY = coordinates.initialY; | 47 coordinates.currentY = coordinates.initialY; |
50 | 48 |
51 PathSegmentData segment; | 49 PathSegmentData segment; |
52 segment.command = segType; | 50 segment.command = segType; |
53 return segment; | 51 return segment; |
54 } | 52 } |
55 | 53 |
56 std::unique_ptr<InterpolableValue> consumeSingleCoordinate(const PathSegmentData
& segment, PathCoordinates& coordinates) | 54 PassOwnPtr<InterpolableValue> consumeSingleCoordinate(const PathSegmentData& seg
ment, PathCoordinates& coordinates) |
57 { | 55 { |
58 bool isAbsolute = isAbsolutePathSegType(segment.command); | 56 bool isAbsolute = isAbsolutePathSegType(segment.command); |
59 std::unique_ptr<InterpolableList> result = InterpolableList::create(2); | 57 OwnPtr<InterpolableList> result = InterpolableList::create(2); |
60 result->set(0, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); | 58 result->set(0, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); |
61 result->set(1, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); | 59 result->set(1, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); |
62 | 60 |
63 if (toAbsolutePathSegType(segment.command) == PathSegMoveToAbs) { | 61 if (toAbsolutePathSegType(segment.command) == PathSegMoveToAbs) { |
64 // Any upcoming 'closepath' commands bring us back to the location we ha
ve just moved to. | 62 // Any upcoming 'closepath' commands bring us back to the location we ha
ve just moved to. |
65 coordinates.initialX = coordinates.currentX; | 63 coordinates.initialX = coordinates.currentX; |
66 coordinates.initialY = coordinates.currentY; | 64 coordinates.initialY = coordinates.currentY; |
67 } | 65 } |
68 | 66 |
69 return std::move(result); | 67 return std::move(result); |
(...skipping 10 matching lines...) Expand all Loading... |
80 | 78 |
81 if (toAbsolutePathSegType(segType) == PathSegMoveToAbs) { | 79 if (toAbsolutePathSegType(segType) == PathSegMoveToAbs) { |
82 // Any upcoming 'closepath' commands bring us back to the location we ha
ve just moved to. | 80 // Any upcoming 'closepath' commands bring us back to the location we ha
ve just moved to. |
83 coordinates.initialX = coordinates.currentX; | 81 coordinates.initialX = coordinates.currentX; |
84 coordinates.initialY = coordinates.currentY; | 82 coordinates.initialY = coordinates.currentY; |
85 } | 83 } |
86 | 84 |
87 return segment; | 85 return segment; |
88 } | 86 } |
89 | 87 |
90 std::unique_ptr<InterpolableValue> consumeCurvetoCubic(const PathSegmentData& se
gment, PathCoordinates& coordinates) | 88 PassOwnPtr<InterpolableValue> consumeCurvetoCubic(const PathSegmentData& segment
, PathCoordinates& coordinates) |
91 { | 89 { |
92 bool isAbsolute = isAbsolutePathSegType(segment.command); | 90 bool isAbsolute = isAbsolutePathSegType(segment.command); |
93 std::unique_ptr<InterpolableList> result = InterpolableList::create(6); | 91 OwnPtr<InterpolableList> result = InterpolableList::create(6); |
94 result->set(0, consumeControlAxis(segment.x1(), isAbsolute, coordinates.curr
entX)); | 92 result->set(0, consumeControlAxis(segment.x1(), isAbsolute, coordinates.curr
entX)); |
95 result->set(1, consumeControlAxis(segment.y1(), isAbsolute, coordinates.curr
entY)); | 93 result->set(1, consumeControlAxis(segment.y1(), isAbsolute, coordinates.curr
entY)); |
96 result->set(2, consumeControlAxis(segment.x2(), isAbsolute, coordinates.curr
entX)); | 94 result->set(2, consumeControlAxis(segment.x2(), isAbsolute, coordinates.curr
entX)); |
97 result->set(3, consumeControlAxis(segment.y2(), isAbsolute, coordinates.curr
entY)); | 95 result->set(3, consumeControlAxis(segment.y2(), isAbsolute, coordinates.curr
entY)); |
98 result->set(4, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); | 96 result->set(4, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); |
99 result->set(5, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); | 97 result->set(5, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); |
100 return std::move(result); | 98 return std::move(result); |
101 } | 99 } |
102 | 100 |
103 PathSegmentData consumeInterpolableCurvetoCubic(const InterpolableValue& value,
SVGPathSegType segType, PathCoordinates& coordinates) | 101 PathSegmentData consumeInterpolableCurvetoCubic(const InterpolableValue& value,
SVGPathSegType segType, PathCoordinates& coordinates) |
104 { | 102 { |
105 const InterpolableList& list = toInterpolableList(value); | 103 const InterpolableList& list = toInterpolableList(value); |
106 bool isAbsolute = isAbsolutePathSegType(segType); | 104 bool isAbsolute = isAbsolutePathSegType(segType); |
107 PathSegmentData segment; | 105 PathSegmentData segment; |
108 segment.command = segType; | 106 segment.command = segType; |
109 segment.point1.setX(consumeInterpolableControlAxis(list.get(0), isAbsolute,
coordinates.currentX)); | 107 segment.point1.setX(consumeInterpolableControlAxis(list.get(0), isAbsolute,
coordinates.currentX)); |
110 segment.point1.setY(consumeInterpolableControlAxis(list.get(1), isAbsolute,
coordinates.currentY)); | 108 segment.point1.setY(consumeInterpolableControlAxis(list.get(1), isAbsolute,
coordinates.currentY)); |
111 segment.point2.setX(consumeInterpolableControlAxis(list.get(2), isAbsolute,
coordinates.currentX)); | 109 segment.point2.setX(consumeInterpolableControlAxis(list.get(2), isAbsolute,
coordinates.currentX)); |
112 segment.point2.setY(consumeInterpolableControlAxis(list.get(3), isAbsolute,
coordinates.currentY)); | 110 segment.point2.setY(consumeInterpolableControlAxis(list.get(3), isAbsolute,
coordinates.currentY)); |
113 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(list.get(4), isAb
solute, coordinates.currentX)); | 111 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(list.get(4), isAb
solute, coordinates.currentX)); |
114 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(list.get(5), isAb
solute, coordinates.currentY)); | 112 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(list.get(5), isAb
solute, coordinates.currentY)); |
115 return segment; | 113 return segment; |
116 } | 114 } |
117 | 115 |
118 std::unique_ptr<InterpolableValue> consumeCurvetoQuadratic(const PathSegmentData
& segment, PathCoordinates& coordinates) | 116 PassOwnPtr<InterpolableValue> consumeCurvetoQuadratic(const PathSegmentData& seg
ment, PathCoordinates& coordinates) |
119 { | 117 { |
120 bool isAbsolute = isAbsolutePathSegType(segment.command); | 118 bool isAbsolute = isAbsolutePathSegType(segment.command); |
121 std::unique_ptr<InterpolableList> result = InterpolableList::create(4); | 119 OwnPtr<InterpolableList> result = InterpolableList::create(4); |
122 result->set(0, consumeControlAxis(segment.x1(), isAbsolute, coordinates.curr
entX)); | 120 result->set(0, consumeControlAxis(segment.x1(), isAbsolute, coordinates.curr
entX)); |
123 result->set(1, consumeControlAxis(segment.y1(), isAbsolute, coordinates.curr
entY)); | 121 result->set(1, consumeControlAxis(segment.y1(), isAbsolute, coordinates.curr
entY)); |
124 result->set(2, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); | 122 result->set(2, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); |
125 result->set(3, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); | 123 result->set(3, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); |
126 return std::move(result); | 124 return std::move(result); |
127 } | 125 } |
128 | 126 |
129 PathSegmentData consumeInterpolableCurvetoQuadratic(const InterpolableValue& val
ue, SVGPathSegType segType, PathCoordinates& coordinates) | 127 PathSegmentData consumeInterpolableCurvetoQuadratic(const InterpolableValue& val
ue, SVGPathSegType segType, PathCoordinates& coordinates) |
130 { | 128 { |
131 const InterpolableList& list = toInterpolableList(value); | 129 const InterpolableList& list = toInterpolableList(value); |
132 bool isAbsolute = isAbsolutePathSegType(segType); | 130 bool isAbsolute = isAbsolutePathSegType(segType); |
133 PathSegmentData segment; | 131 PathSegmentData segment; |
134 segment.command = segType; | 132 segment.command = segType; |
135 segment.point1.setX(consumeInterpolableControlAxis(list.get(0), isAbsolute,
coordinates.currentX)); | 133 segment.point1.setX(consumeInterpolableControlAxis(list.get(0), isAbsolute,
coordinates.currentX)); |
136 segment.point1.setY(consumeInterpolableControlAxis(list.get(1), isAbsolute,
coordinates.currentY)); | 134 segment.point1.setY(consumeInterpolableControlAxis(list.get(1), isAbsolute,
coordinates.currentY)); |
137 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(list.get(2), isAb
solute, coordinates.currentX)); | 135 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(list.get(2), isAb
solute, coordinates.currentX)); |
138 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(list.get(3), isAb
solute, coordinates.currentY)); | 136 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(list.get(3), isAb
solute, coordinates.currentY)); |
139 return segment; | 137 return segment; |
140 } | 138 } |
141 | 139 |
142 std::unique_ptr<InterpolableValue> consumeArc(const PathSegmentData& segment, Pa
thCoordinates& coordinates) | 140 PassOwnPtr<InterpolableValue> consumeArc(const PathSegmentData& segment, PathCoo
rdinates& coordinates) |
143 { | 141 { |
144 bool isAbsolute = isAbsolutePathSegType(segment.command); | 142 bool isAbsolute = isAbsolutePathSegType(segment.command); |
145 std::unique_ptr<InterpolableList> result = InterpolableList::create(7); | 143 OwnPtr<InterpolableList> result = InterpolableList::create(7); |
146 result->set(0, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); | 144 result->set(0, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); |
147 result->set(1, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); | 145 result->set(1, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); |
148 result->set(2, InterpolableNumber::create(segment.r1())); | 146 result->set(2, InterpolableNumber::create(segment.r1())); |
149 result->set(3, InterpolableNumber::create(segment.r2())); | 147 result->set(3, InterpolableNumber::create(segment.r2())); |
150 result->set(4, InterpolableNumber::create(segment.arcAngle())); | 148 result->set(4, InterpolableNumber::create(segment.arcAngle())); |
151 result->set(5, InterpolableBool::create(segment.largeArcFlag())); | 149 result->set(5, InterpolableBool::create(segment.largeArcFlag())); |
152 result->set(6, InterpolableBool::create(segment.sweepFlag())); | 150 result->set(6, InterpolableBool::create(segment.sweepFlag())); |
153 return std::move(result); | 151 return std::move(result); |
154 } | 152 } |
155 | 153 |
156 PathSegmentData consumeInterpolableArc(const InterpolableValue& value, SVGPathSe
gType segType, PathCoordinates& coordinates) | 154 PathSegmentData consumeInterpolableArc(const InterpolableValue& value, SVGPathSe
gType segType, PathCoordinates& coordinates) |
157 { | 155 { |
158 const InterpolableList& list = toInterpolableList(value); | 156 const InterpolableList& list = toInterpolableList(value); |
159 bool isAbsolute = isAbsolutePathSegType(segType); | 157 bool isAbsolute = isAbsolutePathSegType(segType); |
160 PathSegmentData segment; | 158 PathSegmentData segment; |
161 segment.command = segType; | 159 segment.command = segType; |
162 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(list.get(0), isAb
solute, coordinates.currentX)); | 160 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(list.get(0), isAb
solute, coordinates.currentX)); |
163 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(list.get(1), isAb
solute, coordinates.currentY)); | 161 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(list.get(1), isAb
solute, coordinates.currentY)); |
164 segment.arcRadii().setX(toInterpolableNumber(list.get(2))->value()); | 162 segment.arcRadii().setX(toInterpolableNumber(list.get(2))->value()); |
165 segment.arcRadii().setY(toInterpolableNumber(list.get(3))->value()); | 163 segment.arcRadii().setY(toInterpolableNumber(list.get(3))->value()); |
166 segment.setArcAngle(toInterpolableNumber(list.get(4))->value()); | 164 segment.setArcAngle(toInterpolableNumber(list.get(4))->value()); |
167 segment.arcLarge = toInterpolableBool(list.get(5))->value(); | 165 segment.arcLarge = toInterpolableBool(list.get(5))->value(); |
168 segment.arcSweep = toInterpolableBool(list.get(6))->value(); | 166 segment.arcSweep = toInterpolableBool(list.get(6))->value(); |
169 return segment; | 167 return segment; |
170 } | 168 } |
171 | 169 |
172 std::unique_ptr<InterpolableValue> consumeLinetoHorizontal(const PathSegmentData
& segment, PathCoordinates& coordinates) | 170 PassOwnPtr<InterpolableValue> consumeLinetoHorizontal(const PathSegmentData& seg
ment, PathCoordinates& coordinates) |
173 { | 171 { |
174 bool isAbsolute = isAbsolutePathSegType(segment.command); | 172 bool isAbsolute = isAbsolutePathSegType(segment.command); |
175 return consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.currentX); | 173 return consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.currentX); |
176 } | 174 } |
177 | 175 |
178 PathSegmentData consumeInterpolableLinetoHorizontal(const InterpolableValue& val
ue, SVGPathSegType segType, PathCoordinates& coordinates) | 176 PathSegmentData consumeInterpolableLinetoHorizontal(const InterpolableValue& val
ue, SVGPathSegType segType, PathCoordinates& coordinates) |
179 { | 177 { |
180 bool isAbsolute = isAbsolutePathSegType(segType); | 178 bool isAbsolute = isAbsolutePathSegType(segType); |
181 PathSegmentData segment; | 179 PathSegmentData segment; |
182 segment.command = segType; | 180 segment.command = segType; |
183 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(&value, isAbsolut
e, coordinates.currentX)); | 181 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(&value, isAbsolut
e, coordinates.currentX)); |
184 return segment; | 182 return segment; |
185 } | 183 } |
186 | 184 |
187 std::unique_ptr<InterpolableValue> consumeLinetoVertical(const PathSegmentData&
segment, PathCoordinates& coordinates) | 185 PassOwnPtr<InterpolableValue> consumeLinetoVertical(const PathSegmentData& segme
nt, PathCoordinates& coordinates) |
188 { | 186 { |
189 bool isAbsolute = isAbsolutePathSegType(segment.command); | 187 bool isAbsolute = isAbsolutePathSegType(segment.command); |
190 return consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.currentY); | 188 return consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.currentY); |
191 } | 189 } |
192 | 190 |
193 PathSegmentData consumeInterpolableLinetoVertical(const InterpolableValue& value
, SVGPathSegType segType, PathCoordinates& coordinates) | 191 PathSegmentData consumeInterpolableLinetoVertical(const InterpolableValue& value
, SVGPathSegType segType, PathCoordinates& coordinates) |
194 { | 192 { |
195 bool isAbsolute = isAbsolutePathSegType(segType); | 193 bool isAbsolute = isAbsolutePathSegType(segType); |
196 PathSegmentData segment; | 194 PathSegmentData segment; |
197 segment.command = segType; | 195 segment.command = segType; |
198 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(&value, isAbsolut
e, coordinates.currentY)); | 196 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(&value, isAbsolut
e, coordinates.currentY)); |
199 return segment; | 197 return segment; |
200 } | 198 } |
201 | 199 |
202 std::unique_ptr<InterpolableValue> consumeCurvetoCubicSmooth(const PathSegmentDa
ta& segment, PathCoordinates& coordinates) | 200 PassOwnPtr<InterpolableValue> consumeCurvetoCubicSmooth(const PathSegmentData& s
egment, PathCoordinates& coordinates) |
203 { | 201 { |
204 bool isAbsolute = isAbsolutePathSegType(segment.command); | 202 bool isAbsolute = isAbsolutePathSegType(segment.command); |
205 std::unique_ptr<InterpolableList> result = InterpolableList::create(4); | 203 OwnPtr<InterpolableList> result = InterpolableList::create(4); |
206 result->set(0, consumeControlAxis(segment.x2(), isAbsolute, coordinates.curr
entX)); | 204 result->set(0, consumeControlAxis(segment.x2(), isAbsolute, coordinates.curr
entX)); |
207 result->set(1, consumeControlAxis(segment.y2(), isAbsolute, coordinates.curr
entY)); | 205 result->set(1, consumeControlAxis(segment.y2(), isAbsolute, coordinates.curr
entY)); |
208 result->set(2, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); | 206 result->set(2, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.cu
rrentX)); |
209 result->set(3, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); | 207 result->set(3, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.cu
rrentY)); |
210 return std::move(result); | 208 return std::move(result); |
211 } | 209 } |
212 | 210 |
213 PathSegmentData consumeInterpolableCurvetoCubicSmooth(const InterpolableValue& v
alue, SVGPathSegType segType, PathCoordinates& coordinates) | 211 PathSegmentData consumeInterpolableCurvetoCubicSmooth(const InterpolableValue& v
alue, SVGPathSegType segType, PathCoordinates& coordinates) |
214 { | 212 { |
215 const InterpolableList& list = toInterpolableList(value); | 213 const InterpolableList& list = toInterpolableList(value); |
216 bool isAbsolute = isAbsolutePathSegType(segType); | 214 bool isAbsolute = isAbsolutePathSegType(segType); |
217 PathSegmentData segment; | 215 PathSegmentData segment; |
218 segment.command = segType; | 216 segment.command = segType; |
219 segment.point2.setX(consumeInterpolableControlAxis(list.get(0), isAbsolute,
coordinates.currentX)); | 217 segment.point2.setX(consumeInterpolableControlAxis(list.get(0), isAbsolute,
coordinates.currentX)); |
220 segment.point2.setY(consumeInterpolableControlAxis(list.get(1), isAbsolute,
coordinates.currentY)); | 218 segment.point2.setY(consumeInterpolableControlAxis(list.get(1), isAbsolute,
coordinates.currentY)); |
221 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(list.get(2), isAb
solute, coordinates.currentX)); | 219 segment.targetPoint.setX(consumeInterpolableCoordinateAxis(list.get(2), isAb
solute, coordinates.currentX)); |
222 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(list.get(3), isAb
solute, coordinates.currentY)); | 220 segment.targetPoint.setY(consumeInterpolableCoordinateAxis(list.get(3), isAb
solute, coordinates.currentY)); |
223 return segment; | 221 return segment; |
224 } | 222 } |
225 | 223 |
226 std::unique_ptr<InterpolableValue> SVGPathSegInterpolationFunctions::consumePath
Seg(const PathSegmentData& segment, PathCoordinates& coordinates) | 224 PassOwnPtr<InterpolableValue> SVGPathSegInterpolationFunctions::consumePathSeg(c
onst PathSegmentData& segment, PathCoordinates& coordinates) |
227 { | 225 { |
228 switch (segment.command) { | 226 switch (segment.command) { |
229 case PathSegClosePath: | 227 case PathSegClosePath: |
230 return consumeClosePath(segment, coordinates); | 228 return consumeClosePath(segment, coordinates); |
231 | 229 |
232 case PathSegMoveToAbs: | 230 case PathSegMoveToAbs: |
233 case PathSegMoveToRel: | 231 case PathSegMoveToRel: |
234 case PathSegLineToAbs: | 232 case PathSegLineToAbs: |
235 case PathSegLineToRel: | 233 case PathSegLineToRel: |
236 case PathSegCurveToQuadraticSmoothAbs: | 234 case PathSegCurveToQuadraticSmoothAbs: |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 return consumeInterpolableCurvetoCubicSmooth(value, segType, coordinates
); | 305 return consumeInterpolableCurvetoCubicSmooth(value, segType, coordinates
); |
308 | 306 |
309 case PathSegUnknown: | 307 case PathSegUnknown: |
310 default: | 308 default: |
311 ASSERT_NOT_REACHED(); | 309 ASSERT_NOT_REACHED(); |
312 return PathSegmentData(); | 310 return PathSegmentData(); |
313 } | 311 } |
314 } | 312 } |
315 | 313 |
316 } // namespace blink | 314 } // namespace blink |
OLD | NEW |