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

Side by Side 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, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/wtf/text/StringBuilder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 2 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 17 matching lines...) Expand all
28 { 28 {
29 unsigned size = m_stringBuilder.length(); 29 unsigned size = m_stringBuilder.length();
30 if (!size) 30 if (!size)
31 return String(); 31 return String();
32 32
33 // Remove trailing space. 33 // Remove trailing space.
34 m_stringBuilder.resize(size - 1); 34 m_stringBuilder.resize(size - 1);
35 return m_stringBuilder.toString(); 35 return m_stringBuilder.toString();
36 } 36 }
37 37
38 static void appendFloat(StringBuilder& stringBuilder, float value)
39 {
40 stringBuilder.append(' ');
41 stringBuilder.appendNumber(value);
42 }
43
44 static void appendBool(StringBuilder& stringBuilder, bool value)
45 {
46 stringBuilder.append(' ');
47 stringBuilder.appendNumber(value);
48 }
49
50 static void appendPoint(StringBuilder& stringBuilder, const FloatPoint& point)
51 {
52 appendFloat(stringBuilder, point.x());
53 appendFloat(stringBuilder, point.y());
54 }
55
56 static void emitCommand1Arg(StringBuilder& stringBuilder, char commandChar, floa t argument)
57 {
58 stringBuilder.append(commandChar);
59 appendFloat(stringBuilder, argument);
60 stringBuilder.append(' ');
61 }
62
63 static void emitCommand1Arg(StringBuilder& stringBuilder, char commandChar, cons t FloatPoint& argumentPoint)
64 {
65 stringBuilder.append(commandChar);
66 appendPoint(stringBuilder, argumentPoint);
67 stringBuilder.append(' ');
68 }
69
70 static void emitCommand2Arg(StringBuilder& stringBuilder, char commandChar, cons t FloatPoint& argument1Point, const FloatPoint& argument2Point)
71 {
72 stringBuilder.append(commandChar);
73 appendPoint(stringBuilder, argument1Point);
74 appendPoint(stringBuilder, argument2Point);
75 stringBuilder.append(' ');
76 }
77
38 void SVGPathStringBuilder::moveTo(const FloatPoint& targetPoint, bool, PathCoord inateMode mode) 78 void SVGPathStringBuilder::moveTo(const FloatPoint& targetPoint, bool, PathCoord inateMode mode)
39 { 79 {
40 if (mode == AbsoluteCoordinates) 80 emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'M' : 'm', targetPoint);
41 m_stringBuilder.append("M " + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' ');
42 else
43 m_stringBuilder.append("m " + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' ');
44 } 81 }
45 82
46 void SVGPathStringBuilder::lineTo(const FloatPoint& targetPoint, PathCoordinateM ode mode) 83 void SVGPathStringBuilder::lineTo(const FloatPoint& targetPoint, PathCoordinateM ode mode)
47 { 84 {
48 if (mode == AbsoluteCoordinates) 85 emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'L' : 'l', targetPoint);
49 m_stringBuilder.append("L " + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' ');
50 else
51 m_stringBuilder.append("l " + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' ');
52 } 86 }
53 87
54 void SVGPathStringBuilder::lineToHorizontal(float x, PathCoordinateMode mode) 88 void SVGPathStringBuilder::lineToHorizontal(float x, PathCoordinateMode mode)
55 { 89 {
56 if (mode == AbsoluteCoordinates) 90 emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'H' : 'h', x);
57 m_stringBuilder.append("H " + String::number(x) + ' ');
58 else
59 m_stringBuilder.append("h " + String::number(x) + ' ');
60 } 91 }
61 92
62 void SVGPathStringBuilder::lineToVertical(float y, PathCoordinateMode mode) 93 void SVGPathStringBuilder::lineToVertical(float y, PathCoordinateMode mode)
63 { 94 {
64 if (mode == AbsoluteCoordinates) 95 emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'V' : 'v', y);
65 m_stringBuilder.append("V " + String::number(y) + ' ');
66 else
67 m_stringBuilder.append("v " + String::number(y) + ' ');
68 } 96 }
69 97
70 void SVGPathStringBuilder::curveToCubic(const FloatPoint& point1, const FloatPoi nt& point2, const FloatPoint& targetPoint, PathCoordinateMode mode) 98 void SVGPathStringBuilder::curveToCubic(const FloatPoint& point1, const FloatPoi nt& point2, const FloatPoint& targetPoint, PathCoordinateMode mode)
71 { 99 {
72 if (mode == AbsoluteCoordinates) { 100 m_stringBuilder.append((mode == AbsoluteCoordinates) ? 'C' : 'c');
73 m_stringBuilder.append("C " + String::number(point1.x()) + ' ' + String: :number(point1.y()) 101 appendPoint(m_stringBuilder, point1);
74 + ' ' + String::number(point2.x()) + ' ' + String: :number(point2.y()) 102 appendPoint(m_stringBuilder, point2);
75 + ' ' + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' '); 103 appendPoint(m_stringBuilder, targetPoint);
76 return; 104 m_stringBuilder.append(' ');
77 }
78
79 m_stringBuilder.append("c " + String::number(point1.x()) + ' ' + String::num ber(point1.y())
80 + ' ' + String::number(point2.x()) + ' ' + String::num ber(point2.y())
81 + ' ' + String::number(targetPoint.x()) + ' ' + String ::number(targetPoint.y()) + ' ');
82 } 105 }
83 106
84 void SVGPathStringBuilder::curveToCubicSmooth(const FloatPoint& point2, const Fl oatPoint& targetPoint, PathCoordinateMode mode) 107 void SVGPathStringBuilder::curveToCubicSmooth(const FloatPoint& point2, const Fl oatPoint& targetPoint, PathCoordinateMode mode)
85 { 108 {
86 if (mode == AbsoluteCoordinates) { 109 emitCommand2Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'S' : 's', point2, targetPoint);
87 m_stringBuilder.append("S " + String::number(point2.x()) + ' ' + String: :number(point2.y())
88 + ' ' + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' ');
89 return;
90 }
91
92 m_stringBuilder.append("s " + String::number(point2.x()) + ' ' + String::num ber(point2.y())
93 + ' ' + String::number(targetPoint.x()) + ' ' + String ::number(targetPoint.y()) + ' ');
94 } 110 }
95 111
96 void SVGPathStringBuilder::curveToQuadratic(const FloatPoint& point1, const Floa tPoint& targetPoint, PathCoordinateMode mode) 112 void SVGPathStringBuilder::curveToQuadratic(const FloatPoint& point1, const Floa tPoint& targetPoint, PathCoordinateMode mode)
97 { 113 {
98 if (mode == AbsoluteCoordinates) { 114 emitCommand2Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'Q' : 'q', point1, targetPoint);
99 m_stringBuilder.append("Q " + String::number(point1.x()) + ' ' + String: :number(point1.y())
100 + ' ' + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' ');
101 return;
102 }
103
104 m_stringBuilder.append("q " + String::number(point1.x()) + ' ' + String::num ber(point1.y())
105 + ' ' + String::number(targetPoint.x()) + ' ' + String ::number(targetPoint.y()) + ' ');
106 } 115 }
107 116
108 void SVGPathStringBuilder::curveToQuadraticSmooth(const FloatPoint& targetPoint, PathCoordinateMode mode) 117 void SVGPathStringBuilder::curveToQuadraticSmooth(const FloatPoint& targetPoint, PathCoordinateMode mode)
109 { 118 {
110 if (mode == AbsoluteCoordinates) 119 emitCommand1Arg(m_stringBuilder, (mode == AbsoluteCoordinates) ? 'T' : 't', targetPoint);
111 m_stringBuilder.append("T " + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' ');
112 else
113 m_stringBuilder.append("t " + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' ');
114 } 120 }
115 121
116 void SVGPathStringBuilder::arcTo(float r1, float r2, float angle, bool largeArcF lag, bool sweepFlag, const FloatPoint& targetPoint, PathCoordinateMode mode) 122 void SVGPathStringBuilder::arcTo(float r1, float r2, float angle, bool largeArcF lag, bool sweepFlag, const FloatPoint& targetPoint, PathCoordinateMode mode)
117 { 123 {
118 if (mode == AbsoluteCoordinates) { 124 m_stringBuilder.append((mode == AbsoluteCoordinates) ? 'A' : 'a');
119 m_stringBuilder.append("A " + String::number(r1) + ' ' + String::number( r2) 125 appendFloat(m_stringBuilder, r1);
120 + ' ' + String::number(angle) + ' ' + String::numb er(largeArcFlag) + ' ' + String::number(sweepFlag) 126 appendFloat(m_stringBuilder, r2);
121 + ' ' + String::number(targetPoint.x()) + ' ' + St ring::number(targetPoint.y()) + ' '); 127 appendFloat(m_stringBuilder, angle);
122 return; 128 appendBool(m_stringBuilder, largeArcFlag);
123 } 129 appendBool(m_stringBuilder, sweepFlag);
124 130 appendPoint(m_stringBuilder, targetPoint);
125 m_stringBuilder.append("a " + String::number(r1) + ' ' + String::number(r2) 131 m_stringBuilder.append(' ');
126 + ' ' + String::number(angle) + ' ' + String::number(l argeArcFlag) + ' ' + String::number(sweepFlag)
127 + ' ' + String::number(targetPoint.x()) + ' ' + String ::number(targetPoint.y()) + ' ');
128 } 132 }
129 133
130 void SVGPathStringBuilder::closePath() 134 void SVGPathStringBuilder::closePath()
131 { 135 {
132 m_stringBuilder.append("Z "); 136 m_stringBuilder.append("Z ");
133 } 137 }
134 138
135 } // namespace WebCore 139 } // namespace WebCore
OLDNEW
« 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