diff options
Diffstat (limited to 'WebCore/svg/SVGElement.h')
| -rw-r--r-- | WebCore/svg/SVGElement.h | 77 |
1 files changed, 28 insertions, 49 deletions
diff --git a/WebCore/svg/SVGElement.h b/WebCore/svg/SVGElement.h index aed7e59..b247a74 100644 --- a/WebCore/svg/SVGElement.h +++ b/WebCore/svg/SVGElement.h @@ -1,8 +1,7 @@ /* Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann <zimmermann@kde.org> 2004, 2005, 2006 Rob Buis <buis@kde.org> - - This file is part of the KDE project + Copyright (C) 2009 Apple Inc. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -26,32 +25,29 @@ #if ENABLE(SVG) #include "StyledElement.h" #include "SVGAnimatedProperty.h" -#include "SVGNames.h" +#include "SynchronizablePropertyController.h" namespace WebCore { - class TransformationMatrix; class CSSCursorImageValue; class Document; class SVGCursorElement; class SVGDocumentExtensions; class SVGElementInstance; class SVGSVGElement; + class TransformationMatrix; class SVGElement : public StyledElement { public: - SVGElement(const QualifiedName&, Document*); + static PassRefPtr<SVGElement> create(const QualifiedName&, Document*); virtual ~SVGElement(); - virtual bool isSVGElement() const { return true; } - virtual bool isSupported(StringImpl* feature, StringImpl* version) const; - - String id() const; - void setId(const String&, ExceptionCode&); + String xmlbase() const; void setXmlbase(const String&, ExceptionCode&); SVGSVGElement* ownerSVGElement() const; SVGElement* viewportElement() const; + SVGDocumentExtensions* accessDocumentSVGExtensions() const; virtual void parseMappedAttribute(MappedAttribute*); @@ -64,74 +60,57 @@ namespace WebCore { virtual bool isGradientStop() const { return false; } virtual bool isTextContent() const { return false; } - virtual bool isShadowNode() const { return m_shadowParent; } - virtual Node* shadowParentNode() { return m_shadowParent; } void setShadowParentNode(ContainerNode* node) { m_shadowParent = node; } - virtual ContainerNode* eventParentNode(); // For SVGTests virtual bool isValid() const { return true; } - - virtual void finishParsingChildren(); + virtual bool rendererIsNeeded(RenderStyle*) { return false; } virtual bool childShouldCreateRenderer(Node*) const; - virtual void insertedIntoDocument(); - virtual void buildPendingResource() { } - virtual void svgAttributeChanged(const QualifiedName&) { } - virtual void attributeChanged(Attribute*, bool preserveDecls = false); void sendSVGLoadEventIfPossible(bool sendParentLoadEvents = false); virtual TransformationMatrix* supplementalTransform() { return 0; } - virtual void updateAnimatedSVGAttribute(const String&) const; virtual void setSynchronizedSVGAttributes(bool) const; HashSet<SVGElementInstance*> instancesForElement() const; - - // Inlined methods handling SVG property synchronization - void invokeSVGPropertySynchronizer(const String& name) const - { - if (m_svgPropertyMap.contains(name)) { - const SVGAnimatedPropertyBase* property = m_svgPropertyMap.get(name); - ASSERT(property); - - property->synchronize(); - } - } - - void invokeAllSVGPropertySynchronizers() const - { - HashMap<String, const SVGAnimatedPropertyBase*>::const_iterator it = m_svgPropertyMap.begin(); - const HashMap<String, const SVGAnimatedPropertyBase*>::const_iterator end = m_svgPropertyMap.end(); - for (; it != end; ++it) { - const SVGAnimatedPropertyBase* property = it->second; - ASSERT(property); - - property->synchronize(); - } - } - - void addSVGPropertySynchronizer(const QualifiedName& attrName, const SVGAnimatedPropertyBase& base) const - { - m_svgPropertyMap.set(attrName.localName(), &base); - } void setCursorElement(SVGCursorElement* cursorElement) { m_cursorElement = cursorElement; } void setCursorImageValue(CSSCursorImageValue* cursorImageValue) { m_cursorImageValue = cursorImageValue; } + SynchronizablePropertyController& propertyController() const { return m_propertyController; } + + protected: + SVGElement(const QualifiedName&, Document*); + + virtual void finishParsingChildren(); + virtual void insertedIntoDocument(); + virtual void attributeChanged(Attribute*, bool preserveDecls = false); + virtual void updateAnimatedSVGAttribute(const String&) const; + private: friend class SVGElementInstance; + virtual bool isSVGElement() const { return true; } + + virtual bool isSupported(StringImpl* feature, StringImpl* version) const; + + virtual bool isShadowNode() const { return m_shadowParent; } + virtual Node* shadowParentNode() { return m_shadowParent; } + virtual ContainerNode* eventParentNode(); + + virtual void buildPendingResource() { } + void mapInstanceToElement(SVGElementInstance*); void removeInstanceMapping(SVGElementInstance*); virtual bool haveLoadedRequiredResources(); ContainerNode* m_shadowParent; - mutable HashMap<String, const SVGAnimatedPropertyBase*> m_svgPropertyMap; + mutable SynchronizablePropertyController m_propertyController; SVGCursorElement* m_cursorElement; CSSCursorImageValue* m_cursorImageValue; |
