virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const { FillLayer* currChild = (selector->style()->*m_accessLayers)(); FillLayer* prevChild = 0; if (value->isValueList()) { /* Walk each value and put it into a layer, creating new layers as needed. */ CSSValueList* valueList = static_cast<CSSValueList*>(value); for (unsigned int i = 0; i < valueList->length(); i++) { if (!currChild) { /* Need to make a new layer to hold this value */ currChild = new FillLayer(m_fillLayerType); prevChild->setNext(currChild); } (selector->*m_mapFill)(m_propertyId, currChild, valueList->itemWithoutBoundsCheck(i)); prevChild = currChild; currChild = currChild->next(); } } else { (selector->*m_mapFill)(m_propertyId, currChild, value); currChild = currChild->next(); } while (currChild) { /* Reset all remaining layers to not have the property set. */ (currChild->*m_clear)(); currChild = currChild->next(); } }
virtual void applyInheritValue(CSSStyleSelector* selector) const { FillLayer* currChild = (selector->style()->*m_accessLayers)(); FillLayer* prevChild = 0; const FillLayer* currParent = (selector->parentStyle()->*m_layers)(); while (currParent && (currParent->*m_test)()) { if (!currChild) { /* Need to make a new layer.*/ currChild = new FillLayer(m_fillLayerType); prevChild->setNext(currChild); } (currChild->*m_set)((currParent->*m_get)()); prevChild = currChild; currChild = prevChild->next(); currParent = currParent->next(); } while (currChild) { /* Reset any remaining layers to not have the property set. */ (currChild->*m_clear)(); currChild = currChild->next(); } }