Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> |
| 3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 144 { | 144 { |
| 145 m_transformType = SVG_TRANSFORM_SKEWY; | 145 m_transformType = SVG_TRANSFORM_SKEWY; |
| 146 m_angle = angle; | 146 m_angle = angle; |
| 147 | 147 |
| 148 m_matrix.makeIdentity(); | 148 m_matrix.makeIdentity(); |
| 149 m_matrix.skewY(angle); | 149 m_matrix.skewY(angle); |
| 150 } | 150 } |
| 151 | 151 |
| 152 namespace { | 152 namespace { |
| 153 | 153 |
| 154 const String& transformTypePrefixForParsing(SVGTransformType type) | 154 const char* transformTypePrefixForParsing(SVGTransformType type) |
| 155 { | 155 { |
| 156 switch (type) { | 156 switch (type) { |
| 157 case SVG_TRANSFORM_UNKNOWN: | 157 case SVG_TRANSFORM_UNKNOWN: |
| 158 return emptyString(); | 158 return ""; |
| 159 case SVG_TRANSFORM_MATRIX: { | 159 case SVG_TRANSFORM_MATRIX: |
| 160 DEFINE_STATIC_LOCAL(String, matrixString, ("matrix(")); | 160 return "matrix("; |
| 161 return matrixString; | 161 case SVG_TRANSFORM_TRANSLATE: |
| 162 return "translate("; | |
| 163 case SVG_TRANSFORM_SCALE: | |
| 164 return "scale("; | |
| 165 case SVG_TRANSFORM_ROTATE: | |
| 166 return "rotate("; | |
| 167 case SVG_TRANSFORM_SKEWX: | |
| 168 return "skewX("; | |
| 169 case SVG_TRANSFORM_SKEWY: | |
| 170 return "skewY("; | |
| 162 } | 171 } |
| 163 case SVG_TRANSFORM_TRANSLATE: { | |
| 164 DEFINE_STATIC_LOCAL(String, translateString, ("translate(")); | |
| 165 return translateString; | |
| 166 } | |
| 167 case SVG_TRANSFORM_SCALE: { | |
| 168 DEFINE_STATIC_LOCAL(String, scaleString, ("scale(")); | |
| 169 return scaleString; | |
| 170 } | |
| 171 case SVG_TRANSFORM_ROTATE: { | |
| 172 DEFINE_STATIC_LOCAL(String, rotateString, ("rotate(")); | |
| 173 return rotateString; | |
| 174 } | |
| 175 case SVG_TRANSFORM_SKEWX: { | |
| 176 DEFINE_STATIC_LOCAL(String, skewXString, ("skewX(")); | |
| 177 return skewXString; | |
| 178 } | |
| 179 case SVG_TRANSFORM_SKEWY: { | |
| 180 DEFINE_STATIC_LOCAL(String, skewYString, ("skewY(")); | |
| 181 return skewYString; | |
| 182 } | |
| 183 } | |
| 184 | |
| 185 ASSERT_NOT_REACHED(); | 172 ASSERT_NOT_REACHED(); |
| 186 return emptyString(); | 173 return ""; |
| 187 } | 174 } |
| 188 | 175 |
| 189 } | 176 } |
| 190 | 177 |
| 191 String SVGTransform::valueAsString() const | 178 String SVGTransform::valueAsString() const |
| 192 { | 179 { |
| 193 const String& prefix = transformTypePrefixForParsing(m_transformType); | 180 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
| |
| 181 size_t argumentCount = 0; | |
| 194 switch (m_transformType) { | 182 switch (m_transformType) { |
| 195 case SVG_TRANSFORM_UNKNOWN: | 183 case SVG_TRANSFORM_UNKNOWN: |
| 196 return prefix; | 184 return emptyString(); |
| 197 case SVG_TRANSFORM_MATRIX: { | 185 case SVG_TRANSFORM_MATRIX: { |
| 198 StringBuilder builder; | 186 arguments[argumentCount++] = m_matrix.a(); |
| 199 builder.append(prefix + String::number(m_matrix.a()) + ' ' + String::num ber(m_matrix.b()) + ' ' + String::number(m_matrix.c()) + ' ' + | 187 arguments[argumentCount++] = m_matrix.b(); |
| 200 String::number(m_matrix.d()) + ' ' + String::number(m_mat rix.e()) + ' ' + String::number(m_matrix.f()) + ')'); | 188 arguments[argumentCount++] = m_matrix.c(); |
| 201 return builder.toString(); | 189 arguments[argumentCount++] = m_matrix.d(); |
| 190 arguments[argumentCount++] = m_matrix.e(); | |
| 191 arguments[argumentCount++] = m_matrix.f(); | |
| 192 break; | |
| 202 } | 193 } |
| 203 case SVG_TRANSFORM_TRANSLATE: | 194 case SVG_TRANSFORM_TRANSLATE: { |
| 204 return prefix + String::number(m_matrix.e()) + ' ' + String::number(m_ma trix.f()) + ')'; | 195 arguments[argumentCount++] = m_matrix.e(); |
| 205 case SVG_TRANSFORM_SCALE: | 196 arguments[argumentCount++] = m_matrix.f(); |
| 206 return prefix + String::number(m_matrix.a()) + ' ' + String::number(m_ma trix.d()) + ')'; | 197 break; |
| 198 } | |
| 199 case SVG_TRANSFORM_SCALE: { | |
| 200 arguments[argumentCount++] = m_matrix.a(); | |
| 201 arguments[argumentCount++] = m_matrix.d(); | |
| 202 break; | |
| 203 } | |
| 207 case SVG_TRANSFORM_ROTATE: { | 204 case SVG_TRANSFORM_ROTATE: { |
| 205 arguments[argumentCount++] = m_angle; | |
| 206 | |
| 208 double angleInRad = deg2rad(m_angle); | 207 double angleInRad = deg2rad(m_angle); |
| 209 double cosAngle = cos(angleInRad); | 208 double cosAngle = cos(angleInRad); |
| 210 double sinAngle = sin(angleInRad); | 209 double sinAngle = sin(angleInRad); |
| 211 float cx = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * (1 - c osAngle) - m_matrix.f() * sinAngle) / (1 - cosAngle) / 2 : 0); | 210 float cx = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * (1 - c osAngle) - m_matrix.f() * sinAngle) / (1 - cosAngle) / 2 : 0); |
| 212 float cy = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * sinAng le / (1 - cosAngle) + m_matrix.f()) / 2 : 0); | 211 float cy = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * sinAng le / (1 - cosAngle) + m_matrix.f()) / 2 : 0); |
| 213 if (cx || cy) | 212 if (cx || cy) { |
| 214 return prefix + String::number(m_angle) + ' ' + String::number(cx) + ' ' + String::number(cy) + ')'; | 213 arguments[argumentCount++] = cx; |
| 215 return prefix + String::number(m_angle) + ')'; | 214 arguments[argumentCount++] = cy; |
| 215 } | |
| 216 break; | |
| 216 } | 217 } |
| 217 case SVG_TRANSFORM_SKEWX: | 218 case SVG_TRANSFORM_SKEWX: |
| 218 return prefix + String::number(m_angle) + ')'; | 219 arguments[argumentCount++] = m_angle; |
| 220 break; | |
| 219 case SVG_TRANSFORM_SKEWY: | 221 case SVG_TRANSFORM_SKEWY: |
| 220 return prefix + String::number(m_angle) + ')'; | 222 arguments[argumentCount++] = m_angle; |
| 223 break; | |
| 221 } | 224 } |
| 225 ASSERT(argumentCount <= WTF_ARRAY_LENGTH(arguments)); | |
| 222 | 226 |
| 223 ASSERT_NOT_REACHED(); | 227 StringBuilder builder; |
| 224 return emptyString(); | 228 builder.append(transformTypePrefixForParsing(m_transformType)); |
| 229 | |
| 230 for (size_t i = 0; i < argumentCount; ++i) { | |
| 231 if (i) | |
| 232 builder.append(' '); | |
| 233 builder.appendNumber(arguments[i]); | |
| 234 } | |
| 235 builder.append(')'); | |
| 236 return builder.toString(); | |
| 225 } | 237 } |
| 226 | 238 |
| 227 void SVGTransform::add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) | 239 void SVGTransform::add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) |
| 228 { | 240 { |
| 229 // SVGTransform is not animated by itself. | 241 // SVGTransform is not animated by itself. |
| 230 ASSERT_NOT_REACHED(); | 242 ASSERT_NOT_REACHED(); |
| 231 } | 243 } |
| 232 | 244 |
| 233 void SVGTransform::calculateAnimatedValue(SVGAnimationElement*, float, unsigned, PassRefPtrWillBeRawPtr<SVGPropertyBase>, PassRefPtrWillBeRawPtr<SVGPropertyBase >, PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) | 245 void SVGTransform::calculateAnimatedValue(SVGAnimationElement*, float, unsigned, PassRefPtrWillBeRawPtr<SVGPropertyBase>, PassRefPtrWillBeRawPtr<SVGPropertyBase >, PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) |
| 234 { | 246 { |
| 235 // SVGTransform is not animated by itself. | 247 // SVGTransform is not animated by itself. |
| 236 ASSERT_NOT_REACHED(); | 248 ASSERT_NOT_REACHED(); |
| 237 } | 249 } |
| 238 | 250 |
| 239 float SVGTransform::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase>, S VGElement*) | 251 float SVGTransform::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase>, S VGElement*) |
| 240 { | 252 { |
| 241 // SVGTransform is not animated by itself. | 253 // SVGTransform is not animated by itself. |
| 242 ASSERT_NOT_REACHED(); | 254 ASSERT_NOT_REACHED(); |
| 243 | 255 |
| 244 return -1; | 256 return -1; |
| 245 } | 257 } |
| 246 | 258 |
| 247 } // namespace blink | 259 } // namespace blink |
| OLD | NEW |