15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2010 Rob Buis <buis@kde.org>
4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Copyright (C) 2014 Google, Inc.
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef SVGSVGElement_h
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define SVGSVGElement_h
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGAnimatedBoolean.h"
2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGAnimatedLength.h"
2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGFitToViewBox.h"
28591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "core/svg/SVGGraphicsElement.h"
2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/svg/SVGLengthTearOff.h"
3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/svg/SVGPointTearOff.h"
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGZoomAndPan.h"
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class SVGMatrixTearOff;
36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class SVGAngleTearOff;
3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class SVGNumberTearOff;
38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class SVGTransformTearOff;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SVGViewSpec;
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SVGViewElement;
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SMILTimeContainer;
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
43591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass SVGSVGElement FINAL : public SVGGraphicsElement,
4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                            public SVGFitToViewBox,
4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                            public SVGZoomAndPan {
467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DEFINE_WRAPPERTYPEINFO();
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    DECLARE_NODE_FACTORY(SVGSVGElement);
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#if !ENABLE(OILPAN)
51591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    using SVGGraphicsElement::ref;
52591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    using SVGGraphicsElement::deref;
535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#endif
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // 'SVGSVGElement' functions
5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    PassRefPtr<SVGRectTearOff> viewport() const;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float pixelUnitToMillimeterX() const;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float pixelUnitToMillimeterY() const;
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float screenPixelToMillimeterX() const;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float screenPixelToMillimeterY() const;
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool useCurrentView() const { return m_useCurrentView; }
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SVGViewSpec* currentView();
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    Length intrinsicWidth() const;
6710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    Length intrinsicHeight() const;
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FloatSize currentViewportSize() const;
6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    FloatRect currentViewBoxRect() const;
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float currentScale() const;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setCurrentScale(float scale);
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    FloatPoint currentTranslate() { return m_translation->value(); }
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setCurrentTranslate(const FloatPoint&);
7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    PassRefPtr<SVGPointTearOff> currentTranslateFromJavascript();
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SMILTimeContainer* timeContainer() const { return m_timeContainer.get(); }
7902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void pauseAnimations();
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void unpauseAnimations();
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool animationsPaused() const;
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float getCurrentTime() const;
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setCurrentTime(float seconds);
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // Stubs for the deprecated 'redraw' interface.
8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    unsigned suspendRedraw(unsigned) { return 1; }
8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void unsuspendRedraw(unsigned) { }
9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void unsuspendRedrawAll() { }
9109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void forceRedraw() { }
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    PassRefPtrWillBeRawPtr<StaticNodeList> getIntersectionList(PassRefPtr<SVGRectTearOff>, SVGElement* referenceElement) const;
9476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    PassRefPtrWillBeRawPtr<StaticNodeList> getEnclosureList(PassRefPtr<SVGRectTearOff>, SVGElement* referenceElement) const;
9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool checkIntersection(SVGElement*, PassRefPtr<SVGRectTearOff>) const;
9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool checkEnclosure(SVGElement*, PassRefPtr<SVGRectTearOff>) const;
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void deselectAll();
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static PassRefPtr<SVGNumberTearOff> createSVGNumber();
10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static PassRefPtr<SVGLengthTearOff> createSVGLength();
101d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static PassRefPtr<SVGAngleTearOff> createSVGAngle();
10209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static PassRefPtr<SVGPointTearOff> createSVGPoint();
103d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static PassRefPtr<SVGMatrixTearOff> createSVGMatrix();
10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static PassRefPtr<SVGRectTearOff> createSVGRect();
105d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static PassRefPtr<SVGTransformTearOff> createSVGTransform();
106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static PassRefPtr<SVGTransformTearOff> createSVGTransformFromMatrix(PassRefPtr<SVGMatrixTearOff>);
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AffineTransform viewBoxToViewTransform(float viewWidth, float viewHeight) const;
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setupInitialView(const String& fragmentIdentifier, Element* anchorNode);
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    bool hasIntrinsicWidth() const;
11310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    bool hasIntrinsicHeight() const;
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    SVGAnimatedLength* x() const { return m_x.get(); }
11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    SVGAnimatedLength* y() const { return m_y.get(); }
11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    SVGAnimatedLength* width() const { return m_width.get(); }
11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    SVGAnimatedLength* height() const { return m_height.get(); }
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
120d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual void trace(Visitor*) OVERRIDE;
121d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
12351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    explicit SVGSVGElement(Document&);
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~SVGSVGElement();
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
12710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    virtual bool isPresentationAttribute(const QualifiedName&) const OVERRIDE;
12810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*) OVERRIDE;
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1308abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
13109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE;
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void removedFrom(ContainerNode*) OVERRIDE;
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void svgAttributeChanged(const QualifiedName&) OVERRIDE;
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool selfHasRelativeLengths() const OVERRIDE;
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void inheritViewAttributes(SVGViewElement*);
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void updateCurrentTranslate();
14309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
144323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    virtual void finishParsingChildren() OVERRIDE;
145323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
146d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    enum CheckIntersectionOrEnclosure {
147d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        CheckIntersection,
148d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        CheckEnclosure
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool checkIntersectionOrEnclosure(const SVGElement&, const FloatRect&, CheckIntersectionOrEnclosure) const;
15276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    PassRefPtrWillBeRawPtr<StaticNodeList> collectIntersectionOrEnclosureList(const FloatRect&, SVGElement*, CheckIntersectionOrEnclosure) const;
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    RefPtr<SVGAnimatedLength> m_x;
15509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    RefPtr<SVGAnimatedLength> m_y;
15609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    RefPtr<SVGAnimatedLength> m_width;
15709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    RefPtr<SVGAnimatedLength> m_height;
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual AffineTransform localCoordinateSpaceTransform(SVGElement::CTMScope) const OVERRIDE;
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_useCurrentView;
162d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<SMILTimeContainer> m_timeContainer;
16309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    RefPtr<SVGPoint> m_translation;
164d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<SVGViewSpec> m_viewSpec;
16509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
16609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    friend class SVGCurrentTranslateTearOff;
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
169c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // SVGSVGElement_h
172