KHTML
SVGUseElement.h
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 #ifndef SVGUseElement_h
00024 #define SVGUseElement_h
00025
00026 #if ENABLE(SVG)
00027 #include "SVGExternalResourcesRequired.h"
00028 #include "SVGLangSpace.h"
00029 #include "SVGStyledTransformableElement.h"
00030 #include "SVGTests.h"
00031 #include "SVGURIReference.h"
00032
00033 namespace WebCore {
00034
00035 class SVGElementInstance;
00036 class SVGLength;
00037
00038 class SVGUseElement : public SVGStyledTransformableElement,
00039 public SVGTests,
00040 public SVGLangSpace,
00041 public SVGExternalResourcesRequired,
00042 public SVGURIReference {
00043 public:
00044 SVGUseElement(const QualifiedName&, Document*);
00045 virtual ~SVGUseElement();
00046
00047 SVGElementInstance* instanceRoot() const;
00048 SVGElementInstance* animatedInstanceRoot() const;
00049
00050 virtual bool isValid() const { return SVGTests::isValid(); }
00051
00052 virtual void insertedIntoDocument();
00053 virtual void removedFromDocument();
00054 virtual void buildPendingResource();
00055
00056 virtual void parseMappedAttribute(MappedAttribute*);
00057 virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
00058
00059 virtual void svgAttributeChanged(const QualifiedName&);
00060 virtual void recalcStyle(StyleChange = NoChange);
00061
00062 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
00063 virtual void attach();
00064 virtual void detach();
00065
00066 virtual Path toClipPath() const;
00067
00068 static void removeDisallowedElementsFromSubtree(Node* element);
00069
00070
00071 virtual quint32 id() const { return SVGNames::useTag.id(); }
00072 virtual DOMString tagName() const { return SVGNames::useTag.tagName(); }
00073
00074 protected:
00075 virtual const SVGElement* contextElement() const { return this; }
00076
00077 private:
00078 ANIMATED_PROPERTY_FORWARD_DECLARATIONS(SVGExternalResourcesRequired, bool, ExternalResourcesRequired, externalResourcesRequired)
00079 ANIMATED_PROPERTY_FORWARD_DECLARATIONS(SVGURIReference, String, Href, href)
00080
00081 ANIMATED_PROPERTY_DECLARATIONS(SVGUseElement, SVGLength, SVGLength, X, x)
00082 ANIMATED_PROPERTY_DECLARATIONS(SVGUseElement, SVGLength, SVGLength, Y, y)
00083 ANIMATED_PROPERTY_DECLARATIONS(SVGUseElement, SVGLength, SVGLength, Width, width)
00084 ANIMATED_PROPERTY_DECLARATIONS(SVGUseElement, SVGLength, SVGLength, Height, height)
00085
00086 private:
00087 friend class SVGElement;
00088 SVGElementInstance* instanceForShadowTreeElement(Node* element) const;
00089
00090 private:
00091
00092 void buildInstanceTree(SVGElement* target, SVGElementInstance* targetInstance, bool& foundCycle);
00093 void handleDeepUseReferencing(SVGElement* use, SVGElementInstance* targetInstance, bool& foundCycle);
00094
00095
00096 PassRefPtr<SVGSVGElement> buildShadowTreeForSymbolTag(SVGElement* target, SVGElementInstance* targetInstance);
00097 void alterShadowTreeForSVGTag(SVGElement* target);
00098
00099 void buildShadowTree(SVGElement* target, SVGElementInstance* targetInstance);
00100
00101 #if ENABLE(SVG) && ENABLE(SVG_USE)
00102 void expandUseElementsInShadowTree(Node* element);
00103 void expandSymbolElementsInShadowTree(Node* element);
00104 #endif
00105
00106 void attachShadowTree();
00107
00108
00109 void associateInstancesWithShadowTreeElements(Node* target, SVGElementInstance* targetInstance);
00110
00111 SVGElementInstance* instanceForShadowTreeElement(Node* element, SVGElementInstance* instance) const;
00112 void transferUseAttributesToReplacedElement(SVGElement* from, SVGElement* to) const;
00113
00114 RefPtr<SVGElement> m_shadowTreeRootElement;
00115 RefPtr<SVGElementInstance> m_targetElementInstance;
00116 };
00117
00118 }
00119
00120 #endif // ENABLE(SVG)
00121 #endif