float ViewportStyleResolver::getViewportArgumentValue(CSSPropertyID id) const { float defaultValue = ViewportArguments::ValueAuto; // UserZoom default value is CSSValueZoom, which maps to true, meaning that // yes, it is user scalable. When the value is set to CSSValueFixed, we // return false. if (id == CSSPropertyUserZoom) defaultValue = 1; RefPtr<CSSValue> value = m_propertySet->getPropertyCSSValue(id); if (!value || !value->isPrimitiveValue()) return defaultValue; CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value.get()); if (primitiveValue->isNumber() || primitiveValue->isPx()) return primitiveValue->getFloatValue(); if (primitiveValue->isFontRelativeLength()) return primitiveValue->getFloatValue() * m_document->documentElement()->renderStyle()->fontDescription().computedSize(); if (primitiveValue->isPercentage()) { float percentValue = primitiveValue->getFloatValue() / 100.0f; switch (id) { case CSSPropertyMaxHeight: case CSSPropertyMinHeight: ASSERT(m_document->initialViewportSize().height() > 0); return percentValue * m_document->initialViewportSize().height(); case CSSPropertyMaxWidth: case CSSPropertyMinWidth: ASSERT(m_document->initialViewportSize().width() > 0); return percentValue * m_document->initialViewportSize().width(); case CSSPropertyMaxZoom: case CSSPropertyMinZoom: case CSSPropertyZoom: return percentValue; default: ASSERT_NOT_REACHED(); break; } } switch (primitiveValue->getValueID()) { case CSSValueAuto: return defaultValue; case CSSValueLandscape: return ViewportArguments::ValueLandscape; case CSSValuePortrait: return ViewportArguments::ValuePortrait; case CSSValueZoom: return defaultValue; case CSSValueFixed: return 0; default: return defaultValue; } }
float ViewportStyleResolver::viewportArgumentValue(CSSPropertyID id) const { float defaultValue = ViewportDescription::ValueAuto; // UserZoom default value is CSSValueZoom, which maps to true, meaning that // yes, it is user scalable. When the value is set to CSSValueFixed, we // return false. if (id == CSSPropertyUserZoom) defaultValue = 1; CSSValue* value = m_propertySet->getPropertyCSSValue(id); if (!value || !value->isPrimitiveValue()) return defaultValue; CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); if (primitiveValue->isNumber() || primitiveValue->isPx()) return primitiveValue->getFloatValue(); if (primitiveValue->isFontRelativeLength()) return primitiveValue->getFloatValue() * m_document->computedStyle()->getFontDescription().computedSize(); if (primitiveValue->isPercentage()) { float percentValue = primitiveValue->getFloatValue() / 100.0f; switch (id) { case CSSPropertyMaxZoom: case CSSPropertyMinZoom: case CSSPropertyZoom: return percentValue; default: ASSERT_NOT_REACHED(); break; } } switch (primitiveValue->getValueID()) { case CSSValueAuto: return defaultValue; case CSSValueLandscape: return ViewportDescription::ValueLandscape; case CSSValuePortrait: return ViewportDescription::ValuePortrait; case CSSValueZoom: return defaultValue; case CSSValueInternalExtendToZoom: return ViewportDescription::ValueExtendToZoom; case CSSValueFixed: return 0; default: return defaultValue; } }