OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> |
3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2007 Apple Inc. All rights reserved. | 4 * Copyright (C) 2007 Apple Inc. All rights reserved. |
5 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 5 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 FloatPoint SVGLengthContext::resolvePoint(const SVGElement* context, | 184 FloatPoint SVGLengthContext::resolvePoint(const SVGElement* context, |
185 SVGUnitTypes::SVGUnitType type, | 185 SVGUnitTypes::SVGUnitType type, |
186 const SVGLength& x, | 186 const SVGLength& x, |
187 const SVGLength& y) { | 187 const SVGLength& y) { |
188 DCHECK_NE(SVGUnitTypes::kSvgUnitTypeUnknown, type); | 188 DCHECK_NE(SVGUnitTypes::kSvgUnitTypeUnknown, type); |
189 if (type == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) { | 189 if (type == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) { |
190 SVGLengthContext lengthContext(context); | 190 SVGLengthContext lengthContext(context); |
191 return FloatPoint(x.value(lengthContext), y.value(lengthContext)); | 191 return FloatPoint(x.value(lengthContext), y.value(lengthContext)); |
192 } | 192 } |
193 | 193 |
194 // FIXME: valueAsPercentage() won't be correct for eg. cm units. They need to
be resolved in user space and then be considered in objectBoundingBox space. | 194 // FIXME: valueAsPercentage() won't be correct for eg. cm units. They need to |
| 195 // be resolved in user space and then be considered in objectBoundingBox |
| 196 // space. |
195 return FloatPoint(x.valueAsPercentage(), y.valueAsPercentage()); | 197 return FloatPoint(x.valueAsPercentage(), y.valueAsPercentage()); |
196 } | 198 } |
197 | 199 |
198 float SVGLengthContext::resolveLength(const SVGElement* context, | 200 float SVGLengthContext::resolveLength(const SVGElement* context, |
199 SVGUnitTypes::SVGUnitType type, | 201 SVGUnitTypes::SVGUnitType type, |
200 const SVGLength& x) { | 202 const SVGLength& x) { |
201 DCHECK_NE(SVGUnitTypes::kSvgUnitTypeUnknown, type); | 203 DCHECK_NE(SVGUnitTypes::kSvgUnitTypeUnknown, type); |
202 if (type == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) { | 204 if (type == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) { |
203 SVGLengthContext lengthContext(context); | 205 SVGLengthContext lengthContext(context); |
204 return x.value(lengthContext); | 206 return x.value(lengthContext); |
205 } | 207 } |
206 | 208 |
207 // FIXME: valueAsPercentage() won't be correct for eg. cm units. They need to
be resolved in user space and then be considered in objectBoundingBox space. | 209 // FIXME: valueAsPercentage() won't be correct for eg. cm units. They need to |
| 210 // be resolved in user space and then be considered in objectBoundingBox |
| 211 // space. |
208 return x.valueAsPercentage(); | 212 return x.valueAsPercentage(); |
209 } | 213 } |
210 | 214 |
211 float SVGLengthContext::valueForLength(const UnzoomedLength& unzoomedLength, | 215 float SVGLengthContext::valueForLength(const UnzoomedLength& unzoomedLength, |
212 SVGLengthMode mode) const { | 216 SVGLengthMode mode) const { |
213 return valueForLength(unzoomedLength.length(), 1, mode); | 217 return valueForLength(unzoomedLength.length(), 1, mode); |
214 } | 218 } |
215 | 219 |
216 float SVGLengthContext::valueForLength(const Length& length, | 220 float SVGLengthContext::valueForLength(const Length& length, |
217 const ComputedStyle& style, | 221 const ComputedStyle& style, |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 return 0; | 390 return 0; |
387 | 391 |
388 return value * style->getFontMetrics().zeroWidth() / style->effectiveZoom(); | 392 return value * style->getFontMetrics().zeroWidth() / style->effectiveZoom(); |
389 } | 393 } |
390 | 394 |
391 float SVGLengthContext::convertValueFromUserUnitsToEXS(float value) const { | 395 float SVGLengthContext::convertValueFromUserUnitsToEXS(float value) const { |
392 const ComputedStyle* style = computedStyleForLengthResolving(m_context); | 396 const ComputedStyle* style = computedStyleForLengthResolving(m_context); |
393 if (!style) | 397 if (!style) |
394 return 0; | 398 return 0; |
395 | 399 |
396 // Use of ceil allows a pixel match to the W3Cs expected output of coords-unit
s-03-b.svg | 400 // Use of ceil allows a pixel match to the W3Cs expected output of |
397 // if this causes problems in real world cases maybe it would be best to remov
e this | 401 // coords-units-03-b.svg, if this causes problems in real world cases maybe it |
| 402 // would be best to remove this. |
398 float xHeight = | 403 float xHeight = |
399 ceilf(style->getFontMetrics().xHeight() / style->effectiveZoom()); | 404 ceilf(style->getFontMetrics().xHeight() / style->effectiveZoom()); |
400 if (!xHeight) | 405 if (!xHeight) |
401 return 0; | 406 return 0; |
402 | 407 |
403 return value / xHeight; | 408 return value / xHeight; |
404 } | 409 } |
405 | 410 |
406 float SVGLengthContext::convertValueFromEXSToUserUnits(float value) const { | 411 float SVGLengthContext::convertValueFromEXSToUserUnits(float value) const { |
407 const ComputedStyle* style = computedStyleForLengthResolving(m_context); | 412 const ComputedStyle* style = computedStyleForLengthResolving(m_context); |
408 if (!style) | 413 if (!style) |
409 return 0; | 414 return 0; |
410 | 415 |
411 // Use of ceil allows a pixel match to the W3Cs expected output of coords-unit
s-03-b.svg | 416 // Use of ceil allows a pixel match to the W3Cs expected output of |
412 // if this causes problems in real world cases maybe it would be best to remov
e this | 417 // coords-units-03-b.svg, if this causes problems in real world cases maybe it |
| 418 // would be best to remove this. |
413 return value * | 419 return value * |
414 ceilf(style->getFontMetrics().xHeight() / style->effectiveZoom()); | 420 ceilf(style->getFontMetrics().xHeight() / style->effectiveZoom()); |
415 } | 421 } |
416 | 422 |
417 bool SVGLengthContext::determineViewport(FloatSize& viewportSize) const { | 423 bool SVGLengthContext::determineViewport(FloatSize& viewportSize) const { |
418 if (!m_context) | 424 if (!m_context) |
419 return false; | 425 return false; |
420 | 426 |
421 // Root <svg> element lengths are resolved against the top level viewport. | 427 // Root <svg> element lengths are resolved against the top level viewport. |
422 if (m_context->isOutermostSVGSVGElement()) { | 428 if (m_context->isOutermostSVGSVGElement()) { |
(...skipping 23 matching lines...) Expand all Loading... |
446 const ComputedStyle* rootStyle = rootElementStyle(m_context); | 452 const ComputedStyle* rootStyle = rootElementStyle(m_context); |
447 if (!rootStyle) | 453 if (!rootStyle) |
448 return 0; | 454 return 0; |
449 | 455 |
450 CSSToLengthConversionData conversionData = CSSToLengthConversionData( | 456 CSSToLengthConversionData conversionData = CSSToLengthConversionData( |
451 style, rootStyle, m_context->document().layoutViewItem(), 1.0f); | 457 style, rootStyle, m_context->document().layoutViewItem(), 1.0f); |
452 Length length = primitiveValue.convertToLength(conversionData); | 458 Length length = primitiveValue.convertToLength(conversionData); |
453 return valueForLength(length, 1.0f, mode); | 459 return valueForLength(length, 1.0f, mode); |
454 } | 460 } |
455 } // namespace blink | 461 } // namespace blink |
OLD | NEW |