// Sets a list of properties as dirty. void ElementStyle::DirtyProperties(const PropertyNameList& properties) { if (properties.empty()) return; PropertyNameList inherited_properties; for (PropertyNameList::const_iterator i = properties.begin(); i != properties.end(); ++i) { // If this property is an inherited property, then push it into the list to be passed onto our children. const PropertyDefinition* property = StyleSheetSpecification::GetProperty(*i); if (property != NULL && property->IsInherited()) inherited_properties.insert(*i); } // Pass the list of those properties that are inherited onto our children. if (!inherited_properties.empty()) { for (int i = 0; i < element->GetNumChildren(true); i++) element->GetChild(i)->GetStyle()->DirtyInheritedProperties(inherited_properties); } // And send the event. element->OnPropertyChange(properties); }
// Sets a list of properties as dirty. void ElementStyle::DirtyProperties(const PropertyNameList& properties, bool clear_em_properties) { if (properties.empty()) return; bool all_inherited_dirty = StyleSheetSpecification::GetRegisteredProperties() == properties || StyleSheetSpecification::GetRegisteredInheritedProperties() == properties; if (all_inherited_dirty) { const PropertyNameList &all_inherited_properties = StyleSheetSpecification::GetRegisteredInheritedProperties(); for (int i = 0; i < element->GetNumChildren(true); i++) element->GetChild(i)->GetStyle()->DirtyInheritedProperties(all_inherited_properties); // Clear all cached properties. cache->Clear(); } else { PropertyNameList inherited_properties; for (PropertyNameList::const_iterator i = properties.begin(); i != properties.end(); ++i) { // If this property is an inherited property, then push it into the list to be passed onto our children. const PropertyDefinition* property = StyleSheetSpecification::GetProperty(*i); if (property != NULL && property->IsInherited()) inherited_properties.insert(*i); } // Pass the list of those properties that are inherited onto our children. if (!inherited_properties.empty()) { for (int i = 0; i < element->GetNumChildren(true); i++) element->GetChild(i)->GetStyle()->DirtyInheritedProperties(inherited_properties); } // Clear cached properties. cache->Clear(); } // clear the list of EM-properties, we will refill it in DirtyEmProperties if (clear_em_properties && em_properties != NULL) { delete em_properties; em_properties = NULL; } // And send the event. element->OnPropertyChange(properties); }