void SVGElement::invalidateRelativeLengthClients(SubtreeLayoutScope* layoutScope) { if (!inDocument()) return; ASSERT(!m_inRelativeLengthClientsInvalidation); #if ENABLE(ASSERT) TemporaryChange<bool> inRelativeLengthClientsInvalidationChange(m_inRelativeLengthClientsInvalidation, true); #endif if (LayoutObject* layoutObject = this->layoutObject()) { if (hasRelativeLengths() && layoutObject->isSVGResourceContainer()) toLayoutSVGResourceContainer(layoutObject)->invalidateCacheAndMarkForLayout(layoutScope); else if (selfHasRelativeLengths()) layoutObject->setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidationReason::Unknown, MarkContainerChain, layoutScope); } for (SVGElement* element : m_elementsWithRelativeLengths) { if (element != this) element->invalidateRelativeLengthClients(layoutScope); } }
void SVGElement::invalidateRelativeLengthClients(SubtreeLayoutScope* layoutScope) { if (!inDocument()) return; ASSERT(!m_inRelativeLengthClientsInvalidation); #if ENABLE(ASSERT) TemporaryChange<bool> inRelativeLengthClientsInvalidationChange(m_inRelativeLengthClientsInvalidation, true); #endif RenderObject* renderer = this->renderer(); if (renderer && selfHasRelativeLengths()) { if (renderer->isSVGResourceContainer()) toRenderSVGResourceContainer(renderer)->invalidateCacheAndMarkForLayout(layoutScope); else renderer->setNeedsLayoutAndFullPaintInvalidation(MarkContainingBlockChain, layoutScope); } WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::iterator end = m_elementsWithRelativeLengths.end(); for (WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >::iterator it = m_elementsWithRelativeLengths.begin(); it != end; ++it) { if (*it != this) (*it)->invalidateRelativeLengthClients(layoutScope); } }