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 protected:
00073 virtual const SVGElement* contextElement() const { return this; }
00074
00075 private:
00076 ANIMATED_PROPERTY_FORWARD_DECLARATIONS(SVGExternalResourcesRequired, bool, ExternalResourcesRequired, externalResourcesRequired)
00077 ANIMATED_PROPERTY_FORWARD_DECLARATIONS(SVGURIReference, String, Href, href)
00078
00079 ANIMATED_PROPERTY_DECLARATIONS(SVGUseElement, SVGLength, SVGLength, X, x)
00080 ANIMATED_PROPERTY_DECLARATIONS(SVGUseElement, SVGLength, SVGLength, Y, y)
00081 ANIMATED_PROPERTY_DECLARATIONS(SVGUseElement, SVGLength, SVGLength, Width, width)
00082 ANIMATED_PROPERTY_DECLARATIONS(SVGUseElement, SVGLength, SVGLength, Height, height)
00083
00084 private:
00085 friend class SVGElement;
00086 SVGElementInstance* instanceForShadowTreeElement(Node* element) const;
00087
00088 private:
00089
00090 void buildInstanceTree(SVGElement* target, SVGElementInstance* targetInstance, bool& foundCycle);
00091 void handleDeepUseReferencing(SVGElement* use, SVGElementInstance* targetInstance, bool& foundCycle);
00092
00093
00094 PassRefPtr<SVGSVGElement> buildShadowTreeForSymbolTag(SVGElement* target, SVGElementInstance* targetInstance);
00095 void alterShadowTreeForSVGTag(SVGElement* target);
00096
00097 void buildShadowTree(SVGElement* target, SVGElementInstance* targetInstance);
00098
00099 #if ENABLE(SVG) && ENABLE(SVG_USE)
00100 void expandUseElementsInShadowTree(Node* element);
00101 void expandSymbolElementsInShadowTree(Node* element);
00102 #endif
00103
00104 void attachShadowTree();
00105
00106
00107 void associateInstancesWithShadowTreeElements(Node* target, SVGElementInstance* targetInstance);
00108
00109 SVGElementInstance* instanceForShadowTreeElement(Node* element, SVGElementInstance* instance) const;
00110 void transferUseAttributesToReplacedElement(SVGElement* from, SVGElement* to) const;
00111
00112 RefPtr<SVGElement> m_shadowTreeRootElement;
00113 RefPtr<SVGElementInstance> m_targetElementInstance;
00114 };
00115
00116 }
00117
00118 #endif // ENABLE(SVG)
00119 #endif