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, 2007 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 SVGPathElement_h
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define SVGPathElement_h
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
25f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "SVGAnimatedBoolean.h"
26f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "SVGAnimatedNumber.h"
274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "SVGAnimatedPathSegListPropertyTearOff.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGExternalResourcesRequired.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGLangSpace.h"
304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "SVGPathByteStream.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGStyledTransformableElement.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGTests.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegArcAbs;
374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegArcRel;
384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegClosePath;
394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegLinetoAbs;
404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegLinetoRel;
414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegMovetoAbs;
424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegMovetoRel;
434576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegCurvetoCubicAbs;
444576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegCurvetoCubicRel;
454576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegLinetoVerticalAbs;
464576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegLinetoVerticalRel;
474576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegLinetoHorizontalAbs;
484576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegLinetoHorizontalRel;
494576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegCurvetoQuadraticAbs;
504576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegCurvetoQuadraticRel;
514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegCurvetoCubicSmoothAbs;
524576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegCurvetoCubicSmoothRel;
534576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegCurvetoQuadraticSmoothAbs;
544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathSegCurvetoQuadraticSmoothRel;
554576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass SVGPathElement : public SVGStyledTransformableElement,
574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                       public SVGTests,
584576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                       public SVGLangSpace,
594576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                       public SVGExternalResourcesRequired {
604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangpublic:
614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    static PassRefPtr<SVGPathElement> create(const QualifiedName&, Document*);
624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    float getTotalLength();
644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    FloatPoint getPointAtLength(float distance);
654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    unsigned long getPathSegAtLength(float distance);
664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegClosePath> createSVGPathSegClosePath(SVGPathSegRole role = PathSegUndefinedRole);
684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegMovetoAbs> createSVGPathSegMovetoAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegMovetoRel> createSVGPathSegMovetoRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegLinetoAbs> createSVGPathSegLinetoAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
714576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegLinetoRel> createSVGPathSegLinetoRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
724576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegCurvetoCubicAbs> createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole);
734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegCurvetoCubicRel> createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole);
744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegCurvetoQuadraticAbs> createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1, SVGPathSegRole role = PathSegUndefinedRole);
754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegCurvetoQuadraticRel> createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1, SVGPathSegRole role = PathSegUndefinedRole);
764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegArcAbs> createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role = PathSegUndefinedRole);
774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegArcRel> createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role = PathSegUndefinedRole);
784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegLinetoHorizontalAbs> createSVGPathSegLinetoHorizontalAbs(float x, SVGPathSegRole role = PathSegUndefinedRole);
794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegLinetoHorizontalRel> createSVGPathSegLinetoHorizontalRel(float x, SVGPathSegRole role = PathSegUndefinedRole);
804576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegLinetoVerticalAbs> createSVGPathSegLinetoVerticalAbs(float y, SVGPathSegRole role = PathSegUndefinedRole);
814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegLinetoVerticalRel> createSVGPathSegLinetoVerticalRel(float y, SVGPathSegRole role = PathSegUndefinedRole);
824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole);
834576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole);
844576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    // Used in the bindings only.
884576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    SVGPathSegListPropertyTearOff* pathSegList();
894576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    SVGPathSegListPropertyTearOff* animatedPathSegList();
904576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    SVGPathSegListPropertyTearOff* normalizedPathSegList();
914576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    SVGPathSegListPropertyTearOff* animatedNormalizedPathSegList();
924576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
934576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    SVGPathByteStream* pathByteStream() const { return m_pathByteStream.get(); }
944576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    SVGAnimatedProperty* animatablePathSegList() const { return m_animatablePathSegList.get(); }
954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
964576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    virtual void toPathData(Path&) const;
974576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    void pathSegListChanged(SVGPathSegRole);
984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
994576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangprivate:
1004576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    SVGPathElement(const QualifiedName&, Document*);
1014576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1024576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    virtual bool isValid() const { return SVGTests::isValid(); }
1034576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1044576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    virtual void parseMappedAttribute(Attribute*);
1054576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    virtual void synchronizeProperty(const QualifiedName&);
1064576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    virtual void svgAttributeChanged(const QualifiedName&);
1072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void fillAttributeToPropertyTypeMap();
1082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
1094576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    virtual bool supportsMarkers() const { return true; }
1104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // Animated property declarations
112f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_NUMBER(PathLength, pathLength)
1134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1144576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    // SVGExternalResourcesRequired
115f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DECLARE_ANIMATED_BOOLEAN(ExternalResourcesRequired, externalResourcesRequired)
1164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    void synchronizeD();
1184576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangprotected:
1204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    OwnPtr<SVGPathByteStream> m_pathByteStream;
1214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    mutable SVGSynchronizableAnimatedProperty<SVGPathSegList> m_pathSegList;
1224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    RefPtr<SVGAnimatedPathSegListPropertyTearOff> m_animatablePathSegList;
1234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang};
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG)
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
129