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