18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
3dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005, 2006, 2007, 2010 Rob Buis <buis@kde.org>
4dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
5dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is free software; you can redistribute it and/or
6dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * modify it under the terms of the GNU Library General Public
7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * License as published by the Free Software Foundation; either
8dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * version 2 of the License, or (at your option) any later version.
9dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
10dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is distributed in the hope that it will be useful,
11dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
12dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Library General Public License for more details.
14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
15dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * You should have received a copy of the GNU Library General Public License
16dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Boston, MA 02110-1301, USA.
19dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch */
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef SVGSVGElement_h
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define SVGSVGElement_h
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
25f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "SVGAnimatedBoolean.h"
26e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "SVGAnimatedLength.h"
27f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "SVGAnimatedPreserveAspectRatio.h"
28f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "SVGAnimatedRect.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGExternalResourcesRequired.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGFitToViewBox.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGLangSpace.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGStyledLocatableElement.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGTests.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGZoomAndPan.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore {
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
38f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGAngle;
39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGMatrix;
40f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGTransform;
41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGViewSpec;
42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGViewElement;
43f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SMILTimeContainer;
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
45f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGSVGElement : public SVGStyledLocatableElement,
46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                      public SVGTests,
47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                      public SVGLangSpace,
48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                      public SVGExternalResourcesRequired,
49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                      public SVGFitToViewBox,
50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                      public SVGZoomAndPan {
51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochpublic:
52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static PassRefPtr<SVGSVGElement> create(const QualifiedName&, Document*);
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual bool isValid() const { return SVGTests::isValid(); }
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // 'SVGSVGElement' functions
57f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    const AtomicString& contentScriptType() const;
58f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setContentScriptType(const AtomicString& type);
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    const AtomicString& contentStyleType() const;
61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setContentStyleType(const AtomicString& type);
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    FloatRect viewport() const;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setContainerSize(const IntSize& containerSize) { m_containerSize = containerSize; m_hasSetContainerSize = true; }
66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    IntSize containerSize() const { return m_containerSize; }
67f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool hasSetContainerSize() const { return m_hasSetContainerSize; }
68f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    int relativeWidthValue() const;
69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    int relativeHeightValue() const;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
71f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    float pixelUnitToMillimeterX() const;
72f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    float pixelUnitToMillimeterY() const;
73f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    float screenPixelToMillimeterX() const;
74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    float screenPixelToMillimeterY() const;
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
76f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool useCurrentView() const;
77f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setUseCurrentView(bool currentView);
7828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
79f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SVGViewSpec* currentView() const;
8028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    float currentScale() const;
82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setCurrentScale(float scale);
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
84f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    FloatPoint& currentTranslate() { return m_translation; }
85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setCurrentTranslate(const FloatPoint&);
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
87f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // Only used from the bindings.
88f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void updateCurrentTranslate();
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
90f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SMILTimeContainer* timeContainer() const { return m_timeContainer.get(); }
91f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
92f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void pauseAnimations();
93f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void unpauseAnimations();
94f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool animationsPaused() const;
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
96f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    float getCurrentTime() const;
97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setCurrentTime(float seconds);
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
99f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    unsigned suspendRedraw(unsigned maxWaitMilliseconds);
100f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void unsuspendRedraw(unsigned suspendHandleId);
101f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void unsuspendRedrawAll();
102f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void forceRedraw();
1035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
104f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    NodeList* getIntersectionList(const FloatRect&, SVGElement* referenceElement);
105f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    NodeList* getEnclosureList(const FloatRect&, SVGElement* referenceElement);
106f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool checkIntersection(SVGElement*, const FloatRect&);
107f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool checkEnclosure(SVGElement*, const FloatRect&);
108f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void deselectAll();
1095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
110f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static float createSVGNumber();
111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static SVGLength createSVGLength();
112f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static SVGAngle createSVGAngle();
113f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static FloatPoint createSVGPoint();
114f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static SVGMatrix createSVGMatrix();
115f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static FloatRect createSVGRect();
116f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static SVGTransform createSVGTransform();
117f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static SVGTransform createSVGTransformFromMatrix(const SVGMatrix&);
1185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
119f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    AffineTransform viewBoxToViewTransform(float viewWidth, float viewHeight) const;
1205ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
121f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void inheritViewAttributes(SVGViewElement*);
1226b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
123f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool isOutermostSVG() const;
1245ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
125f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    Element* getElementById(const AtomicString&) const;
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
127f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochprotected:
128f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void willMoveToNewOwnerDocument();
129f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void didMoveToNewOwnerDocument();
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
131f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochprivate:
132f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SVGSVGElement(const QualifiedName&, Document*);
133f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual ~SVGSVGElement();
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
135f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual bool isSVG() const { return true; }
136f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
137f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void parseMappedAttribute(Attribute*);
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
139f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
140f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
141ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
142f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void insertedIntoDocument();
143f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void removedFromDocument();
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
145f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void svgAttributeChanged(const QualifiedName&);
146f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void synchronizeProperty(const QualifiedName&);
1472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void fillAttributeToPropertyTypeMap();
1482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
149cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual bool selfHasRelativeLengths() const;
151f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
152f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // Animated property declarations
153f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_LENGTH(X, x)
154f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_LENGTH(Y, y)
155f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_LENGTH(Width, width)
156f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_LENGTH(Height, height)
157f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
158f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // SVGExternalResourcesRequired
159f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_BOOLEAN(ExternalResourcesRequired, externalResourcesRequired)
160f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
161f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // SVGFitToViewBox
162f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_RECT(ViewBox, viewBox)
163f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_PRESERVEASPECTRATIO(PreserveAspectRatio, preserveAspectRatio)
164cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
165f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void documentWillBecomeInactive();
166f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void documentDidBecomeActive();
167f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
168f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope) const;
169f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
170f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool m_useCurrentView;
171f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    RefPtr<SMILTimeContainer> m_timeContainer;
172f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    FloatPoint m_translation;
173f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    float m_scale;
174f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    mutable OwnPtr<SVGViewSpec> m_viewSpec;
175f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    IntSize m_containerSize;
176f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool m_hasSetContainerSize;
177f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch};
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG)
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
183