Index: third_party/WebKit/Source/core/svg/SVGTransform.cpp |
diff --git a/third_party/WebKit/Source/core/svg/SVGTransform.cpp b/third_party/WebKit/Source/core/svg/SVGTransform.cpp |
index 936e6ab196f130e26ea33ac4b33ed85b90df0108..04f0a34bebe09cb8a83f98582adae0e2a25b1807 100644 |
--- a/third_party/WebKit/Source/core/svg/SVGTransform.cpp |
+++ b/third_party/WebKit/Source/core/svg/SVGTransform.cpp |
@@ -151,77 +151,89 @@ void SVGTransform::setSkewY(float angle) |
namespace { |
-const String& transformTypePrefixForParsing(SVGTransformType type) |
+const char* transformTypePrefixForParsing(SVGTransformType type) |
{ |
switch (type) { |
case SVG_TRANSFORM_UNKNOWN: |
- return emptyString(); |
- case SVG_TRANSFORM_MATRIX: { |
- DEFINE_STATIC_LOCAL(String, matrixString, ("matrix(")); |
- return matrixString; |
- } |
- case SVG_TRANSFORM_TRANSLATE: { |
- DEFINE_STATIC_LOCAL(String, translateString, ("translate(")); |
- return translateString; |
- } |
- case SVG_TRANSFORM_SCALE: { |
- DEFINE_STATIC_LOCAL(String, scaleString, ("scale(")); |
- return scaleString; |
- } |
- case SVG_TRANSFORM_ROTATE: { |
- DEFINE_STATIC_LOCAL(String, rotateString, ("rotate(")); |
- return rotateString; |
- } |
- case SVG_TRANSFORM_SKEWX: { |
- DEFINE_STATIC_LOCAL(String, skewXString, ("skewX(")); |
- return skewXString; |
- } |
- case SVG_TRANSFORM_SKEWY: { |
- DEFINE_STATIC_LOCAL(String, skewYString, ("skewY(")); |
- return skewYString; |
- } |
+ return ""; |
+ case SVG_TRANSFORM_MATRIX: |
+ return "matrix("; |
+ case SVG_TRANSFORM_TRANSLATE: |
+ return "translate("; |
+ case SVG_TRANSFORM_SCALE: |
+ return "scale("; |
+ case SVG_TRANSFORM_ROTATE: |
+ return "rotate("; |
+ case SVG_TRANSFORM_SKEWX: |
+ return "skewX("; |
+ case SVG_TRANSFORM_SKEWY: |
+ return "skewY("; |
} |
- |
ASSERT_NOT_REACHED(); |
- return emptyString(); |
+ return ""; |
} |
} |
String SVGTransform::valueAsString() const |
{ |
- const String& prefix = transformTypePrefixForParsing(m_transformType); |
+ double arguments[6]; |
pdr.
2015/12/15 19:26:25
Why store these off in a separate array instead of
fs
2015/12/15 19:42:57
All the append(' ')'s result in quite significant
|
+ size_t argumentCount = 0; |
switch (m_transformType) { |
case SVG_TRANSFORM_UNKNOWN: |
- return prefix; |
+ return emptyString(); |
case SVG_TRANSFORM_MATRIX: { |
- StringBuilder builder; |
- builder.append(prefix + String::number(m_matrix.a()) + ' ' + String::number(m_matrix.b()) + ' ' + String::number(m_matrix.c()) + ' ' + |
- String::number(m_matrix.d()) + ' ' + String::number(m_matrix.e()) + ' ' + String::number(m_matrix.f()) + ')'); |
- return builder.toString(); |
+ arguments[argumentCount++] = m_matrix.a(); |
+ arguments[argumentCount++] = m_matrix.b(); |
+ arguments[argumentCount++] = m_matrix.c(); |
+ arguments[argumentCount++] = m_matrix.d(); |
+ arguments[argumentCount++] = m_matrix.e(); |
+ arguments[argumentCount++] = m_matrix.f(); |
+ break; |
+ } |
+ case SVG_TRANSFORM_TRANSLATE: { |
+ arguments[argumentCount++] = m_matrix.e(); |
+ arguments[argumentCount++] = m_matrix.f(); |
+ break; |
+ } |
+ case SVG_TRANSFORM_SCALE: { |
+ arguments[argumentCount++] = m_matrix.a(); |
+ arguments[argumentCount++] = m_matrix.d(); |
+ break; |
} |
- case SVG_TRANSFORM_TRANSLATE: |
- return prefix + String::number(m_matrix.e()) + ' ' + String::number(m_matrix.f()) + ')'; |
- case SVG_TRANSFORM_SCALE: |
- return prefix + String::number(m_matrix.a()) + ' ' + String::number(m_matrix.d()) + ')'; |
case SVG_TRANSFORM_ROTATE: { |
+ arguments[argumentCount++] = m_angle; |
+ |
double angleInRad = deg2rad(m_angle); |
double cosAngle = cos(angleInRad); |
double sinAngle = sin(angleInRad); |
float cx = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * (1 - cosAngle) - m_matrix.f() * sinAngle) / (1 - cosAngle) / 2 : 0); |
float cy = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * sinAngle / (1 - cosAngle) + m_matrix.f()) / 2 : 0); |
- if (cx || cy) |
- return prefix + String::number(m_angle) + ' ' + String::number(cx) + ' ' + String::number(cy) + ')'; |
- return prefix + String::number(m_angle) + ')'; |
+ if (cx || cy) { |
+ arguments[argumentCount++] = cx; |
+ arguments[argumentCount++] = cy; |
+ } |
+ break; |
} |
case SVG_TRANSFORM_SKEWX: |
- return prefix + String::number(m_angle) + ')'; |
+ arguments[argumentCount++] = m_angle; |
+ break; |
case SVG_TRANSFORM_SKEWY: |
- return prefix + String::number(m_angle) + ')'; |
+ arguments[argumentCount++] = m_angle; |
+ break; |
} |
+ ASSERT(argumentCount <= WTF_ARRAY_LENGTH(arguments)); |
- ASSERT_NOT_REACHED(); |
- return emptyString(); |
+ StringBuilder builder; |
+ builder.append(transformTypePrefixForParsing(m_transformType)); |
+ |
+ for (size_t i = 0; i < argumentCount; ++i) { |
+ if (i) |
+ builder.append(' '); |
+ builder.appendNumber(arguments[i]); |
+ } |
+ builder.append(')'); |
+ return builder.toString(); |
} |
void SVGTransform::add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) |