diff options
Diffstat (limited to 'Source/WebCore/svg/SVGUseElement.h')
-rw-r--r-- | Source/WebCore/svg/SVGUseElement.h | 134 |
1 files changed, 49 insertions, 85 deletions
diff --git a/Source/WebCore/svg/SVGUseElement.h b/Source/WebCore/svg/SVGUseElement.h index 86123fc21..070fdfd32 100644 --- a/Source/WebCore/svg/SVGUseElement.h +++ b/Source/WebCore/svg/SVGUseElement.h @@ -1,6 +1,7 @@ /* * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> + * Copyright (C) 2015 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 @@ -18,118 +19,81 @@ * Boston, MA 02110-1301, USA. */ -#ifndef SVGUseElement_h -#define SVGUseElement_h +#pragma once -#if ENABLE(SVG) #include "CachedResourceHandle.h" #include "CachedSVGDocumentClient.h" #include "SVGAnimatedBoolean.h" #include "SVGAnimatedLength.h" #include "SVGExternalResourcesRequired.h" #include "SVGGraphicsElement.h" -#include "SVGNames.h" #include "SVGURIReference.h" namespace WebCore { class CachedSVGDocument; -class SVGElementInstance; +class SVGGElement; + +class SVGUseElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired, public SVGURIReference, private CachedSVGDocumentClient { + + 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_OVERRIDE(Href, href) + DECLARE_ANIMATED_BOOLEAN_OVERRIDE(ExternalResourcesRequired, externalResourcesRequired) + END_DECLARE_ANIMATED_PROPERTIES -class SVGUseElement final : public SVGGraphicsElement, - public SVGExternalResourcesRequired, - public SVGURIReference, - public CachedSVGDocumentClient { public: - static PassRefPtr<SVGUseElement> create(const QualifiedName&, Document&, bool wasInsertedByParser); + static Ref<SVGUseElement> create(const QualifiedName&, Document&); virtual ~SVGUseElement(); - SVGElementInstance* instanceRoot(); - SVGElementInstance* animatedInstanceRoot() const; - SVGElementInstance* instanceForShadowTreeElement(Node*) const; void invalidateShadowTree(); - void invalidateDependentShadowTrees(); RenderElement* rendererClipChild() const; private: - SVGUseElement(const QualifiedName&, Document&, bool wasInsertedByParser); - - virtual bool isValid() const override { return SVGTests::isValid(); } - virtual bool supportsFocus() const override { return true; } - - virtual InsertionNotificationRequest insertedInto(ContainerNode&) override; - virtual void removedFrom(ContainerNode&) override; - virtual void buildPendingResource() override; - - bool isSupportedAttribute(const QualifiedName&); - virtual void parseAttribute(const QualifiedName&, const AtomicString&) override; - virtual void svgAttributeChanged(const QualifiedName&) override; - - virtual void willAttachRenderers() override; - - virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override; - virtual void toClipPath(Path&) override; - - void clearResourceReferences(); - void buildShadowAndInstanceTree(SVGElement* target); - void detachInstance(); + SVGUseElement(const QualifiedName&, Document&); + + bool isValid() const override; + InsertionNotificationRequest insertedInto(ContainerNode&) override; + void removedFrom(ContainerNode&) override; + void buildPendingResource() override; + void parseAttribute(const QualifiedName&, const AtomicString&) override; + void svgAttributeChanged(const QualifiedName&) override; + void willRecalcStyle(Style::Change) override; + RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override; + void toClipPath(Path&) override; + bool haveLoadedRequiredResources() override; + void finishParsingChildren() override; + bool selfHasRelativeLengths() const override; + void setHaveFiredLoadEvent(bool) override; + bool haveFiredLoadEvent() const override; + Timer* svgLoadEventTimer() override; + void notifyFinished(CachedResource&) final; - virtual bool haveLoadedRequiredResources() override { return SVGExternalResourcesRequired::haveLoadedRequiredResources(); } - - virtual void finishParsingChildren() override; - 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); + Document* externalDocument() const; + void updateExternalDocument(); - void expandUseElementsInShadowTree(Node* element); - void expandSymbolElementsInShadowTree(Node* element); + SVGElement* findTarget(String* targetID = nullptr) const; - // "Tree connector" - void associateInstancesWithShadowTreeElements(Node* target, SVGElementInstance* targetInstance); - SVGElementInstance* instanceForShadowTreeElement(Node* element, SVGElementInstance* instance) const; + void cloneTarget(ContainerNode&, SVGElement& target) const; + SVGElement* targetClone() const; - void transferUseAttributesToReplacedElement(SVGElement* from, SVGElement* to) const; - void transferEventListenersToShadowTree(SVGElementInstance* target); + void updateShadowTree(); + void expandUseElementsInShadowTree() const; + void expandSymbolElementsInShadowTree() const; + void transferEventListenersToShadowTree() const; + void transferSizeAttributesToTargetClone(SVGElement&) const; - 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 clearShadowTree(); + void invalidateDependentShadowTrees(); - bool cachedDocumentIsStillLoading(); - Document* externalDocument() const; - bool instanceTreeIsLoading(SVGElementInstance*); - virtual void notifyFinished(CachedResource*) override; - Document* referencedDocument() const; - void setCachedDocument(CachedResourceHandle<CachedSVGDocument>); - - // SVGExternalResourcesRequired - virtual void setHaveFiredLoadEvent(bool haveFiredLoadEvent) override { m_haveFiredLoadEvent = haveFiredLoadEvent; } - virtual bool isParserInserted() const override { return m_wasInsertedByParser; } - virtual bool haveFiredLoadEvent() const override { return m_haveFiredLoadEvent; } - virtual Timer<SVGElement>* svgLoadEventTimer() override { return &m_svgLoadEventTimer; } - - bool m_wasInsertedByParser; - bool m_haveFiredLoadEvent; - bool m_needsShadowTreeRecreation; - RefPtr<SVGElementInstance> m_targetElementInstance; - CachedResourceHandle<CachedSVGDocument> m_cachedDocument; - Timer<SVGElement> m_svgLoadEventTimer; + bool m_haveFiredLoadEvent { false }; + bool m_shadowTreeNeedsUpdate { true }; + CachedResourceHandle<CachedSVGDocument> m_externalDocument; + Timer m_svgLoadEventTimer; }; -NODE_TYPE_CASTS(SVGUseElement) - } - -#endif -#endif |