Index: Source/core/svg/SVGPathParser.cpp |
diff --git a/Source/core/svg/SVGPathParser.cpp b/Source/core/svg/SVGPathParser.cpp |
index 509fd6c89b47ee5c73dc5e7498ab44f98775c918..e81624d18fed5b3a9bc16116551063f299b1b18e 100644 |
--- a/Source/core/svg/SVGPathParser.cpp |
+++ b/Source/core/svg/SVGPathParser.cpp |
@@ -47,7 +47,6 @@ bool SVGPathParser::initialCommandIsMoveTo() |
return command == PathSegMoveToAbs || command == PathSegMoveToRel; |
} |
- |
class NormalizingConsumer { |
STACK_ALLOCATED(); |
public: |
@@ -197,24 +196,8 @@ void NormalizingConsumer::emitSegment(PathSegmentData& segment) |
ASSERT_NOT_REACHED(); |
} |
- switch (segment.command) { |
- case PathSegMoveToAbs: |
- m_consumer->moveTo(segment.targetPoint, AbsoluteCoordinates); |
- break; |
- case PathSegLineToAbs: |
- m_consumer->lineTo(segment.targetPoint, AbsoluteCoordinates); |
- break; |
- case PathSegClosePath: |
- m_consumer->closePath(); |
- break; |
- case PathSegCurveToCubicAbs: |
- m_consumer->curveToCubic(segment.point1, segment.point2, segment.targetPoint, AbsoluteCoordinates); |
- break; |
- case PathSegArcAbs: |
- break; |
- default: |
- ASSERT_NOT_REACHED(); |
- } |
+ if (segment.command != PathSegArcAbs) |
+ m_consumer->emitSegment(segment); |
m_currentPoint = segment.targetPoint; |
@@ -242,60 +225,7 @@ bool SVGPathParser::parsePathDataFromSource(PathParsingMode pathParsingMode, boo |
if (pathParsingMode == NormalizedParsing) { |
normalizer.emitSegment(segment); |
} else { |
- PathCoordinateMode mode = AbsoluteCoordinates; |
- |
- switch (segment.command) { |
- case PathSegMoveToRel: |
- mode = RelativeCoordinates; |
- case PathSegMoveToAbs: |
- m_consumer->moveTo(segment.targetPoint, mode); |
- break; |
- case PathSegLineToRel: |
- mode = RelativeCoordinates; |
- case PathSegLineToAbs: |
- m_consumer->lineTo(segment.targetPoint, mode); |
- break; |
- case PathSegLineToHorizontalRel: |
- mode = RelativeCoordinates; |
- case PathSegLineToHorizontalAbs: |
- m_consumer->lineToHorizontal(segment.targetPoint.x(), mode); |
- break; |
- case PathSegLineToVerticalRel: |
- mode = RelativeCoordinates; |
- case PathSegLineToVerticalAbs: |
- m_consumer->lineToVertical(segment.targetPoint.y(), mode); |
- break; |
- case PathSegClosePath: |
- m_consumer->closePath(); |
- break; |
- case PathSegCurveToCubicRel: |
- mode = RelativeCoordinates; |
- case PathSegCurveToCubicAbs: |
- m_consumer->curveToCubic(segment.point1, segment.point2, segment.targetPoint, mode); |
- break; |
- case PathSegCurveToCubicSmoothRel: |
- mode = RelativeCoordinates; |
- case PathSegCurveToCubicSmoothAbs: |
- m_consumer->curveToCubicSmooth(segment.point2, segment.targetPoint, mode); |
- break; |
- case PathSegCurveToQuadraticRel: |
- mode = RelativeCoordinates; |
- case PathSegCurveToQuadraticAbs: |
- m_consumer->curveToQuadratic(segment.point1, segment.targetPoint, mode); |
- break; |
- case PathSegCurveToQuadraticSmoothRel: |
- mode = RelativeCoordinates; |
- case PathSegCurveToQuadraticSmoothAbs: |
- m_consumer->curveToQuadraticSmooth(segment.targetPoint, mode); |
- break; |
- case PathSegArcRel: |
- mode = RelativeCoordinates; |
- case PathSegArcAbs: |
- m_consumer->arcTo(segment.arcRadii().x(), segment.arcRadii().y(), segment.arcAngle(), segment.arcLarge, segment.arcSweep, segment.targetPoint, mode); |
- break; |
- default: |
- ASSERT_NOT_REACHED(); |
- } |
+ m_consumer->emitSegment(segment); |
} |
if (!m_consumer->continueConsuming()) |
@@ -401,8 +331,13 @@ bool NormalizingConsumer::decomposeArcToCubic(const FloatPoint& currentPoint, co |
point2 = targetPoint; |
point2.move(t * sinEndTheta, -t * cosEndTheta); |
- m_consumer->curveToCubic(pointTransform.mapPoint(point1), pointTransform.mapPoint(point2), |
- pointTransform.mapPoint(targetPoint), AbsoluteCoordinates); |
+ PathSegmentData cubicSegment; |
+ cubicSegment.command = PathSegCurveToCubicAbs; |
+ cubicSegment.point1 = pointTransform.mapPoint(point1); |
+ cubicSegment.point2 = pointTransform.mapPoint(point2); |
+ cubicSegment.targetPoint = pointTransform.mapPoint(targetPoint); |
+ |
+ m_consumer->emitSegment(cubicSegment); |
} |
return true; |
} |