static inline void notifyTargetAndInstancesAboutAnimValChange(SVGElement* targetElement, const QualifiedName& attributeName) { ASSERT(targetElement); if (attributeName == anyQName() || !targetElement->inDocument() || !targetElement->parentNode()) return; SVGElement::InstanceUpdateBlocker blocker(targetElement); notifyTargetAboutAnimValChange(targetElement, attributeName); // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt. for (SVGElement* element : targetElement->instancesForElement()) notifyTargetAboutAnimValChange(element, attributeName); }
static inline void notifyTargetAndInstancesAboutAnimValChange(SVGElement* targetElement, const QualifiedName& attributeName) { ASSERT(targetElement); if (attributeName == anyQName() || !targetElement->inDocument() || !targetElement->parentNode()) return; SVGElement::InstanceUpdateBlocker blocker(targetElement); notifyTargetAboutAnimValChange(targetElement, attributeName); // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt. const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& instances = targetElement->instancesForElement(); const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator end = instances.end(); for (WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::const_iterator it = instances.begin(); it != end; ++it) { notifyTargetAboutAnimValChange(*it, attributeName); } }