static inline bool convertToLengthSize(const CSSPrimitiveValue& primitiveValue, CSSToLengthConversionData conversionData, LengthSize& size) { if (auto* pair = primitiveValue.getPairValue()) { size.setWidth(pair->first()->convertToLength<AnyConversion>(conversionData)); size.setHeight(pair->second()->convertToLength<AnyConversion>(conversionData)); } else size.setWidth(primitiveValue.convertToLength<AnyConversion>(conversionData)); return !size.width().isUndefined() && !size.height().isUndefined(); }
void CSSToStyleMap::mapFillSize(CSSPropertyID, FillLayer* layer, CSSValue* value) { if (!value->isPrimitiveValue()) { layer->setSizeType(SizeNone); return; } CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value); if (primitiveValue->getValueID() == CSSValueContain) layer->setSizeType(Contain); else if (primitiveValue->getValueID() == CSSValueCover) layer->setSizeType(Cover); else layer->setSizeType(SizeLength); LengthSize b = FillLayer::initialFillSizeLength(layer->type()); if (value->isInitialValue() || primitiveValue->getValueID() == CSSValueContain || primitiveValue->getValueID() == CSSValueCover) { layer->setSizeLength(b); return; } float zoomFactor = style()->effectiveZoom(); Length firstLength; Length secondLength; if (Pair* pair = primitiveValue->getPairValue()) { CSSPrimitiveValue* first = static_cast<CSSPrimitiveValue*>(pair->first()); CSSPrimitiveValue* second = static_cast<CSSPrimitiveValue*>(pair->second()); firstLength = first->convertToLength<AnyConversion>(style(), rootElementStyle(), zoomFactor); secondLength = second->convertToLength<AnyConversion>(style(), rootElementStyle(), zoomFactor); } else { firstLength = primitiveValue->convertToLength<AnyConversion>(style(), rootElementStyle(), zoomFactor); secondLength = Length(); } if (firstLength.isUndefined() || secondLength.isUndefined()) return; b.setWidth(firstLength); b.setHeight(secondLength); layer->setSizeLength(b); }
void CSSToStyleMap::mapFillSize(CSSPropertyID, FillLayer* layer, CSSValue* value) { if (!is<CSSPrimitiveValue>(*value)) { layer->setSizeType(SizeNone); return; } CSSPrimitiveValue& primitiveValue = downcast<CSSPrimitiveValue>(*value); if (primitiveValue.getValueID() == CSSValueContain) layer->setSizeType(Contain); else if (primitiveValue.getValueID() == CSSValueCover) layer->setSizeType(Cover); else layer->setSizeType(SizeLength); LengthSize b = FillLayer::initialFillSizeLength(layer->type()); if (value->isInitialValue() || primitiveValue.getValueID() == CSSValueContain || primitiveValue.getValueID() == CSSValueCover) { layer->setSizeLength(b); return; } Length firstLength; Length secondLength; if (Pair* pair = primitiveValue.getPairValue()) { CSSPrimitiveValue* first = static_cast<CSSPrimitiveValue*>(pair->first()); CSSPrimitiveValue* second = static_cast<CSSPrimitiveValue*>(pair->second()); firstLength = first->convertToLength<AnyConversion>(m_resolver->state().cssToLengthConversionData()); secondLength = second->convertToLength<AnyConversion>(m_resolver->state().cssToLengthConversionData()); } else { firstLength = primitiveValue.convertToLength<AnyConversion>(m_resolver->state().cssToLengthConversionData()); secondLength = Length(); } if (firstLength.isUndefined() || secondLength.isUndefined()) return; b.setWidth(firstLength); b.setHeight(secondLength); layer->setSizeLength(b); }
void CSSToStyleMap::mapFillSize(StyleResolverState& state, FillLayer* layer, const CSSValue& value) { if (value.isInitialValue()) { layer->setSizeType(FillLayer::initialFillSizeType(layer->type())); layer->setSizeLength(FillLayer::initialFillSizeLength(layer->type())); return; } if (!value.isPrimitiveValue() && !value.isValuePair()) return; if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == CSSValueContain) layer->setSizeType(Contain); else if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == CSSValueCover) layer->setSizeType(Cover); else layer->setSizeType(SizeLength); LengthSize b = FillLayer::initialFillSizeLength(layer->type()); if (value.isPrimitiveValue() && (toCSSPrimitiveValue(value).getValueID() == CSSValueContain || toCSSPrimitiveValue(value).getValueID() == CSSValueCover)) { layer->setSizeLength(b); return; } Length firstLength; Length secondLength; if (value.isValuePair()) { const CSSValuePair& pair = toCSSValuePair(value); firstLength = StyleBuilderConverter::convertLengthOrAuto(state, pair.first()); secondLength = StyleBuilderConverter::convertLengthOrAuto(state, pair.second()); } else { ASSERT(value.isPrimitiveValue()); firstLength = StyleBuilderConverter::convertLengthOrAuto(state, value); secondLength = Length(); } b.setWidth(firstLength); b.setHeight(secondLength); layer->setSizeLength(b); }
void CSSToStyleMap::mapFillSize(StyleResolverState& state, FillLayer* layer, CSSValue* value) { if (value->isInitialValue()) { layer->setSizeType(FillLayer::initialFillSizeType(layer->type())); layer->setSizeLength(FillLayer::initialFillSizeLength(layer->type())); return; } if (!value->isPrimitiveValue()) return; CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); if (primitiveValue->getValueID() == CSSValueContain) layer->setSizeType(Contain); else if (primitiveValue->getValueID() == CSSValueCover) layer->setSizeType(Cover); else layer->setSizeType(SizeLength); LengthSize b = FillLayer::initialFillSizeLength(layer->type()); if (primitiveValue->getValueID() == CSSValueContain || primitiveValue->getValueID() == CSSValueCover) { layer->setSizeLength(b); return; } Length firstLength; Length secondLength; if (Pair* pair = primitiveValue->getPairValue()) { firstLength = pair->first()->convertToLength<AnyConversion>(state.cssToLengthConversionData()); secondLength = pair->second()->convertToLength<AnyConversion>(state.cssToLengthConversionData()); } else { firstLength = primitiveValue->convertToLength<AnyConversion>(state.cssToLengthConversionData()); secondLength = Length(); } b.setWidth(firstLength); b.setHeight(secondLength); layer->setSizeLength(b); }