diff options
Diffstat (limited to 'WebCore/svg/SVGPathElement.h')
-rw-r--r-- | WebCore/svg/SVGPathElement.h | 170 |
1 files changed, 89 insertions, 81 deletions
diff --git a/WebCore/svg/SVGPathElement.h b/WebCore/svg/SVGPathElement.h index 91d55b1..ffdd32e 100644 --- a/WebCore/svg/SVGPathElement.h +++ b/WebCore/svg/SVGPathElement.h @@ -22,94 +22,102 @@ #define SVGPathElement_h #if ENABLE(SVG) -#include "SVGAnimatedPathData.h" -#include "SVGAnimatedPropertyMacros.h" +#include "SVGAnimatedNumber.h" +#include "SVGAnimatedPathSegListPropertyTearOff.h" #include "SVGExternalResourcesRequired.h" #include "SVGLangSpace.h" +#include "SVGPathByteStream.h" #include "SVGStyledTransformableElement.h" #include "SVGTests.h" namespace WebCore { - class SVGPathSeg; - class SVGPathSegArcAbs; - class SVGPathSegArcRel; - class SVGPathSegClosePath; - class SVGPathSegLinetoAbs; - class SVGPathSegLinetoRel; - class SVGPathSegMovetoAbs; - class SVGPathSegMovetoRel; - class SVGPathSegCurvetoCubicAbs; - class SVGPathSegCurvetoCubicRel; - class SVGPathSegLinetoVerticalAbs; - class SVGPathSegLinetoVerticalRel; - class SVGPathSegLinetoHorizontalAbs; - class SVGPathSegLinetoHorizontalRel; - class SVGPathSegCurvetoQuadraticAbs; - class SVGPathSegCurvetoQuadraticRel; - class SVGPathSegCurvetoCubicSmoothAbs; - class SVGPathSegCurvetoCubicSmoothRel; - class SVGPathSegCurvetoQuadraticSmoothAbs; - class SVGPathSegCurvetoQuadraticSmoothRel; - - class SVGPathElement : public SVGStyledTransformableElement, - public SVGTests, - public SVGLangSpace, - public SVGExternalResourcesRequired, - public SVGAnimatedPathData { - public: - static PassRefPtr<SVGPathElement> create(const QualifiedName&, Document*); - - float getTotalLength(); - FloatPoint getPointAtLength(float distance); - unsigned long getPathSegAtLength(float distance); - - static PassRefPtr<SVGPathSegClosePath> createSVGPathSegClosePath(); - static PassRefPtr<SVGPathSegMovetoAbs> createSVGPathSegMovetoAbs(float x, float y); - static PassRefPtr<SVGPathSegMovetoRel> createSVGPathSegMovetoRel(float x, float y); - static PassRefPtr<SVGPathSegLinetoAbs> createSVGPathSegLinetoAbs(float x, float y); - static PassRefPtr<SVGPathSegLinetoRel> createSVGPathSegLinetoRel(float x, float y); - static PassRefPtr<SVGPathSegCurvetoCubicAbs> createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2); - static PassRefPtr<SVGPathSegCurvetoCubicRel> createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2); - static PassRefPtr<SVGPathSegCurvetoQuadraticAbs> createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1); - static PassRefPtr<SVGPathSegCurvetoQuadraticRel> createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1); - static PassRefPtr<SVGPathSegArcAbs> createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag); - static PassRefPtr<SVGPathSegArcRel> createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag); - static PassRefPtr<SVGPathSegLinetoHorizontalAbs> createSVGPathSegLinetoHorizontalAbs(float x); - static PassRefPtr<SVGPathSegLinetoHorizontalRel> createSVGPathSegLinetoHorizontalRel(float x); - static PassRefPtr<SVGPathSegLinetoVerticalAbs> createSVGPathSegLinetoVerticalAbs(float y); - static PassRefPtr<SVGPathSegLinetoVerticalRel> createSVGPathSegLinetoVerticalRel(float y); - static PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2); - static PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2); - static PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y); - static PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y); - - // Derived from: 'SVGAnimatedPathData' - virtual SVGPathSegList* pathSegList() const; - virtual SVGPathSegList* normalizedPathSegList() const; - virtual SVGPathSegList* animatedPathSegList() const; - virtual SVGPathSegList* animatedNormalizedPathSegList() const; - - virtual void toPathData(Path&) const; - - private: - SVGPathElement(const QualifiedName&, Document*); - - virtual bool isValid() const { return SVGTests::isValid(); } - - virtual void parseMappedAttribute(Attribute*); - virtual void svgAttributeChanged(const QualifiedName&); - virtual void synchronizeProperty(const QualifiedName&); - - virtual bool supportsMarkers() const { return true; } - - mutable RefPtr<SVGPathSegList> m_pathSegList; - - DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPathElement, SVGNames::pathLengthAttr, float, PathLength, pathLength) - - // SVGExternalResourcesRequired - DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPathElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired) - }; +class SVGPathSegArcAbs; +class SVGPathSegArcRel; +class SVGPathSegClosePath; +class SVGPathSegLinetoAbs; +class SVGPathSegLinetoRel; +class SVGPathSegMovetoAbs; +class SVGPathSegMovetoRel; +class SVGPathSegCurvetoCubicAbs; +class SVGPathSegCurvetoCubicRel; +class SVGPathSegLinetoVerticalAbs; +class SVGPathSegLinetoVerticalRel; +class SVGPathSegLinetoHorizontalAbs; +class SVGPathSegLinetoHorizontalRel; +class SVGPathSegCurvetoQuadraticAbs; +class SVGPathSegCurvetoQuadraticRel; +class SVGPathSegCurvetoCubicSmoothAbs; +class SVGPathSegCurvetoCubicSmoothRel; +class SVGPathSegCurvetoQuadraticSmoothAbs; +class SVGPathSegCurvetoQuadraticSmoothRel; + +class SVGPathElement : public SVGStyledTransformableElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired { +public: + static PassRefPtr<SVGPathElement> create(const QualifiedName&, Document*); + + float getTotalLength(); + FloatPoint getPointAtLength(float distance); + unsigned long getPathSegAtLength(float distance); + + PassRefPtr<SVGPathSegClosePath> createSVGPathSegClosePath(SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegMovetoAbs> createSVGPathSegMovetoAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegMovetoRel> createSVGPathSegMovetoRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegLinetoAbs> createSVGPathSegLinetoAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegLinetoRel> createSVGPathSegLinetoRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegCurvetoCubicAbs> createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegCurvetoCubicRel> createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegCurvetoQuadraticAbs> createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegCurvetoQuadraticRel> createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegArcAbs> createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegArcRel> createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegLinetoHorizontalAbs> createSVGPathSegLinetoHorizontalAbs(float x, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegLinetoHorizontalRel> createSVGPathSegLinetoHorizontalRel(float x, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegLinetoVerticalAbs> createSVGPathSegLinetoVerticalAbs(float y, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegLinetoVerticalRel> createSVGPathSegLinetoVerticalRel(float y, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole); + PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole); + + // Used in the bindings only. + SVGPathSegListPropertyTearOff* pathSegList(); + SVGPathSegListPropertyTearOff* animatedPathSegList(); + SVGPathSegListPropertyTearOff* normalizedPathSegList(); + SVGPathSegListPropertyTearOff* animatedNormalizedPathSegList(); + + SVGPathByteStream* pathByteStream() const { return m_pathByteStream.get(); } + SVGAnimatedProperty* animatablePathSegList() const { return m_animatablePathSegList.get(); } + + virtual void toPathData(Path&) const; + void pathSegListChanged(SVGPathSegRole); + +private: + SVGPathElement(const QualifiedName&, Document*); + + virtual bool isValid() const { return SVGTests::isValid(); } + + virtual void parseMappedAttribute(Attribute*); + virtual void synchronizeProperty(const QualifiedName&); + virtual void svgAttributeChanged(const QualifiedName&); + virtual bool supportsMarkers() const { return true; } + + // Animated property declarations + DECLARE_ANIMATED_NUMBER(PathLength, pathLength) + + // SVGExternalResourcesRequired + DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPathElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired) + + void synchronizeD(); + +protected: + OwnPtr<SVGPathByteStream> m_pathByteStream; + mutable SVGSynchronizableAnimatedProperty<SVGPathSegList> m_pathSegList; + RefPtr<SVGAnimatedPathSegListPropertyTearOff> m_animatablePathSegList; +}; } // namespace WebCore |