• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
3  * Copyright (C) 2004, 2005, 2006, 2007, 2010 Rob Buis <buis@kde.org>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20 
21 #ifndef SVGSVGElement_h
22 #define SVGSVGElement_h
23 
24 #if ENABLE(SVG)
25 #include "SVGAnimatedBoolean.h"
26 #include "SVGAnimatedLength.h"
27 #include "SVGAnimatedPreserveAspectRatio.h"
28 #include "SVGAnimatedRect.h"
29 #include "SVGExternalResourcesRequired.h"
30 #include "SVGFitToViewBox.h"
31 #include "SVGLangSpace.h"
32 #include "SVGStyledLocatableElement.h"
33 #include "SVGTests.h"
34 #include "SVGZoomAndPan.h"
35 
36 namespace WebCore {
37 
38 class SVGAngle;
39 class SVGMatrix;
40 class SVGTransform;
41 class SVGViewSpec;
42 class SVGViewElement;
43 class SMILTimeContainer;
44 
45 class SVGSVGElement : public SVGStyledLocatableElement,
46                       public SVGTests,
47                       public SVGLangSpace,
48                       public SVGExternalResourcesRequired,
49                       public SVGFitToViewBox,
50                       public SVGZoomAndPan {
51 public:
52     static PassRefPtr<SVGSVGElement> create(const QualifiedName&, Document*);
53 
isValid()54     virtual bool isValid() const { return SVGTests::isValid(); }
55 
56     // 'SVGSVGElement' functions
57     const AtomicString& contentScriptType() const;
58     void setContentScriptType(const AtomicString& type);
59 
60     const AtomicString& contentStyleType() const;
61     void setContentStyleType(const AtomicString& type);
62 
63     FloatRect viewport() const;
64 
setContainerSize(const IntSize & containerSize)65     void setContainerSize(const IntSize& containerSize) { m_containerSize = containerSize; m_hasSetContainerSize = true; }
containerSize()66     IntSize containerSize() const { return m_containerSize; }
hasSetContainerSize()67     bool hasSetContainerSize() const { return m_hasSetContainerSize; }
68     int relativeWidthValue() const;
69     int relativeHeightValue() const;
70 
71     float pixelUnitToMillimeterX() const;
72     float pixelUnitToMillimeterY() const;
73     float screenPixelToMillimeterX() const;
74     float screenPixelToMillimeterY() const;
75 
76     bool useCurrentView() const;
77     void setUseCurrentView(bool currentView);
78 
79     SVGViewSpec* currentView() const;
80 
81     float currentScale() const;
82     void setCurrentScale(float scale);
83 
currentTranslate()84     FloatPoint& currentTranslate() { return m_translation; }
85     void setCurrentTranslate(const FloatPoint&);
86 
87     // Only used from the bindings.
88     void updateCurrentTranslate();
89 
timeContainer()90     SMILTimeContainer* timeContainer() const { return m_timeContainer.get(); }
91 
92     void pauseAnimations();
93     void unpauseAnimations();
94     bool animationsPaused() const;
95 
96     float getCurrentTime() const;
97     void setCurrentTime(float seconds);
98 
99     unsigned suspendRedraw(unsigned maxWaitMilliseconds);
100     void unsuspendRedraw(unsigned suspendHandleId);
101     void unsuspendRedrawAll();
102     void forceRedraw();
103 
104     NodeList* getIntersectionList(const FloatRect&, SVGElement* referenceElement);
105     NodeList* getEnclosureList(const FloatRect&, SVGElement* referenceElement);
106     bool checkIntersection(SVGElement*, const FloatRect&);
107     bool checkEnclosure(SVGElement*, const FloatRect&);
108     void deselectAll();
109 
110     static float createSVGNumber();
111     static SVGLength createSVGLength();
112     static SVGAngle createSVGAngle();
113     static FloatPoint createSVGPoint();
114     static SVGMatrix createSVGMatrix();
115     static FloatRect createSVGRect();
116     static SVGTransform createSVGTransform();
117     static SVGTransform createSVGTransformFromMatrix(const SVGMatrix&);
118 
119     AffineTransform viewBoxToViewTransform(float viewWidth, float viewHeight) const;
120 
121     void inheritViewAttributes(SVGViewElement*);
122 
123     bool isOutermostSVG() const;
124 
125     Element* getElementById(const AtomicString&) const;
126 
127 protected:
128     virtual void willMoveToNewOwnerDocument();
129     virtual void didMoveToNewOwnerDocument();
130 
131 private:
132     SVGSVGElement(const QualifiedName&, Document*);
133     virtual ~SVGSVGElement();
134 
isSVG()135     virtual bool isSVG() const { return true; }
136 
137     virtual void parseMappedAttribute(Attribute*);
138 
rendererIsNeeded(RenderStyle * style)139     virtual bool rendererIsNeeded(RenderStyle* style) { return StyledElement::rendererIsNeeded(style); }
140     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
141 
142     virtual void insertedIntoDocument();
143     virtual void removedFromDocument();
144 
145     virtual void svgAttributeChanged(const QualifiedName&);
146     virtual void synchronizeProperty(const QualifiedName&);
147     virtual void fillAttributeToPropertyTypeMap();
148     virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
149 
150     virtual bool selfHasRelativeLengths() const;
151 
152     // Animated property declarations
153     DECLARE_ANIMATED_LENGTH(X, x)
154     DECLARE_ANIMATED_LENGTH(Y, y)
155     DECLARE_ANIMATED_LENGTH(Width, width)
156     DECLARE_ANIMATED_LENGTH(Height, height)
157 
158     // SVGExternalResourcesRequired
159     DECLARE_ANIMATED_BOOLEAN(ExternalResourcesRequired, externalResourcesRequired)
160 
161     // SVGFitToViewBox
162     DECLARE_ANIMATED_RECT(ViewBox, viewBox)
163     DECLARE_ANIMATED_PRESERVEASPECTRATIO(PreserveAspectRatio, preserveAspectRatio)
164 
165     virtual void documentWillBecomeInactive();
166     virtual void documentDidBecomeActive();
167 
168     virtual AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope) const;
169 
170     bool m_useCurrentView;
171     RefPtr<SMILTimeContainer> m_timeContainer;
172     FloatPoint m_translation;
173     float m_scale;
174     mutable OwnPtr<SVGViewSpec> m_viewSpec;
175     IntSize m_containerSize;
176     bool m_hasSetContainerSize;
177 };
178 
179 } // namespace WebCore
180 
181 #endif // ENABLE(SVG)
182 #endif
183