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