Chromium Code Reviews| Index: Source/core/svg/SVGPathStringBuilder.cpp |
| diff --git a/Source/core/svg/SVGPathStringBuilder.cpp b/Source/core/svg/SVGPathStringBuilder.cpp |
| index 4ef58daa7acfedbf553e41add4ee9ee629e6efa3..4847312458e43fb6bcdfba554a04b692cac9c87b 100644 |
| --- a/Source/core/svg/SVGPathStringBuilder.cpp |
| +++ b/Source/core/svg/SVGPathStringBuilder.cpp |
| @@ -20,6 +20,7 @@ |
| #include "config.h" |
| #include "core/svg/SVGPathStringBuilder.h" |
| +#include "core/svg/SVGPathSeg.h" |
| #include "wtf/text/WTFString.h" |
| namespace blink { |
| @@ -53,87 +54,82 @@ static void appendPoint(StringBuilder& stringBuilder, const FloatPoint& point) |
| appendFloat(stringBuilder, point.y()); |
| } |
| -static void emitCommand1Arg(StringBuilder& stringBuilder, char commandChar, float argument) |
| -{ |
| - stringBuilder.append(commandChar); |
| - appendFloat(stringBuilder, argument); |
| - stringBuilder.append(' '); |
| -} |
| - |
| -static void emitCommand1Arg(StringBuilder& stringBuilder, char commandChar, const FloatPoint& argumentPoint) |
| -{ |
| - stringBuilder.append(commandChar); |
| - appendPoint(stringBuilder, argumentPoint); |
| - stringBuilder.append(' '); |
| -} |
| - |
| -static void emitCommand2Arg(StringBuilder& stringBuilder, char commandChar, const FloatPoint& argument1Point, const FloatPoint& argument2Point) |
| -{ |
| - stringBuilder.append(commandChar); |
| - appendPoint(stringBuilder, argument1Point); |
| - appendPoint(stringBuilder, argument2Point); |
| - stringBuilder.append(' '); |
| -} |
| - |
| -void SVGPathStringBuilder::moveTo(const FloatPoint& targetPoint, PathCoordinateMode mode) |
| -{ |
| - emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'M' : 'm', targetPoint); |
| -} |
| - |
| -void SVGPathStringBuilder::lineTo(const FloatPoint& targetPoint, PathCoordinateMode mode) |
| -{ |
| - emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'L' : 'l', targetPoint); |
| -} |
| - |
| -void SVGPathStringBuilder::lineToHorizontal(float x, PathCoordinateMode mode) |
| -{ |
| - emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'H' : 'h', x); |
| -} |
| - |
| -void SVGPathStringBuilder::lineToVertical(float y, PathCoordinateMode mode) |
| -{ |
| - emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'V' : 'v', y); |
| -} |
| - |
| -void SVGPathStringBuilder::curveToCubic(const FloatPoint& point1, const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode) |
| -{ |
| - m_stringBuilder.append((mode == AbsoluteCoordinates) ? 'C' : 'c'); |
| - appendPoint(m_stringBuilder, point1); |
| - appendPoint(m_stringBuilder, point2); |
| - appendPoint(m_stringBuilder, targetPoint); |
| - m_stringBuilder.append(' '); |
| -} |
| - |
| -void SVGPathStringBuilder::curveToCubicSmooth(const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode) |
| -{ |
| - emitCommand2Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'S' : 's', point2, targetPoint); |
| -} |
| - |
| -void SVGPathStringBuilder::curveToQuadratic(const FloatPoint& point1, const FloatPoint& targetPoint, PathCoordinateMode mode) |
| -{ |
| - emitCommand2Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'Q' : 'q', point1, targetPoint); |
| -} |
| - |
| -void SVGPathStringBuilder::curveToQuadraticSmooth(const FloatPoint& targetPoint, PathCoordinateMode mode) |
| -{ |
| - emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'T' : 't', targetPoint); |
| -} |
| - |
| -void SVGPathStringBuilder::arcTo(float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, const FloatPoint& targetPoint, PathCoordinateMode mode) |
| -{ |
| - m_stringBuilder.append((mode == AbsoluteCoordinates) ? 'A' : 'a'); |
| - appendFloat(m_stringBuilder, r1); |
| - appendFloat(m_stringBuilder, r2); |
| - appendFloat(m_stringBuilder, angle); |
| - appendBool(m_stringBuilder, largeArcFlag); |
| - appendBool(m_stringBuilder, sweepFlag); |
| - appendPoint(m_stringBuilder, targetPoint); |
| +// FIXME: Centralized location for this (SVGPathSeg.h?) |
|
Stephen Chennney
2015/03/25 15:05:25
FIXMEs now must be TODO(name). See thread on blink
Stephen Chennney
2015/03/25 15:05:25
Is this a repeat of some other block? I recall see
fs
2015/03/25 17:08:14
I don't _think_ this exact block exists somewhere
|
| +static const char pathSegmentCharacter[] = { |
| + 0, // PathSegUnknown |
| + 'Z', // PathSegClosePath |
| + 'M', // PathSegMoveToAbs |
| + 'm', // PathSegMoveToRel |
| + 'L', // PathSegLineToAbs |
| + 'l', // PathSegLineToRel |
| + 'C', // PathSegCurveToCubicAbs |
| + 'c', // PathSegCurveToCubicRel |
| + 'Q', // PathSegCurveToQuadraticAbs |
| + 'q', // PathSegCurveToQuadraticRel |
| + 'A', // PathSegArcAbs |
| + 'a', // PathSegArcRel |
| + 'H', // PathSegLineToHorizontalAbs |
| + 'h', // PathSegLineToHorizontalRel |
| + 'V', // PathSegLineToVerticalAbs |
| + 'v', // PathSegLineToVerticalRel |
| + 'S', // PathSegCurveToCubicSmoothAbs |
| + 's', // PathSegCurveToCubicSmoothRel |
| + 'T', // PathSegCurveToQuadraticSmoothAbs |
| + 't', // PathSegCurveToQuadraticSmoothRel |
| +}; |
| + |
| +void SVGPathStringBuilder::emitSegment(const PathSegmentData& segment) |
| +{ |
| + ASSERT(segment.command > PathSegUnknown && segment.command <= PathSegCurveToQuadraticSmoothRel); |
| + m_stringBuilder.append(pathSegmentCharacter[segment.command]); |
| + |
| + switch (segment.command) { |
| + case PathSegMoveToRel: |
| + case PathSegMoveToAbs: |
| + case PathSegLineToRel: |
| + case PathSegLineToAbs: |
| + case PathSegCurveToQuadraticSmoothRel: |
| + case PathSegCurveToQuadraticSmoothAbs: |
| + appendPoint(m_stringBuilder, segment.targetPoint); |
| + break; |
| + case PathSegLineToHorizontalRel: |
| + case PathSegLineToHorizontalAbs: |
| + appendFloat(m_stringBuilder, segment.targetPoint.x()); |
| + break; |
| + case PathSegLineToVerticalRel: |
| + case PathSegLineToVerticalAbs: |
| + appendFloat(m_stringBuilder, segment.targetPoint.y()); |
| + break; |
| + case PathSegClosePath: |
| + break; |
| + case PathSegCurveToCubicRel: |
| + case PathSegCurveToCubicAbs: |
| + appendPoint(m_stringBuilder, segment.point1); |
| + appendPoint(m_stringBuilder, segment.point2); |
| + appendPoint(m_stringBuilder, segment.targetPoint); |
| + break; |
| + case PathSegCurveToCubicSmoothRel: |
| + case PathSegCurveToCubicSmoothAbs: |
| + appendPoint(m_stringBuilder, segment.point2); |
| + appendPoint(m_stringBuilder, segment.targetPoint); |
| + break; |
| + case PathSegCurveToQuadraticRel: |
| + case PathSegCurveToQuadraticAbs: |
| + appendPoint(m_stringBuilder, segment.point1); |
| + appendPoint(m_stringBuilder, segment.targetPoint); |
| + break; |
| + case PathSegArcRel: |
| + case PathSegArcAbs: |
| + appendPoint(m_stringBuilder, segment.point1); |
| + appendFloat(m_stringBuilder, segment.point2.x()); |
| + appendBool(m_stringBuilder, segment.arcLarge); |
| + appendBool(m_stringBuilder, segment.arcSweep); |
| + appendPoint(m_stringBuilder, segment.targetPoint); |
| + break; |
| + default: |
| + ASSERT_NOT_REACHED(); |
| + } |
| m_stringBuilder.append(' '); |
| } |
| -void SVGPathStringBuilder::closePath() |
| -{ |
| - m_stringBuilder.appendLiteral("Z "); |
| -} |
| - |
| } // namespace blink |