SVGCircleElement.cpp [plain text]
#include "config.h"
#include "SVGCircleElement.h"
#include "RenderSVGEllipse.h"
#include "RenderSVGResource.h"
#include <wtf/IsoMallocInlines.h>
namespace WebCore {
WTF_MAKE_ISO_ALLOCATED_IMPL(SVGCircleElement);
inline SVGCircleElement::SVGCircleElement(const QualifiedName& tagName, Document& document)
: SVGGeometryElement(tagName, document)
, SVGExternalResourcesRequired(this)
{
ASSERT(hasTagName(SVGNames::circleTag));
registerAttributes();
}
Ref<SVGCircleElement> SVGCircleElement::create(const QualifiedName& tagName, Document& document)
{
return adoptRef(*new SVGCircleElement(tagName, document));
}
void SVGCircleElement::registerAttributes()
{
auto& registry = attributeRegistry();
if (!registry.isEmpty())
return;
registry.registerAttribute<SVGNames::cxAttr, &SVGCircleElement::m_cx>();
registry.registerAttribute<SVGNames::cyAttr, &SVGCircleElement::m_cy>();
registry.registerAttribute<SVGNames::rAttr, &SVGCircleElement::m_r>();
}
void SVGCircleElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
{
SVGParsingError parseError = NoError;
if (name == SVGNames::cxAttr)
m_cx.setValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
else if (name == SVGNames::cyAttr)
m_cy.setValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
else if (name == SVGNames::rAttr)
m_r.setValue(SVGLengthValue::construct(LengthModeOther, value, parseError, ForbidNegativeLengths));
reportAttributeParsingError(parseError, name, value);
SVGGeometryElement::parseAttribute(name, value);
SVGExternalResourcesRequired::parseAttribute(name, value);
}
void SVGCircleElement::svgAttributeChanged(const QualifiedName& attrName)
{
if (isKnownAttribute(attrName)) {
InstanceInvalidationGuard guard(*this);
invalidateSVGPresentationAttributeStyle();
return;
}
SVGGeometryElement::svgAttributeChanged(attrName);
SVGExternalResourcesRequired::svgAttributeChanged(attrName);
}
RenderPtr<RenderElement> SVGCircleElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
{
return createRenderer<RenderSVGEllipse>(*this, WTFMove(style));
}
}