18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann <zimmermann@kde.org> 3dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> 4dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2009 Apple Inc. All rights reserved. 5dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 6dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is free software; you can redistribute it and/or 7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * modify it under the terms of the GNU Library General Public 8dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * License as published by the Free Software Foundation; either 9dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * version 2 of the License, or (at your option) any later version. 10dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 11dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is distributed in the hope that it will be useful, 12dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 13dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Library General Public License for more details. 15dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 16dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * You should have received a copy of the GNU Library General Public License 17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * along with this library; see the file COPYING.LIB. If not, write to 18dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Boston, MA 02110-1301, USA. 20dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch */ 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef SVGElement_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define SVGElement_h 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG) 26e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "SVGLocatable.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "StyledElement.h" 282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <wtf/HashMap.h> 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 322fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockenum AnimatedAttributeType { 332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedAngle, 342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedBoolean, 352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedColor, 362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedEnumeration, 372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedInteger, 382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedLength, 392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedLengthList, 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedNumber, 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedNumberList, 422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedNumberOptionalNumber, 432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedPath, 442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedPoints, 452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedPreserveAspectRatio, 462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedRect, 472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedString, 482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedTransformList, 492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedUnknown 502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}; 512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 522fc2651226baac27029e38c9d6ef883fa32084dbSteve Blocktypedef HashMap<QualifiedName, AnimatedAttributeType> AttributeToPropertyTypeMap; 532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass CSSCursorImageValue; 55f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass Document; 56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGCursorElement; 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass SVGDocumentExtensions; 58f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGElementInstance; 59f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGElementRareData; 60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGSVGElement; 61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass AffineTransform; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGElement : public StyledElement { 64f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochpublic: 65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static PassRefPtr<SVGElement> create(const QualifiedName&, Document*); 66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual ~SVGElement(); 67231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 68f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch String xmlbase() const; 69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setXmlbase(const String&, ExceptionCode&); 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 71f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGSVGElement* ownerSVGElement() const; 72f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGElement* viewportElement() const; 73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGDocumentExtensions* accessDocumentSVGExtensions() const; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 76f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isStyled() const { return false; } 77f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isStyledTransformable() const { return false; } 78f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isStyledLocatable() const { return false; } 79f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isSVG() const { return false; } 80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isFilterEffect() const { return false; } 81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isGradientStop() const { return false; } 82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isTextContent() const { return false; } 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 84f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // For SVGTests 85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isValid() const { return true; } 86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 87f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void svgAttributeChanged(const QualifiedName&) { } 88f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void synchronizeProperty(const QualifiedName&) { } 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap(); 912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block AnimatedAttributeType animatedPropertyTypeForAttribute(const QualifiedName&); 922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void fillAttributeToPropertyTypeMap() { } 942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 95f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void sendSVGLoadEventIfPossible(bool sendParentLoadEvents = false); 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual AffineTransform* supplementalTransform() { return 0; } 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 99f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void invalidateSVGAttributes() { clearAreSVGAttributesValid(); } 100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 101f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch const HashSet<SVGElementInstance*>& instancesForElement() const; 102e14391e94c850b8bd03680c23b38978db68687a8John Reck 103f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool boundingBox(FloatRect&, SVGLocatable::StyleUpdateStrategy = SVGLocatable::AllowStyleUpdate) const; 104cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 105f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setCursorElement(SVGCursorElement*); 106f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void cursorElementRemoved(); 107f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setCursorImageValue(CSSCursorImageValue*); 108cad810f21b803229eb11403f9209855525a25d57Steve Block void cursorImageValueRemoved(); 10921939df44de1705786c545cd1bf519d47250322dBen Murdoch 110f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void updateAnimatedSVGAttribute(const QualifiedName&) const; 111231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 112f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochprotected: 113f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGElement(const QualifiedName&, Document*); 1145ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 115f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void parseMappedAttribute(Attribute*); 116d0825bca7fe65beaee391d30da42e937db621564Steve Block 117f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void finishParsingChildren(); 118f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void insertedIntoDocument(); 119f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void attributeChanged(Attribute*, bool preserveDecls = false); 120f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool childShouldCreateRenderer(Node*) const; 12181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 12281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void removedFromDocument(); 123231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 124f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGElementRareData* rareSVGData() const; 125f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SVGElementRareData* ensureRareSVGData(); 126231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 127f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochprivate: 128f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch friend class SVGElementInstance; 1295ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 130f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool rendererIsNeeded(RenderStyle*) { return false; } 131231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 132f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isSupported(StringImpl* feature, StringImpl* version) const; 133231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 134f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool needsPendingResourceHandling() const { return true; } 135f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void buildPendingResource() { } 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 137f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void mapInstanceToElement(SVGElementInstance*); 138f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void removeInstanceMapping(SVGElementInstance*); 139f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 140f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool haveLoadedRequiredResources(); 141f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}; 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 143d0825bca7fe65beaee391d30da42e937db621564Steve Block} 144d0825bca7fe65beaee391d30da42e937db621564Steve Block 145d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 146d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 147