diff options
-rw-r--r-- | Source/WebCore/css/CSSPrimitiveValue.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/css/CSSPrimitiveValue.h | 2 | ||||
-rw-r--r-- | Source/WebCore/css/DeprecatedStyleBuilder.cpp | 16 |
3 files changed, 16 insertions, 4 deletions
diff --git a/Source/WebCore/css/CSSPrimitiveValue.cpp b/Source/WebCore/css/CSSPrimitiveValue.cpp index 3ee8cdf53..d0c852465 100644 --- a/Source/WebCore/css/CSSPrimitiveValue.cpp +++ b/Source/WebCore/css/CSSPrimitiveValue.cpp @@ -602,6 +602,8 @@ double CSSPrimitiveValue::computeLengthDouble(const RenderStyle* style, const Re return -1.0; case CSS_VH: case CSS_VW: + case CSS_VMAX: + case CSS_VMIN: factor = 1.0; break; default: diff --git a/Source/WebCore/css/CSSPrimitiveValue.h b/Source/WebCore/css/CSSPrimitiveValue.h index 88acf041c..6bf437ac5 100644 --- a/Source/WebCore/css/CSSPrimitiveValue.h +++ b/Source/WebCore/css/CSSPrimitiveValue.h @@ -204,6 +204,8 @@ public: bool isViewportPercentageLength() const { return m_primitiveUnitType >= CSS_VW && m_primitiveUnitType <= CSS_VMAX; } bool isViewportPercentageWidth() const { return m_primitiveUnitType == CSS_VW; } bool isViewportPercentageHeight() const { return m_primitiveUnitType == CSS_VH; } + bool isViewportPercentageMax() const { return m_primitiveUnitType == CSS_VMAX; } + bool isViewportPercentageMin() const { return m_primitiveUnitType == CSS_VMIN; } bool isValueID() const { return m_primitiveUnitType == CSS_VALUE_ID; } static PassRefPtr<CSSPrimitiveValue> createIdentifier(CSSValueID valueID) { return adoptRef(new CSSPrimitiveValue(valueID)); } diff --git a/Source/WebCore/css/DeprecatedStyleBuilder.cpp b/Source/WebCore/css/DeprecatedStyleBuilder.cpp index 7c6105285..1d52de322 100644 --- a/Source/WebCore/css/DeprecatedStyleBuilder.cpp +++ b/Source/WebCore/css/DeprecatedStyleBuilder.cpp @@ -613,10 +613,18 @@ public: if (originalLength >= 1.0) length = 1.0; } - if (primitiveValue->isViewportPercentageHeight()) - length = styleResolver->document()->renderView()->viewportSize().height() * length / 100.0f; - else if (primitiveValue->isViewportPercentageWidth()) - length = styleResolver->document()->renderView()->viewportSize().width() * length / 100.0f; + if (primitiveValue->isViewportPercentageLength()) { + int viewPortHeight = styleResolver->document()->renderView()->viewportSize().height() * length / 100.0f; + int viewPortWidth = styleResolver->document()->renderView()->viewportSize().width() * length / 100.0f; + if (primitiveValue->isViewportPercentageHeight()) + length = viewPortHeight; + else if (primitiveValue->isViewportPercentageWidth()) + length = viewPortWidth; + else if (primitiveValue->isViewportPercentageMax()) + length = max(viewPortWidth, viewPortHeight); + else if (primitiveValue->isViewportPercentageMin()) + length = min(viewPortWidth, viewPortHeight); + } } else { ASSERT_NOT_REACHED(); length = 0; |