void CSSToStyleMap::mapFillMaskSourceType(CSSPropertyID, FillLayer& layer, const CSSValue& value) { EMaskSourceType type = FillLayer::initialFillMaskSourceType(layer.type()); if (value.isInitialValue()) { layer.setMaskSourceType(type); return; } if (!is<CSSPrimitiveValue>(value)) return; switch (downcast<CSSPrimitiveValue>(value).getValueID()) { case CSSValueAlpha: type = EMaskSourceType::MaskAlpha; break; case CSSValueLuminance: type = EMaskSourceType::MaskLuminance; break; case CSSValueAuto: break; default: ASSERT_NOT_REACHED(); } layer.setMaskSourceType(type); }
void CSSToStyleMap::mapFillYPosition(CSSPropertyID propertyID, FillLayer& layer, const CSSValue& value) { if (value.isInitialValue()) { layer.setYPosition(FillLayer::initialFillYPosition(layer.type())); return; } if (!is<CSSPrimitiveValue>(value)) return; auto* primitiveValue = &downcast<CSSPrimitiveValue>(value); Pair* pair = primitiveValue->getPairValue(); if (pair) { ASSERT_UNUSED(propertyID, propertyID == CSSPropertyBackgroundPositionY || propertyID == CSSPropertyWebkitMaskPositionY); primitiveValue = pair->second(); } Length length; if (primitiveValue->isLength()) length = primitiveValue->computeLength<Length>(m_resolver->state().cssToLengthConversionData()); else if (primitiveValue->isPercentage()) length = Length(primitiveValue->getDoubleValue(), Percent); else if (primitiveValue->isCalculatedPercentageWithLength()) length = Length(primitiveValue->cssCalcValue()->createCalculationValue(m_resolver->state().cssToLengthConversionData())); else return; layer.setYPosition(length); if (pair) layer.setBackgroundYOrigin(*pair->first()); }
void CSSToStyleMap::mapFillSize(CSSPropertyID, FillLayer& layer, const CSSValue& value) { if (value.isInitialValue()) { layer.setSize(FillLayer::initialFillSize(layer.type())); return; } if (!is<CSSPrimitiveValue>(value)) return; auto& primitiveValue = downcast<CSSPrimitiveValue>(value); FillSize fillSize; switch (primitiveValue.getValueID()) { case CSSValueContain: fillSize.type = Contain; break; case CSSValueCover: fillSize.type = Cover; break; default: ASSERT(fillSize.type == SizeLength); if (!convertToLengthSize(primitiveValue, m_resolver->state().cssToLengthConversionData(), fillSize.size)) return; break; } layer.setSize(fillSize); }
void CSSToStyleMap::mapFillImage(CSSPropertyID property, FillLayer& layer, CSSValue& value) { if (value.isInitialValue()) { layer.setImage(FillLayer::initialFillImage(layer.type())); return; } layer.setImage(styleImage(property, value)); }
void CSSToStyleMap::mapFillClip(CSSPropertyID, FillLayer& layer, const CSSValue& value) { if (value.isInitialValue()) { layer.setClip(FillLayer::initialFillClip(layer.type())); return; } if (!is<CSSPrimitiveValue>(value)) return; layer.setClip(downcast<CSSPrimitiveValue>(value)); }
void CSSToStyleMap::mapFillRepeatY(CSSPropertyID propertyID, FillLayer& layer, const CSSValue& value) { if (value.treatAsInitialValue(propertyID)) { layer.setRepeatY(FillLayer::initialFillRepeatY(layer.type())); return; } if (!is<CSSPrimitiveValue>(value)) return; layer.setRepeatY(downcast<CSSPrimitiveValue>(value)); }
void CSSToStyleMap::mapFillAttachment(CSSPropertyID, FillLayer& layer, const CSSValue& value) { if (value.isInitialValue()) { layer.setAttachment(FillLayer::initialFillAttachment(layer.type())); return; } if (!is<CSSPrimitiveValue>(value)) return; switch (downcast<CSSPrimitiveValue>(value).getValueID()) { case CSSValueFixed: layer.setAttachment(FixedBackgroundAttachment); break; case CSSValueScroll: layer.setAttachment(ScrollBackgroundAttachment); break; case CSSValueLocal: layer.setAttachment(LocalBackgroundAttachment); break; default: return; } }