SVGPolyElement.cpp [plain text]
#include "config.h"
#if SVG_SUPPORT
#include "SVGPolyElement.h"
#include "Attr.h"
#include "Document.h"
#include "SVGDOMImplementation.h"
#include "SVGHelper.h"
#include "SVGNames.h"
#include "SVGPointList.h"
using namespace WebCore;
SVGPolyElement::SVGPolyElement(const QualifiedName& tagName, Document *doc)
: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired(), SVGAnimatedPoints(), SVGPolyParser()
{
}
SVGPolyElement::~SVGPolyElement()
{
}
SVGPointList *SVGPolyElement::points() const
{
return lazy_create<SVGPointList>(m_points, this);
}
SVGPointList *SVGPolyElement::animatedPoints() const
{
return 0;
}
void SVGPolyElement::parseMappedAttribute(MappedAttribute *attr)
{
if (attr->name() == SVGNames::pointsAttr) {
points()->clear();
parsePoints(attr->value().deprecatedString());
} else {
if(SVGTests::parseMappedAttribute(attr)) return;
if(SVGLangSpace::parseMappedAttribute(attr)) return;
if(SVGExternalResourcesRequired::parseMappedAttribute(attr)) return;
SVGStyledTransformableElement::parseMappedAttribute(attr);
}
}
void SVGPolyElement::svgPolyTo(double x1, double y1, int) const
{
points()->appendItem(new SVGPoint(x1, y1, this));
}
void SVGPolyElement::notifyAttributeChange() const
{
static bool ignoreNotifications = false;
if (ignoreNotifications || ownerDocument()->parsing())
return;
SVGStyledElement::notifyAttributeChange();
String _points;
int len = points()->numberOfItems();
for (int i = 0; i < len; ++i) {
SVGPoint *p = points()->getItem(i);
_points += String::sprintf("%.6lg %.6lg ", p->x(), p->y());
}
String p("points");
RefPtr<Attr> attr = const_cast<SVGPolyElement *>(this)->getAttributeNode(p.impl());
if (attr) {
ExceptionCode ec;
ignoreNotifications = true; attr->setValue(_points, ec);
ignoreNotifications = false;
}
}
#endif // SVG_SUPPORT