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