15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef SVGUseElement_h 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define SVGUseElement_h 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/SVGNames.h" 25e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/DocumentResource.h" 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGAnimatedBoolean.h" 2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGAnimatedLength.h" 28591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "core/svg/SVGGraphicsElement.h" 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGURIReference.h" 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 333c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochclass DocumentResource; 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass SVGUseElement FINAL : public SVGGraphicsElement, 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) public SVGURIReference, 373c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch public DocumentResourceClient { 387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 40d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) static PassRefPtrWillBeRawPtr<SVGUseElement> create(Document&); 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~SVGUseElement(); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void invalidateShadowTree(); 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* rendererClipChild() const; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SVGAnimatedLength* x() const { return m_x.get(); } 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SVGAnimatedLength* y() const { return m_y.get(); } 4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SVGAnimatedLength* width() const { return m_width.get(); } 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SVGAnimatedLength* height() const { return m_height.get(); } 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void buildPendingResource() OVERRIDE; 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 54323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 55323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 57d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) explicit SVGUseElement(Document&); 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isStructurallyExternal() const OVERRIDE { return !hrefString().isNull() && isExternalURIReference(hrefString(), document()); } 6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void removedFrom(ContainerNode*) OVERRIDE; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isSupportedAttribute(const QualifiedName&); 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE; 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void svgAttributeChanged(const QualifiedName&) OVERRIDE; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE; 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void toClipPath(Path&) OVERRIDE; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearResourceReferences(); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void buildShadowAndInstanceTree(SVGElement* target); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void scheduleShadowTreeRecreation(); 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool haveLoadedRequiredResources() OVERRIDE { return !isStructurallyExternal() || m_haveFiredLoadEvent; } 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool selfHasRelativeLengths() const OVERRIDE; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Instance tree handling 805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool buildShadowTree(SVGElement* target, SVGElement* targetInstance, bool foundUse); 815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool hasCycleUseReferencing(SVGUseElement*, ContainerNode* targetInstance, SVGElement*& newTarget); 825d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool expandUseElementsInShadowTree(SVGElement*); 835d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void expandSymbolElementsInShadowTree(SVGElement*); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void transferUseAttributesToReplacedElement(SVGElement* from, SVGElement* to) const; 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void invalidateDependentShadowTrees(); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 893c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch bool resourceIsStillLoading(); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Document* externalDocument() const; 915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool instanceTreeIsLoading(SVGElement*); 9209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void notifyFinished(Resource*) OVERRIDE; 9310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch TreeScope* referencedScope() const; 943c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void setDocumentResource(ResourcePtr<DocumentResource>); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual Timer<SVGElement>* svgLoadEventTimer() OVERRIDE { return &m_svgLoadEventTimer; } 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtr<SVGAnimatedLength> m_x; 995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtr<SVGAnimatedLength> m_y; 1005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtr<SVGAnimatedLength> m_width; 1015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtr<SVGAnimatedLength> m_height; 1025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_haveFiredLoadEvent; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_needsShadowTreeRecreation; 1055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<SVGElement> m_targetElementInstance; 1063c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch ResourcePtr<DocumentResource> m_resource; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Timer<SVGElement> m_svgLoadEventTimer; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // SVGUseElement_h 113