Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1990)

Unified Diff: Source/core/svg/SVGPathStringBuilder.cpp

Issue 212603003: De-bloat SVGPathStringBuilder (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Drop ASSERT. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/wtf/text/StringBuilder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/svg/SVGPathStringBuilder.cpp
diff --git a/Source/core/svg/SVGPathStringBuilder.cpp b/Source/core/svg/SVGPathStringBuilder.cpp
index 580454b7b81141dd114a23a0e66e7bd4d8b6b33b..e3c5905e833c0621b1fd2d38358ca83e4599a287 100644
--- a/Source/core/svg/SVGPathStringBuilder.cpp
+++ b/Source/core/svg/SVGPathStringBuilder.cpp
@@ -35,96 +35,100 @@ String SVGPathStringBuilder::result()
return m_stringBuilder.toString();
}
+static void appendFloat(StringBuilder& stringBuilder, float value)
+{
+ stringBuilder.append(' ');
+ stringBuilder.appendNumber(value);
+}
+
+static void appendBool(StringBuilder& stringBuilder, bool value)
+{
+ stringBuilder.append(' ');
+ stringBuilder.appendNumber(value);
+}
+
+static void appendPoint(StringBuilder& stringBuilder, const FloatPoint& point)
+{
+ appendFloat(stringBuilder, point.x());
+ 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, bool, PathCoordinateMode mode)
{
- if (mode == AbsoluteCoordinates)
- m_stringBuilder.append("M " + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
- else
- m_stringBuilder.append("m " + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
+ emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'M' : 'm', targetPoint);
}
void SVGPathStringBuilder::lineTo(const FloatPoint& targetPoint, PathCoordinateMode mode)
{
- if (mode == AbsoluteCoordinates)
- m_stringBuilder.append("L " + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
- else
- m_stringBuilder.append("l " + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
+ emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'L' : 'l', targetPoint);
}
void SVGPathStringBuilder::lineToHorizontal(float x, PathCoordinateMode mode)
{
- if (mode == AbsoluteCoordinates)
- m_stringBuilder.append("H " + String::number(x) + ' ');
- else
- m_stringBuilder.append("h " + String::number(x) + ' ');
+ emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'H' : 'h', x);
}
void SVGPathStringBuilder::lineToVertical(float y, PathCoordinateMode mode)
{
- if (mode == AbsoluteCoordinates)
- m_stringBuilder.append("V " + String::number(y) + ' ');
- else
- m_stringBuilder.append("v " + String::number(y) + ' ');
+ emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'V' : 'v', y);
}
void SVGPathStringBuilder::curveToCubic(const FloatPoint& point1, const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode)
{
- if (mode == AbsoluteCoordinates) {
- m_stringBuilder.append("C " + String::number(point1.x()) + ' ' + String::number(point1.y())
- + ' ' + String::number(point2.x()) + ' ' + String::number(point2.y())
- + ' ' + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
- return;
- }
-
- m_stringBuilder.append("c " + String::number(point1.x()) + ' ' + String::number(point1.y())
- + ' ' + String::number(point2.x()) + ' ' + String::number(point2.y())
- + ' ' + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
+ 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)
{
- if (mode == AbsoluteCoordinates) {
- m_stringBuilder.append("S " + String::number(point2.x()) + ' ' + String::number(point2.y())
- + ' ' + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
- return;
- }
-
- m_stringBuilder.append("s " + String::number(point2.x()) + ' ' + String::number(point2.y())
- + ' ' + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
+ emitCommand2Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'S' : 's', point2, targetPoint);
}
void SVGPathStringBuilder::curveToQuadratic(const FloatPoint& point1, const FloatPoint& targetPoint, PathCoordinateMode mode)
{
- if (mode == AbsoluteCoordinates) {
- m_stringBuilder.append("Q " + String::number(point1.x()) + ' ' + String::number(point1.y())
- + ' ' + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
- return;
- }
-
- m_stringBuilder.append("q " + String::number(point1.x()) + ' ' + String::number(point1.y())
- + ' ' + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
+ emitCommand2Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'Q' : 'q', point1, targetPoint);
}
void SVGPathStringBuilder::curveToQuadraticSmooth(const FloatPoint& targetPoint, PathCoordinateMode mode)
{
- if (mode == AbsoluteCoordinates)
- m_stringBuilder.append("T " + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
- else
- m_stringBuilder.append("t " + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
+ 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)
{
- if (mode == AbsoluteCoordinates) {
- m_stringBuilder.append("A " + String::number(r1) + ' ' + String::number(r2)
- + ' ' + String::number(angle) + ' ' + String::number(largeArcFlag) + ' ' + String::number(sweepFlag)
- + ' ' + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
- return;
- }
-
- m_stringBuilder.append("a " + String::number(r1) + ' ' + String::number(r2)
- + ' ' + String::number(angle) + ' ' + String::number(largeArcFlag) + ' ' + String::number(sweepFlag)
- + ' ' + String::number(targetPoint.x()) + ' ' + String::number(targetPoint.y()) + ' ');
+ 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);
+ m_stringBuilder.append(' ');
}
void SVGPathStringBuilder::closePath()
« no previous file with comments | « no previous file | Source/wtf/text/StringBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698