summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/WebCore/css/CSSPrimitiveValue.cpp2
-rw-r--r--Source/WebCore/css/CSSPrimitiveValue.h2
-rw-r--r--Source/WebCore/css/DeprecatedStyleBuilder.cpp16
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;