24#include "wtf/Platform.h"
30#include "RenderPath.h"
36SVGEllipseElement::SVGEllipseElement(
const QualifiedName& tagName, Document* doc)
37 : SVGStyledTransformableElement(tagName, doc)
40 , SVGExternalResourcesRequired()
41 , m_cx(this, LengthModeWidth)
42 , m_cy(this, LengthModeHeight)
43 , m_rx(this, LengthModeWidth)
44 , m_ry(this, LengthModeHeight)
48SVGEllipseElement::~SVGEllipseElement()
52ANIMATED_PROPERTY_DEFINITIONS(SVGEllipseElement, SVGLength, Length, length, Cx, cx, SVGNames::cxAttr, m_cx)
53ANIMATED_PROPERTY_DEFINITIONS(SVGEllipseElement, SVGLength, Length, length, Cy, cy, SVGNames::cyAttr, m_cy)
54ANIMATED_PROPERTY_DEFINITIONS(SVGEllipseElement, SVGLength, Length, length, Rx, rx, SVGNames::rxAttr, m_rx)
55ANIMATED_PROPERTY_DEFINITIONS(SVGEllipseElement, SVGLength, Length, length, Ry, ry, SVGNames::ryAttr, m_ry)
57void SVGEllipseElement::parseMappedAttribute(MappedAttribute* attr)
59 if (attr->name() == SVGNames::cxAttr)
60 setCxBaseValue(SVGLength(
this, LengthModeWidth, attr->value()));
61 else if (attr->name() == SVGNames::cyAttr)
62 setCyBaseValue(SVGLength(
this, LengthModeHeight, attr->value()));
63 else if (attr->name() == SVGNames::rxAttr) {
64 setRxBaseValue(SVGLength(
this, LengthModeWidth, attr->value()));
65 if (rx().value() < 0.0)
66 document()->accessSVGExtensions()->reportError(
"A negative value for ellipse <rx> is not allowed");
67 }
else if (attr->name() == SVGNames::ryAttr) {
68 setRyBaseValue(SVGLength(
this, LengthModeHeight, attr->value()));
69 if (ry().value() < 0.0)
70 document()->accessSVGExtensions()->reportError(
"A negative value for ellipse <ry> is not allowed");
72 if (SVGTests::parseMappedAttribute(attr))
74 if (SVGLangSpace::parseMappedAttribute(attr))
76 if (SVGExternalResourcesRequired::parseMappedAttribute(attr))
78 SVGStyledTransformableElement::parseMappedAttribute(attr);
82void SVGEllipseElement::svgAttributeChanged(
const QualifiedName& attrName)
84 SVGStyledTransformableElement::svgAttributeChanged(attrName);
89 if (attrName == SVGNames::cxAttr || attrName == SVGNames::cyAttr ||
90 attrName == SVGNames::rxAttr || attrName == SVGNames::ryAttr ||
91 SVGTests::isKnownAttribute(attrName) ||
92 SVGLangSpace::isKnownAttribute(attrName) ||
93 SVGExternalResourcesRequired::isKnownAttribute(attrName) ||
94 SVGStyledTransformableElement::isKnownAttribute(attrName))
95 renderer()->setNeedsLayout(
true);
98Path SVGEllipseElement::toPathData()
const
100 return Path::createEllipse(FloatPoint(cx().value(), cy().value()),
101 rx().value(), ry().value());
104bool SVGEllipseElement::hasRelativeValues()
const
106 return (cx().isRelative() || cy().isRelative() ||
107 rx().isRelative() || ry().isRelative());
111quint32 SVGEllipseElement::id()
const
113 return SVGNames::ellipseTag.id();