void StyleBuilder::applyProperty(CSSPropertyID id, StyleResolverState& state, CSSValue* value) { ASSERT_WITH_MESSAGE(!isShorthandProperty(id), "Shorthand property id = %d wasn't expanded at parsing time", id); bool isInherit = state.parentNode() && value->isInheritedValue(); bool isInitial = value->isInitialValue() || (!state.parentNode() && value->isInheritedValue()); ASSERT(!isInherit || !isInitial); // isInherit -> !isInitial && isInitial -> !isInherit ASSERT(!isInherit || (state.parentNode() && state.parentStyle())); // isInherit -> (state.parentNode() && state.parentStyle()) if (!state.applyPropertyToRegularStyle() && (!state.applyPropertyToVisitedLinkStyle() || !isValidVisitedLinkProperty(id))) { // Limit the properties that can be applied to only the ones honored by :visited. return; } if (isInherit && !state.parentStyle()->hasExplicitlyInheritedProperties() && !CSSPropertyMetadata::isInheritedProperty(id)) { state.parentStyle()->setHasExplicitlyInheritedProperties(); } else if (value->isUnsetValue()) { ASSERT(!isInherit && !isInitial); if (CSSPropertyMetadata::isInheritedProperty(id)) isInherit = true; else isInitial = true; } StyleBuilder::applyProperty(id, state, value, isInitial, isInherit); }
void StyleBuilderFunctions::applyInheritCSSPropertyColor(StyleResolverState& state) { Color color = state.parentStyle()->color(); if (state.applyPropertyToRegularStyle()) state.style()->setColor(color); if (state.applyPropertyToVisitedLinkStyle()) state.style()->setVisitedLinkColor(color); }
void StyleBuilderFunctions::applyInitialCSSPropertyColor(StyleResolverState& state) { Color color = ComputedStyle::initialColor(); if (state.applyPropertyToRegularStyle()) state.style()->setColor(color); if (state.applyPropertyToVisitedLinkStyle()) state.style()->setVisitedLinkColor(color); }
void StyleBuilderFunctions::applyValueCSSPropertyColor(StyleResolverState& state, CSSValue* value) { CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); // As per the spec, 'color: currentColor' is treated as 'color: inherit' if (primitiveValue->getValueID() == CSSValueCurrentcolor) { applyInheritCSSPropertyColor(state); return; } if (state.applyPropertyToRegularStyle()) state.style()->setColor(StyleBuilderConverter::convertColor(state, value)); if (state.applyPropertyToVisitedLinkStyle()) state.style()->setVisitedLinkColor(StyleBuilderConverter::convertColor(state, value, true)); }