Index: Source/core/svg/SVGPathSegListBuilder.cpp |
diff --git a/Source/core/svg/SVGPathSegListBuilder.cpp b/Source/core/svg/SVGPathSegListBuilder.cpp |
index 1e4633ae20a71451d5f3f57114b433ff7bc0e449..05e4f407a450a21b5d537dfe0adf803847406ff9 100644 |
--- a/Source/core/svg/SVGPathSegListBuilder.cpp |
+++ b/Source/core/svg/SVGPathSegListBuilder.cpp |
@@ -52,6 +52,8 @@ SVGPathSegListBuilder::SVGPathSegListBuilder(SVGPathElement* pathElement, PassRe |
: m_pathElement(pathElement) |
, m_pathSegList(pathSegList) |
{ |
+ ASSERT(m_pathElement); |
+ ASSERT(m_pathSegList); |
} |
DEFINE_TRACE(SVGPathSegListBuilder) |
@@ -61,101 +63,71 @@ DEFINE_TRACE(SVGPathSegListBuilder) |
SVGPathConsumer::trace(visitor); |
} |
-void SVGPathSegListBuilder::moveTo(const FloatPoint& targetPoint, PathCoordinateMode mode) |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegMovetoAbs::create(m_pathElement, targetPoint.x(), targetPoint.y())); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegMovetoRel::create(m_pathElement, targetPoint.x(), targetPoint.y())); |
-} |
- |
-void SVGPathSegListBuilder::lineTo(const FloatPoint& targetPoint, PathCoordinateMode mode) |
+void SVGPathSegListBuilder::emitSegment(const PathSegmentData& segment) |
{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegLinetoAbs::create(m_pathElement, targetPoint.x(), targetPoint.y())); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegLinetoRel::create(m_pathElement, targetPoint.x(), targetPoint.y())); |
-} |
- |
-void SVGPathSegListBuilder::lineToHorizontal(float x, PathCoordinateMode mode) |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegLinetoHorizontalAbs::create(m_pathElement, x)); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegLinetoHorizontalRel::create(m_pathElement, x)); |
-} |
- |
-void SVGPathSegListBuilder::lineToVertical(float y, PathCoordinateMode mode) |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegLinetoVerticalAbs::create(m_pathElement, y)); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegLinetoVerticalRel::create(m_pathElement, y)); |
-} |
- |
-void SVGPathSegListBuilder::curveToCubic(const FloatPoint& point1, const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode) |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegCurvetoCubicAbs::create(m_pathElement, targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y())); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegCurvetoCubicRel::create(m_pathElement, targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y())); |
-} |
- |
-void SVGPathSegListBuilder::curveToCubicSmooth(const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode) |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegCurvetoCubicSmoothAbs::create(m_pathElement, targetPoint.x(), targetPoint.y(), point2.x(), point2.y())); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegCurvetoCubicSmoothRel::create(m_pathElement, targetPoint.x(), targetPoint.y(), point2.x(), point2.y())); |
-} |
- |
-void SVGPathSegListBuilder::curveToQuadratic(const FloatPoint& point1, const FloatPoint& targetPoint, PathCoordinateMode mode) |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegCurvetoQuadraticAbs::create(m_pathElement, targetPoint.x(), targetPoint.y(), point1.x(), point1.y())); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegCurvetoQuadraticRel::create(m_pathElement, targetPoint.x(), targetPoint.y(), point1.x(), point1.y())); |
-} |
- |
-void SVGPathSegListBuilder::curveToQuadraticSmooth(const FloatPoint& targetPoint, PathCoordinateMode mode) |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegCurvetoQuadraticSmoothAbs::create(m_pathElement, targetPoint.x(), targetPoint.y())); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegCurvetoQuadraticSmoothRel::create(m_pathElement, targetPoint.x(), targetPoint.y())); |
-} |
- |
-void SVGPathSegListBuilder::arcTo(float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, const FloatPoint& targetPoint, PathCoordinateMode mode) |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- if (mode == AbsoluteCoordinates) |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegArcAbs::create(m_pathElement, targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag)); |
- else |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegArcRel::create(m_pathElement, targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag)); |
-} |
- |
-void SVGPathSegListBuilder::closePath() |
-{ |
- ASSERT(m_pathElement); |
- ASSERT(m_pathSegList); |
- m_pathSegList->appendWithoutByteStreamSync(SVGPathSegClosePath::create(m_pathElement)); |
+ RefPtrWillBeRawPtr<SVGPathSeg> newPathSegment; |
+ switch (segment.command) { |
+ case PathSegMoveToRel: |
+ newPathSegment = SVGPathSegMovetoRel::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y()); |
+ break; |
+ case PathSegMoveToAbs: |
+ newPathSegment = SVGPathSegMovetoAbs::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y()); |
+ break; |
+ case PathSegLineToRel: |
+ newPathSegment = SVGPathSegLinetoRel::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y()); |
+ break; |
+ case PathSegLineToAbs: |
+ newPathSegment = SVGPathSegLinetoAbs::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y()); |
+ break; |
+ case PathSegLineToHorizontalRel: |
+ newPathSegment = SVGPathSegLinetoHorizontalRel::create(m_pathElement, segment.targetPoint.x()); |
+ break; |
+ case PathSegLineToHorizontalAbs: |
+ newPathSegment = SVGPathSegLinetoHorizontalAbs::create(m_pathElement, segment.targetPoint.x()); |
+ break; |
+ case PathSegLineToVerticalRel: |
+ newPathSegment = SVGPathSegLinetoVerticalRel::create(m_pathElement, segment.targetPoint.y()); |
+ break; |
+ case PathSegLineToVerticalAbs: |
+ newPathSegment = SVGPathSegLinetoVerticalAbs::create(m_pathElement, segment.targetPoint.y()); |
+ break; |
+ case PathSegClosePath: |
+ newPathSegment = SVGPathSegClosePath::create(m_pathElement); |
+ break; |
+ case PathSegCurveToCubicRel: |
+ newPathSegment = SVGPathSegCurvetoCubicRel::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y(), segment.point1.x(), segment.point1.y(), segment.point2.x(), segment.point2.y()); |
+ break; |
+ case PathSegCurveToCubicAbs: |
+ newPathSegment = SVGPathSegCurvetoCubicAbs::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y(), segment.point1.x(), segment.point1.y(), segment.point2.x(), segment.point2.y()); |
+ break; |
+ case PathSegCurveToCubicSmoothRel: |
+ newPathSegment = SVGPathSegCurvetoCubicSmoothRel::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y(), segment.point2.x(), segment.point2.y()); |
+ break; |
+ case PathSegCurveToCubicSmoothAbs: |
+ newPathSegment = SVGPathSegCurvetoCubicSmoothAbs::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y(), segment.point2.x(), segment.point2.y()); |
+ break; |
+ case PathSegCurveToQuadraticRel: |
+ newPathSegment = SVGPathSegCurvetoQuadraticRel::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y(), segment.point1.x(), segment.point1.y()); |
+ break; |
+ case PathSegCurveToQuadraticAbs: |
+ newPathSegment = SVGPathSegCurvetoQuadraticAbs::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y(), segment.point1.x(), segment.point1.y()); |
+ break; |
+ case PathSegCurveToQuadraticSmoothRel: |
+ newPathSegment = SVGPathSegCurvetoQuadraticSmoothRel::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y()); |
+ break; |
+ case PathSegCurveToQuadraticSmoothAbs: |
+ newPathSegment = SVGPathSegCurvetoQuadraticSmoothAbs::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y()); |
+ break; |
+ case PathSegArcRel: |
+ newPathSegment = SVGPathSegArcRel::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y(), segment.arcRadii().x(), segment.arcRadii().y(), segment.arcAngle(), segment.arcLarge, segment.arcSweep); |
+ break; |
+ case PathSegArcAbs: |
+ newPathSegment = SVGPathSegArcAbs::create(m_pathElement, segment.targetPoint.x(), segment.targetPoint.y(), segment.arcRadii().x(), segment.arcRadii().y(), segment.arcAngle(), segment.arcLarge, segment.arcSweep); |
+ break; |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ } |
+ m_pathSegList->appendWithoutByteStreamSync(newPathSegment); |
} |
} |