void SVGEllipseElement::svgAttributeChanged(const QualifiedName& attrName) { SVGStyledTransformableElement::svgAttributeChanged(attrName); RenderPath* renderer = static_cast<RenderPath*>(this->renderer()); if (!renderer) return; if (SVGStyledTransformableElement::isKnownAttribute(attrName)) { renderer->setNeedsTransformUpdate(); renderer->setNeedsLayout(true); return; } if (attrName == SVGNames::cxAttr || attrName == SVGNames::cyAttr || attrName == SVGNames::rxAttr || attrName == SVGNames::ryAttr) { renderer->setNeedsPathUpdate(); renderer->setNeedsLayout(true); return; } if (SVGTests::isKnownAttribute(attrName) || SVGLangSpace::isKnownAttribute(attrName) || SVGExternalResourcesRequired::isKnownAttribute(attrName)) renderer->setNeedsLayout(true); }
void SVGPolyElement::svgAttributeChanged(const QualifiedName& attrName) { SVGStyledTransformableElement::svgAttributeChanged(attrName); // The points property is not a regular SVGAnimatedProperty, still we use the same SVG<->XML DOM synchronization framework. if (attrName == SVGNames::pointsAttr) setSynchronizedSVGAttributes(false); RenderPath* renderer = static_cast<RenderPath*>(this->renderer()); if (!renderer) return; if (SVGStyledTransformableElement::isKnownAttribute(attrName)) { renderer->setNeedsTransformUpdate(); renderer->setNeedsLayout(true); return; } if (attrName == SVGNames::pointsAttr) { renderer->setNeedsPathUpdate(); renderer->setNeedsLayout(true); return; } if (SVGTests::isKnownAttribute(attrName) || SVGLangSpace::isKnownAttribute(attrName) || SVGExternalResourcesRequired::isKnownAttribute(attrName)) renderer->setNeedsLayout(true); }
void SVGStyledElement::rebuildRenderer() const { if (!renderer() || !renderer()->isRenderPath()) return; RenderPath* renderPath = static_cast<RenderPath*>(renderer()); SVGElement* parentElement = svg_dynamic_cast(parentNode()); if (parentElement && parentElement->renderer() && parentElement->isStyled() && parentElement->childShouldCreateRenderer(const_cast<SVGStyledElement*>(this))) renderPath->setNeedsLayout(true); }