| 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 |