Index: Source/core/css/resolver/ViewportStyleResolver.cpp |
diff --git a/Source/core/css/resolver/ViewportStyleResolver.cpp b/Source/core/css/resolver/ViewportStyleResolver.cpp |
index 34239374452d71ee590cdda4ac0ae685e9848c03..250edd19cab1e0f5ed4baee47a93766eccb40976 100644 |
--- a/Source/core/css/resolver/ViewportStyleResolver.cpp |
+++ b/Source/core/css/resolver/ViewportStyleResolver.cpp |
@@ -92,15 +92,15 @@ void ViewportStyleResolver::resolve() |
ViewportArguments arguments(ViewportArguments::CSSDeviceAdaptation); |
- arguments.userZoom = getViewportArgumentValue(CSSPropertyUserZoom); |
- arguments.zoom = getViewportArgumentValue(CSSPropertyZoom); |
- arguments.minZoom = getViewportArgumentValue(CSSPropertyMinZoom); |
- arguments.maxZoom = getViewportArgumentValue(CSSPropertyMaxZoom); |
- arguments.minWidth = getViewportArgumentValue(CSSPropertyMinWidth); |
- arguments.maxWidth = getViewportArgumentValue(CSSPropertyMaxWidth); |
- arguments.minHeight = getViewportArgumentValue(CSSPropertyMinHeight); |
- arguments.maxHeight = getViewportArgumentValue(CSSPropertyMaxHeight); |
- arguments.orientation = getViewportArgumentValue(CSSPropertyOrientation); |
+ arguments.userZoom = viewportArgumentValue(CSSPropertyUserZoom); |
+ arguments.zoom = viewportArgumentValue(CSSPropertyZoom); |
+ arguments.minZoom = viewportArgumentValue(CSSPropertyMinZoom); |
+ arguments.maxZoom = viewportArgumentValue(CSSPropertyMaxZoom); |
+ arguments.minWidth = viewportLengthValue(CSSPropertyMinWidth); |
+ arguments.maxWidth = viewportLengthValue(CSSPropertyMaxWidth); |
+ arguments.minHeight = viewportLengthValue(CSSPropertyMinHeight); |
+ arguments.maxHeight = viewportLengthValue(CSSPropertyMaxHeight); |
+ arguments.orientation = viewportArgumentValue(CSSPropertyOrientation); |
m_document->setViewportArguments(arguments); |
m_document->updateViewportArguments(); |
@@ -108,7 +108,7 @@ void ViewportStyleResolver::resolve() |
m_propertySet = 0; |
} |
-float ViewportStyleResolver::getViewportArgumentValue(CSSPropertyID id) const |
+float ViewportStyleResolver::viewportArgumentValue(CSSPropertyID id) const |
{ |
float defaultValue = ViewportArguments::ValueAuto; |
@@ -133,12 +133,6 @@ float ViewportStyleResolver::getViewportArgumentValue(CSSPropertyID id) const |
if (primitiveValue->isPercentage()) { |
float percentValue = primitiveValue->getFloatValue() / 100.0f; |
switch (id) { |
- case CSSPropertyMaxHeight: |
- case CSSPropertyMinHeight: |
- return percentValue * m_document->initialViewportSize().height(); |
- case CSSPropertyMaxWidth: |
- case CSSPropertyMinWidth: |
- return percentValue * m_document->initialViewportSize().width(); |
case CSSPropertyMaxZoom: |
case CSSPropertyMinZoom: |
case CSSPropertyZoom: |
@@ -167,4 +161,38 @@ float ViewportStyleResolver::getViewportArgumentValue(CSSPropertyID id) const |
} |
} |
+Length ViewportStyleResolver::viewportLengthValue(CSSPropertyID id) const |
+{ |
+ ASSERT(id == CSSPropertyMaxHeight |
+ || id == CSSPropertyMinHeight |
+ || id == CSSPropertyMaxWidth |
+ || id == CSSPropertyMinWidth); |
+ |
+ RefPtr<CSSValue> value = m_propertySet->getPropertyCSSValue(id); |
+ if (!value || !value->isPrimitiveValue()) |
+ return Length(); // auto |
+ |
+ CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value.get()); |
+ |
+ if (primitiveValue->isLength()) |
+ return primitiveValue->computeLength<Length>(m_document->renderStyle(), m_document->renderStyle()); |
+ |
+ if (primitiveValue->isViewportPercentageLength()) |
+ return primitiveValue->viewportPercentageLength(); |
+ |
+ if (primitiveValue->isPercentage()) |
+ return Length(primitiveValue->getFloatValue(), Percent); |
+ |
+ switch (primitiveValue->getValueID()) { |
+ case CSSValueInternalExtendToZoom: |
+ return Length(ExtendToZoom); |
+ case CSSValueAuto: |
+ return Length(); |
+ default: |
+ // Unrecognized keyword. |
+ ASSERT_NOT_REACHED(); |
+ return Length(0, Fixed); |
+ } |
+} |
+ |
} // namespace WebCore |