void SVGUseElement::recalcStyle(StyleChange change) { // Eventually mark shadow root element needing style recalc if (needsStyleRecalc() && m_targetElementInstance) { if (SVGElement* shadowRoot = m_targetElementInstance->shadowTreeElement()) shadowRoot->setNeedsStyleRecalc(); } SVGStyledTransformableElement::recalcStyle(change); bool needsStyleUpdate = !m_needsShadowTreeRecreation; if (m_needsShadowTreeRecreation) { static_cast<RenderSVGShadowTreeRootContainer*>(renderer())->markShadowTreeForRecreation(); m_needsShadowTreeRecreation = false; } RenderSVGShadowTreeRootContainer* shadowRoot = static_cast<RenderSVGShadowTreeRootContainer*>(renderer()); if (!shadowRoot) return; shadowRoot->updateFromElement(); if (!needsStyleUpdate) return; shadowRoot->updateStyle(change); }
void SVGUseElement::recalcStyle(StyleChange change) { // Eventually mark shadow root element needing style recalc if ((change >= Inherit || needsStyleRecalc() || childNeedsStyleRecalc()) && m_targetElementInstance && !m_updatesBlocked) { if (SVGElement* shadowRoot = m_targetElementInstance->shadowTreeElement()) shadowRoot->setNeedsStyleRecalc(); } SVGStyledTransformableElement::recalcStyle(change); // Assure that the shadow tree has not been marked for recreation, while we're building it. if (m_updatesBlocked) ASSERT(!m_needsShadowTreeRecreation); RenderSVGShadowTreeRootContainer* shadowRoot = static_cast<RenderSVGShadowTreeRootContainer*>(renderer()); if (!shadowRoot) return; bool needsStyleUpdate = !m_needsShadowTreeRecreation; if (m_needsShadowTreeRecreation) { shadowRoot->markShadowTreeForRecreation(); m_needsShadowTreeRecreation = false; } shadowRoot->updateFromElement(); if (!needsStyleUpdate) return; shadowRoot->updateStyle(change); }