summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/svg/SVGUseElement.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/svg/SVGUseElement.h')
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGUseElement.h88
1 files changed, 33 insertions, 55 deletions
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGUseElement.h b/chromium/third_party/WebKit/Source/core/svg/SVGUseElement.h
index 800af8f7c80..b1e3bec3e01 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGUseElement.h
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGUseElement.h
@@ -21,113 +21,91 @@
#ifndef SVGUseElement_h
#define SVGUseElement_h
-#include "SVGNames.h"
+#include "core/SVGNames.h"
#include "core/fetch/DocumentResource.h"
#include "core/svg/SVGAnimatedBoolean.h"
#include "core/svg/SVGAnimatedLength.h"
-#include "core/svg/SVGExternalResourcesRequired.h"
#include "core/svg/SVGGraphicsElement.h"
#include "core/svg/SVGURIReference.h"
namespace WebCore {
class DocumentResource;
-class SVGElementInstance;
class SVGUseElement FINAL : public SVGGraphicsElement,
- public SVGExternalResourcesRequired,
public SVGURIReference,
public DocumentResourceClient {
public:
- static PassRefPtr<SVGUseElement> create(Document&, bool wasInsertedByParser);
+ static PassRefPtrWillBeRawPtr<SVGUseElement> create(Document&);
virtual ~SVGUseElement();
- SVGElementInstance* instanceRoot();
- SVGElementInstance* animatedInstanceRoot() const;
- SVGElementInstance* instanceForShadowTreeElement(Node*) const;
void invalidateShadowTree();
- void invalidateDependentShadowTrees();
RenderObject* rendererClipChild() const;
+ SVGAnimatedLength* x() const { return m_x.get(); }
+ SVGAnimatedLength* y() const { return m_y.get(); }
+ SVGAnimatedLength* width() const { return m_width.get(); }
+ SVGAnimatedLength* height() const { return m_height.get(); }
+
+ virtual void buildPendingResource() OVERRIDE;
+
+ virtual void trace(Visitor*) OVERRIDE;
+
private:
- SVGUseElement(Document&, bool wasInsertedByParser);
+ explicit SVGUseElement(Document&);
- virtual bool isValid() const { return SVGTests::isValid(); }
- virtual bool supportsFocus() const OVERRIDE { return hasFocusEventListeners(); }
+ virtual bool isStructurallyExternal() const OVERRIDE { return !hrefString().isNull() && isExternalURIReference(hrefString(), document()); }
virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE;
virtual void removedFrom(ContainerNode*) OVERRIDE;
- virtual void buildPendingResource();
bool isSupportedAttribute(const QualifiedName&);
virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
- virtual void svgAttributeChanged(const QualifiedName&);
-
- virtual void attach(const AttachContext& = AttachContext()) OVERRIDE;
- virtual void willRecalcStyle(StyleRecalcChange) OVERRIDE;
+ virtual void svgAttributeChanged(const QualifiedName&) OVERRIDE;
- virtual RenderObject* createRenderer(RenderStyle*);
- virtual void toClipPath(Path&);
+ virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
+ virtual void toClipPath(Path&) OVERRIDE;
void clearResourceReferences();
void buildShadowAndInstanceTree(SVGElement* target);
- void detachInstance();
- virtual bool haveLoadedRequiredResources() { return SVGExternalResourcesRequired::haveLoadedRequiredResources(); }
+ void scheduleShadowTreeRecreation();
+ virtual bool haveLoadedRequiredResources() OVERRIDE { return !isStructurallyExternal() || m_haveFiredLoadEvent; }
- virtual void finishParsingChildren();
- virtual bool selfHasRelativeLengths() const;
+ virtual bool selfHasRelativeLengths() const OVERRIDE;
// Instance tree handling
- void buildInstanceTree(SVGElement* target, SVGElementInstance* targetInstance, bool& foundCycle, bool foundUse);
- bool hasCycleUseReferencing(SVGUseElement*, SVGElementInstance* targetInstance, SVGElement*& newTarget);
-
- // Shadow tree handling
- void buildShadowTree(SVGElement* target, SVGElementInstance* targetInstance);
-
- void expandUseElementsInShadowTree(Node* element);
- void expandSymbolElementsInShadowTree(Node* element);
-
- // "Tree connector"
- void associateInstancesWithShadowTreeElements(Node* target, SVGElementInstance* targetInstance);
- SVGElementInstance* instanceForShadowTreeElement(Node* element, SVGElementInstance* instance) const;
+ bool buildShadowTree(SVGElement* target, SVGElement* targetInstance, bool foundUse);
+ bool hasCycleUseReferencing(SVGUseElement*, ContainerNode* targetInstance, SVGElement*& newTarget);
+ bool expandUseElementsInShadowTree(SVGElement*);
+ void expandSymbolElementsInShadowTree(SVGElement*);
void transferUseAttributesToReplacedElement(SVGElement* from, SVGElement* to) const;
- void transferEventListenersToShadowTree(SVGElementInstance* target);
- BEGIN_DECLARE_ANIMATED_PROPERTIES(SVGUseElement)
- DECLARE_ANIMATED_LENGTH(X, x)
- DECLARE_ANIMATED_LENGTH(Y, y)
- DECLARE_ANIMATED_LENGTH(Width, width)
- DECLARE_ANIMATED_LENGTH(Height, height)
- DECLARE_ANIMATED_STRING(Href, href)
- DECLARE_ANIMATED_BOOLEAN(ExternalResourcesRequired, externalResourcesRequired)
- END_DECLARE_ANIMATED_PROPERTIES
+ void invalidateDependentShadowTrees();
bool resourceIsStillLoading();
Document* externalDocument() const;
- bool instanceTreeIsLoading(SVGElementInstance*);
- virtual void notifyFinished(Resource*);
- Document* referencedDocument() const;
+ bool instanceTreeIsLoading(SVGElement*);
+ virtual void notifyFinished(Resource*) OVERRIDE;
+ TreeScope* referencedScope() const;
void setDocumentResource(ResourcePtr<DocumentResource>);
- // SVGExternalResourcesRequired
- virtual void setHaveFiredLoadEvent(bool haveFiredLoadEvent) { m_haveFiredLoadEvent = haveFiredLoadEvent; }
- virtual bool isParserInserted() const { return m_wasInsertedByParser; }
- virtual bool haveFiredLoadEvent() const { return m_haveFiredLoadEvent; }
virtual Timer<SVGElement>* svgLoadEventTimer() OVERRIDE { return &m_svgLoadEventTimer; }
- bool m_wasInsertedByParser;
+ RefPtr<SVGAnimatedLength> m_x;
+ RefPtr<SVGAnimatedLength> m_y;
+ RefPtr<SVGAnimatedLength> m_width;
+ RefPtr<SVGAnimatedLength> m_height;
+
bool m_haveFiredLoadEvent;
bool m_needsShadowTreeRecreation;
- RefPtr<SVGElementInstance> m_targetElementInstance;
+ RefPtrWillBeMember<SVGElement> m_targetElementInstance;
ResourcePtr<DocumentResource> m_resource;
Timer<SVGElement> m_svgLoadEventTimer;
};
-DEFINE_NODE_TYPE_CASTS(SVGUseElement, hasTagName(SVGNames::useTag));
-
}
#endif