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