| Index: Source/core/svg/SVGLengthContext.cpp
|
| diff --git a/Source/core/svg/SVGLengthContext.cpp b/Source/core/svg/SVGLengthContext.cpp
|
| index 40c86bb6f21d2f797a8a86e063768fa856c38f13..39c41c2712dc87b656e83ce815a1e45c58db7ded 100644
|
| --- a/Source/core/svg/SVGLengthContext.cpp
|
| +++ b/Source/core/svg/SVGLengthContext.cpp
|
| @@ -32,10 +32,25 @@
|
| #include "core/rendering/svg/RenderSVGRoot.h"
|
| #include "core/rendering/svg/RenderSVGViewportContainer.h"
|
| #include "core/svg/SVGSVGElement.h"
|
| +#include "platform/LengthFunctions.h"
|
| #include "platform/fonts/FontMetrics.h"
|
|
|
| namespace blink {
|
|
|
| +static inline float dimensionForLengthMode(SVGLengthMode mode, const FloatSize& viewportSize)
|
| +{
|
| + switch (mode) {
|
| + case LengthModeWidth:
|
| + return viewportSize.width();
|
| + case LengthModeHeight:
|
| + return viewportSize.height();
|
| + case LengthModeOther:
|
| + return sqrtf(viewportSize.diagonalLengthSquared() / 2);
|
| + }
|
| + ASSERT_NOT_REACHED();
|
| + return 0;
|
| +}
|
| +
|
| SVGLengthContext::SVGLengthContext(const SVGElement* context)
|
| : m_context(context)
|
| {
|
| @@ -91,6 +106,20 @@ float SVGLengthContext::resolveLength(const SVGElement* context, SVGUnitTypes::S
|
| return x->valueAsPercentage();
|
| }
|
|
|
| +float SVGLengthContext::valueForLength(const Length& length, SVGLengthMode mode)
|
| +{
|
| + if (length.isAuto())
|
| + return 0;
|
| +
|
| + FloatSize viewportSize;
|
| + determineViewport(viewportSize);
|
| +
|
| + if (length.isPercent())
|
| + return convertValueFromPercentageToUserUnits(length.value(), mode, viewportSize) / 100;
|
| +
|
| + return floatValueForLength(length, dimensionForLengthMode(mode, viewportSize));
|
| +}
|
| +
|
| float SVGLengthContext::convertValueToUserUnits(float value, SVGLengthMode mode, SVGLengthType fromUnit, ExceptionState& exceptionState) const
|
| {
|
| switch (fromUnit) {
|
| @@ -155,20 +184,6 @@ float SVGLengthContext::convertValueFromUserUnits(float value, SVGLengthMode mod
|
| return 0;
|
| }
|
|
|
| -static inline float dimensionForLengthMode(SVGLengthMode mode, const FloatSize& viewportSize)
|
| -{
|
| - switch (mode) {
|
| - case LengthModeWidth:
|
| - return viewportSize.width();
|
| - case LengthModeHeight:
|
| - return viewportSize.height();
|
| - case LengthModeOther:
|
| - return sqrtf(viewportSize.diagonalLengthSquared() / 2);
|
| - }
|
| - ASSERT_NOT_REACHED();
|
| - return 0;
|
| -}
|
| -
|
| float SVGLengthContext::convertValueFromUserUnitsToPercentage(float value, SVGLengthMode mode, ExceptionState& exceptionState) const
|
| {
|
| FloatSize viewportSize;
|
|
|