void MutableStylePropertySet::setProperty(CSSPropertyID propertyID, PassRefPtrWillBeRawPtr<CSSValue> prpValue, bool important) { StylePropertyShorthand shorthand = shorthandForProperty(propertyID); if (!shorthand.length()) { setProperty(CSSProperty(propertyID, prpValue, important)); return; } removePropertiesInSet(shorthand.properties(), shorthand.length()); RefPtrWillBeRawPtr<CSSValue> value = prpValue; for (unsigned i = 0; i < shorthand.length(); ++i) m_propertyVector.append(CSSProperty(shorthand.properties()[i], value, important)); }
void CSSMutableStyleDeclaration::setImageProperty(int propertyId, const String& url, bool important) { ASSERT(!m_iteratorCount); setPropertyInternal(CSSProperty(propertyId, CSSImageValue::create(url), important)); setNeedsStyleRecalc(); }
void CSSMutableStyleDeclaration::setStringProperty(int propertyId, const String &value, CSSPrimitiveValue::UnitTypes type, bool important) { ASSERT(!m_iteratorCount); setPropertyInternal(CSSProperty(propertyId, CSSPrimitiveValue::create(value, type), important)); setNeedsStyleRecalc(); }
void HTMLBodyElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { if (name == backgroundAttr) { String url = stripLeadingAndTrailingHTMLSpaces(value); if (!url.isEmpty()) { RefPtrWillBeRawPtr<CSSImageValue> imageValue = CSSImageValue::create(url, document().completeURL(url)); imageValue->setInitiator(localName()); imageValue->setReferrer(Referrer(document().outgoingReferrer(), document().referrerPolicy())); style->setProperty(CSSProperty(CSSPropertyBackgroundImage, imageValue.release())); } } else if (name == marginwidthAttr || name == leftmarginAttr) { addHTMLLengthToStyle(style, CSSPropertyMarginRight, value); addHTMLLengthToStyle(style, CSSPropertyMarginLeft, value); } else if (name == marginheightAttr || name == topmarginAttr) { addHTMLLengthToStyle(style, CSSPropertyMarginBottom, value); addHTMLLengthToStyle(style, CSSPropertyMarginTop, value); } else if (name == bgcolorAttr) { addHTMLColorToStyle(style, CSSPropertyBackgroundColor, value); } else if (name == textAttr) { addHTMLColorToStyle(style, CSSPropertyColor, value); } else if (name == bgpropertiesAttr) { if (equalIgnoringCase(value, "fixed")) { UseCounter::count(document(), UseCounter::BgPropertiesFixed); addPropertyToPresentationAttributeStyle(style, CSSPropertyBackgroundAttachment, CSSValueFixed); } } else HTMLElement::collectStyleForPresentationAttribute(name, value, style); }
bool CSSMutableStyleDeclaration::setProperty(int propertyID, int value, bool important, bool notifyChanged) { removeProperty(propertyID); m_values.append(CSSProperty(propertyID, CSSPrimitiveValue::createIdentifier(value), important)); if (notifyChanged) setChanged(); return true; }
CSSParser::ParseResult CSSParser::parseValue(MutableStyleProperties& declaration, CSSPropertyID propertyID, const String& string, bool important, const CSSParserContext& context) { ASSERT(!string.isEmpty()); RefPtr<CSSValue> value = CSSParserFastPaths::maybeParseValue(propertyID, string, context.mode); if (value) return declaration.addParsedProperty(CSSProperty(propertyID, WTFMove(value), important)) ? CSSParser::ParseResult::Changed : CSSParser::ParseResult::Unchanged; CSSParser parser(context); return parser.parseValue(declaration, propertyID, string, important); }
PassRefPtrWillBeRawPtr<MutableStylePropertySet> StylePropertySet::copyPropertiesInSet(const Vector<CSSPropertyID>& properties) const { WillBeHeapVector<CSSProperty, 256> list; list.reserveInitialCapacity(properties.size()); for (unsigned i = 0; i < properties.size(); ++i) { RefPtrWillBeRawPtr<CSSValue> value = getPropertyCSSValue(properties[i]); if (value) list.append(CSSProperty(properties[i], value.release(), false)); } return MutableStylePropertySet::create(list.data(), list.size()); }
void CSSMutableStyleDeclaration::removePropertiesInSet(const int* set, unsigned length, bool notifyChanged) { bool changed = false; for (unsigned i = 0; i < length; i++) { RefPtr<CSSValue> value = getPropertyCSSValue(set[i]); if (value) { m_values.remove(CSSProperty(set[i], value.release(), false)); changed = true; } } if (changed && notifyChanged) setChanged(); }
PassRefPtr<CSSMutableStyleDeclaration> CSSStyleDeclaration::copyPropertiesInSet(const int* set, unsigned length) const { DeprecatedValueList<CSSProperty> list; unsigned variableDependentValueCount = 0; for (unsigned i = 0; i < length; i++) { RefPtr<CSSValue> value = getPropertyCSSValue(set[i]); if (value) { if (value->isVariableDependentValue()) variableDependentValueCount++; list.append(CSSProperty(set[i], value.release(), false)); } } return CSSMutableStyleDeclaration::create(list, variableDependentValueCount); }
bool CSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropertyID unresolvedProperty, const String& string, bool important, CSSParserMode parserMode, StyleSheetContents* styleSheet) { if (string.isEmpty()) return false; CSSPropertyID resolvedProperty = resolveCSSPropertyID(unresolvedProperty); RefPtrWillBeRawPtr<CSSValue> value = CSSParserFastPaths::maybeParseValue(resolvedProperty, string, parserMode); if (value) return declaration->setProperty(CSSProperty(resolvedProperty, value.release(), important)); CSSParserContext context(parserMode, 0); if (styleSheet) { context = styleSheet->parserContext(); context.setMode(parserMode); } return parseValue(declaration, unresolvedProperty, string, important, context); }
void SVGFontFaceElement::rebuildFontFace() { if (!inDocument()) { ASSERT(!m_fontElement); return; } bool describesParentFont = isSVGFontElement(*parentNode()); RefPtrWillBeRawPtr<CSSValueList> list = nullptr; if (describesParentFont) { m_fontElement = toSVGFontElement(parentNode()); list = CSSValueList::createCommaSeparated(); list->append(CSSFontFaceSrcValue::createLocal(fontFamily())); } else { m_fontElement = nullptr; // we currently ignore all but the last src element, alternatively we could concat them if (SVGFontFaceSrcElement* element = Traversal<SVGFontFaceSrcElement>::lastChild(*this)) list = element->srcValue(); } if (!list || !list->length()) return; // Parse in-memory CSS rules m_fontFaceRule->mutableProperties().addParsedProperty(CSSProperty(CSSPropertySrc, list)); if (describesParentFont) { // Traverse parsed CSS values and associate CSSFontFaceSrcValue elements with ourselves. RefPtrWillBeRawPtr<CSSValue> src = m_fontFaceRule->properties().getPropertyCSSValue(CSSPropertySrc); CSSValueList* srcList = toCSSValueList(src.get()); unsigned srcLength = srcList ? srcList->length() : 0; for (unsigned i = 0; i < srcLength; i++) { if (CSSFontFaceSrcValue* item = toCSSFontFaceSrcValue(srcList->item(i))) item->setSVGFontFaceElement(this); } } document().styleResolverChanged(); }
bool MutableStylePropertySet::setProperty(CSSPropertyID propertyID, CSSValueID identifier, bool important) { setProperty(CSSProperty(propertyID, cssValuePool().createIdentifierValue(identifier), important)); return true; }
void CSSParserImpl::consumeVariableDeclarationValue(CSSParserTokenRange range, const AtomicString& variableName, bool important) { if (RefPtrWillBeRawPtr<CSSCustomPropertyDeclaration> value = CSSVariableParser::parseDeclarationValue(variableName, range)) m_parsedProperties.append(CSSProperty(CSSPropertyVariable, value.release(), important)); }
void CSSMutableStyleDeclaration::setImageProperty(int propertyId, const String& url, bool important) { removeProperty(propertyId); m_values.append(CSSProperty(propertyId, CSSImageValue::create(url), important)); setChanged(); }
void CSSMutableStyleDeclaration::setStringProperty(int propertyId, const String &value, CSSPrimitiveValue::UnitTypes type, bool important) { removeProperty(propertyId); m_values.append(CSSProperty(propertyId, CSSPrimitiveValue::create(value, type), important)); setChanged(); }
void HTMLTableElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { if (name == widthAttr) addHTMLLengthToStyle(style, CSSPropertyWidth, value); else if (name == heightAttr) addHTMLLengthToStyle(style, CSSPropertyHeight, value); else if (name == borderAttr) addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderWidth, parseBorderWidthAttribute(value), CSSPrimitiveValue::CSS_PX); else if (name == bordercolorAttr) { if (!value.isEmpty()) addHTMLColorToStyle(style, CSSPropertyBorderColor, value); } else if (name == bgcolorAttr) addHTMLColorToStyle(style, CSSPropertyBackgroundColor, value); else if (name == backgroundAttr) { String url = stripLeadingAndTrailingHTMLSpaces(value); if (!url.isEmpty()) { RefPtrWillBeRawPtr<CSSImageValue> imageValue = CSSImageValue::create(url, document().completeURL(url)); imageValue->setReferrer(Referrer(document().outgoingReferrer(), document().referrerPolicy())); style->setProperty(CSSProperty(CSSPropertyBackgroundImage, imageValue.release())); } } else if (name == valignAttr) { if (!value.isEmpty()) addPropertyToPresentationAttributeStyle(style, CSSPropertyVerticalAlign, value); } else if (name == cellspacingAttr) { if (!value.isEmpty()) addHTMLLengthToStyle(style, CSSPropertyBorderSpacing, value); } else if (name == vspaceAttr) { UseCounter::countDeprecation(document(), UseCounter::HTMLTableElementVspace); addHTMLLengthToStyle(style, CSSPropertyMarginTop, value); addHTMLLengthToStyle(style, CSSPropertyMarginBottom, value); } else if (name == hspaceAttr) { UseCounter::countDeprecation(document(), UseCounter::HTMLTableElementHspace); addHTMLLengthToStyle(style, CSSPropertyMarginLeft, value); addHTMLLengthToStyle(style, CSSPropertyMarginRight, value); } else if (name == alignAttr) { if (!value.isEmpty()) { if (equalIgnoringCase(value, "center")) { addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitMarginStart, CSSValueAuto); addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitMarginEnd, CSSValueAuto); } else addPropertyToPresentationAttributeStyle(style, CSSPropertyFloat, value); } } else if (name == rulesAttr) { // The presence of a valid rules attribute causes border collapsing to be enabled. if (m_rulesAttr != UnsetRules) addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderCollapse, CSSValueCollapse); } else if (name == frameAttr) { bool borderTop; bool borderRight; bool borderBottom; bool borderLeft; if (getBordersFromFrameAttributeValue(value, borderTop, borderRight, borderBottom, borderLeft)) { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderWidth, CSSValueThin); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderTopStyle, borderTop ? CSSValueSolid : CSSValueHidden); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderBottomStyle, borderBottom ? CSSValueSolid : CSSValueHidden); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderLeftStyle, borderLeft ? CSSValueSolid : CSSValueHidden); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderRightStyle, borderRight ? CSSValueSolid : CSSValueHidden); } } else HTMLElement::collectStyleForPresentationAttribute(name, value, style); }