| Index: Source/core/svg/SVGLengthContext.cpp
|
| diff --git a/Source/core/svg/SVGLengthContext.cpp b/Source/core/svg/SVGLengthContext.cpp
|
| index 3bf1f9a27ad61ef7e4abb842f82c4149cb6ceb4b..cf0bff5f1f99ef2d6d1d743f716e16f60f887710 100644
|
| --- a/Source/core/svg/SVGLengthContext.cpp
|
| +++ b/Source/core/svg/SVGLengthContext.cpp
|
| @@ -172,6 +172,9 @@ float SVGLengthContext::convertValueToUserUnits(float value, SVGLengthMode mode,
|
| case LengthTypeREMS:
|
| userUnits = convertValueFromREMSToUserUnits(value);
|
| break;
|
| + case LengthTypeCHS:
|
| + userUnits = convertValueFromCHSToUserUnits(value);
|
| + break;
|
| default:
|
| ASSERT_NOT_REACHED();
|
| break;
|
| @@ -204,6 +207,8 @@ float SVGLengthContext::convertValueFromUserUnits(float value, SVGLengthMode mod
|
| return convertValueFromUserUnitsToEXS(value);
|
| case LengthTypeREMS:
|
| return convertValueFromUserUnitsToREMS(value);
|
| + case LengthTypeCHS:
|
| + return convertValueFromUserUnitsToCHS(value);
|
| case LengthTypePX:
|
| return value;
|
| case LengthTypeCM:
|
| @@ -302,6 +307,28 @@ float SVGLengthContext::convertValueFromREMSToUserUnits(float value) const
|
| return value * style->specifiedFontSize();
|
| }
|
|
|
| +float SVGLengthContext::convertValueFromUserUnitsToCHS(float value) const
|
| +{
|
| + const ComputedStyle* style = computedStyleForLengthResolving(m_context);
|
| + if (!style)
|
| + return 0;
|
| +
|
| + float zeroWidth = style->fontMetrics().zeroWidth();
|
| + if (!zeroWidth)
|
| + return 0;
|
| +
|
| + return value / zeroWidth;
|
| +}
|
| +
|
| +float SVGLengthContext::convertValueFromCHSToUserUnits(float value) const
|
| +{
|
| + const ComputedStyle* style = computedStyleForLengthResolving(m_context);
|
| + if (!style)
|
| + return 0;
|
| +
|
| + return value * style->fontMetrics().zeroWidth();
|
| +}
|
| +
|
| float SVGLengthContext::convertValueFromUserUnitsToEXS(float value) const
|
| {
|
| const ComputedStyle* style = computedStyleForLengthResolving(m_context);
|
|
|