KHTML
SVGCircleElement.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "config.h"
00024 #include "wtf/Platform.h"
00025
00026 #if ENABLE(SVG)
00027 #include "SVGCircleElement.h"
00028
00029 #include "FloatPoint.h"
00030 #include "RenderPath.h"
00031 #include "SVGNames.h"
00032
00033 namespace WebCore {
00034
00035 SVGCircleElement::SVGCircleElement(const QualifiedName& tagName, Document* doc)
00036 : SVGStyledTransformableElement(tagName, doc)
00037 , SVGTests()
00038 , SVGLangSpace()
00039 , SVGExternalResourcesRequired()
00040 , m_cx(SVGLength(this, LengthModeWidth))
00041 , m_cy(SVGLength(this, LengthModeHeight))
00042 , m_r(SVGLength(this, LengthModeOther))
00043 {
00044 }
00045
00046 SVGCircleElement::~SVGCircleElement()
00047 {
00048 }
00049
00050 ANIMATED_PROPERTY_DEFINITIONS(SVGCircleElement, SVGLength, Length, length, Cx, cx, SVGNames::cxAttr, m_cx)
00051 ANIMATED_PROPERTY_DEFINITIONS(SVGCircleElement, SVGLength, Length, length, Cy, cy, SVGNames::cyAttr, m_cy)
00052 ANIMATED_PROPERTY_DEFINITIONS(SVGCircleElement, SVGLength, Length, length, R, r, SVGNames::rAttr, m_r)
00053
00054 void SVGCircleElement::parseMappedAttribute(MappedAttribute* attr)
00055 {
00056 if (attr->name() == SVGNames::cxAttr)
00057 setCxBaseValue(SVGLength(this, LengthModeWidth, attr->value()));
00058 else if (attr->name() == SVGNames::cyAttr)
00059 setCyBaseValue(SVGLength(this, LengthModeHeight, attr->value()));
00060 else if (attr->name() == SVGNames::rAttr) {
00061 setRBaseValue(SVGLength(this, LengthModeOther, attr->value()));
00062 if (r().value() < 0.0)
00063 document()->accessSVGExtensions()->reportError("A negative value for circle <r> is not allowed");
00064 } else {
00065 if (SVGTests::parseMappedAttribute(attr))
00066 return;
00067 if (SVGLangSpace::parseMappedAttribute(attr))
00068 return;
00069 if (SVGExternalResourcesRequired::parseMappedAttribute(attr))
00070 return;
00071 SVGStyledTransformableElement::parseMappedAttribute(attr);
00072 }
00073 }
00074
00075 void SVGCircleElement::svgAttributeChanged(const QualifiedName& attrName)
00076 {
00077 SVGStyledTransformableElement::svgAttributeChanged(attrName);
00078
00079 if (!renderer())
00080 return;
00081
00082 if (attrName == SVGNames::cxAttr || attrName == SVGNames::cyAttr ||
00083 attrName == SVGNames::rAttr ||
00084 SVGTests::isKnownAttribute(attrName) ||
00085 SVGLangSpace::isKnownAttribute(attrName) ||
00086 SVGExternalResourcesRequired::isKnownAttribute(attrName) ||
00087 SVGStyledTransformableElement::isKnownAttribute(attrName))
00088 renderer()->setNeedsLayout(true);
00089 }
00090
00091 Path SVGCircleElement::toPathData() const
00092 {
00093 return Path::createCircle(FloatPoint(cx().value(), cy().value()), r().value());
00094 }
00095
00096 bool SVGCircleElement::hasRelativeValues() const
00097 {
00098 return (cx().isRelative() || cy().isRelative() || r().isRelative());
00099 }
00100
00101
00102 quint32 SVGCircleElement::id() const
00103 {
00104 return SVGNames::circleTag.id();
00105 }
00106
00107 DOMString SVGCircleElement::tagName() const
00108 {
00109 return SVGNames::circleTag.tagName();
00110 }
00111
00112
00113 }
00114
00115 #endif // ENABLE(SVG)