/*
 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 * Copyright (C) 2006 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

module svg {

    interface [
        Conditional=SVG
    ] SVGPathElement : SVGElement,
                                                 SVGTests,
                                                 SVGLangSpace,
                                                 SVGExternalResourcesRequired,
                                                 SVGStylable,
                                                 SVGTransformable {
        readonly attribute SVGAnimatedNumber pathLength;

        float getTotalLength();
        SVGPoint getPointAtLength(in [Optional=DefaultIsUndefined] float distance);
        unsigned long getPathSegAtLength(in [Optional=DefaultIsUndefined] float distance);

        SVGPathSegClosePath createSVGPathSegClosePath();

        SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(in [Optional=DefaultIsUndefined] float x, 
                                                      in [Optional=DefaultIsUndefined] float y);
        SVGPathSegMovetoRel createSVGPathSegMovetoRel(in [Optional=DefaultIsUndefined] float x, 
                                                      in [Optional=DefaultIsUndefined] float y);

        SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(in [Optional=DefaultIsUndefined] float x, 
                                                      in [Optional=DefaultIsUndefined] float y);
        SVGPathSegLinetoRel createSVGPathSegLinetoRel(in [Optional=DefaultIsUndefined] float x, 
                                                      in [Optional=DefaultIsUndefined] float y);

        SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(in [Optional=DefaultIsUndefined] float x, 
                                                                  in [Optional=DefaultIsUndefined] float y, 
                                                                  in [Optional=DefaultIsUndefined] float x1, 
                                                                  in [Optional=DefaultIsUndefined] float y1, 
                                                                  in [Optional=DefaultIsUndefined] float x2, 
                                                                  in [Optional=DefaultIsUndefined] float y2);
        SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(in [Optional=DefaultIsUndefined] float x, 
                                                                  in [Optional=DefaultIsUndefined] float y, 
                                                                  in [Optional=DefaultIsUndefined] float x1, 
                                                                  in [Optional=DefaultIsUndefined] float y1, 
                                                                  in [Optional=DefaultIsUndefined] float x2, 
                                                                  in [Optional=DefaultIsUndefined] float y2);

        SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(in [Optional=DefaultIsUndefined] float x, 
                                                                          in [Optional=DefaultIsUndefined] float y, 
                                                                          in [Optional=DefaultIsUndefined] float x1, 
                                                                          in [Optional=DefaultIsUndefined] float y1);
        SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(in [Optional=DefaultIsUndefined] float x, 
                                                                          in [Optional=DefaultIsUndefined] float y, 
                                                                          in [Optional=DefaultIsUndefined] float x1, 
                                                                          in [Optional=DefaultIsUndefined] float y1);

        SVGPathSegArcAbs createSVGPathSegArcAbs(in [Optional=DefaultIsUndefined] float x, 
                                                in [Optional=DefaultIsUndefined] float y, 
                                                in [Optional=DefaultIsUndefined] float r1, 
                                                in [Optional=DefaultIsUndefined] float r2, 
                                                in [Optional=DefaultIsUndefined] float angle, 
                                                in [Optional=DefaultIsUndefined] boolean largeArcFlag, 
                                                in [Optional=DefaultIsUndefined] boolean sweepFlag);
        SVGPathSegArcRel createSVGPathSegArcRel(in [Optional=DefaultIsUndefined] float x, 
                                                in [Optional=DefaultIsUndefined] float y, 
                                                in [Optional=DefaultIsUndefined] float r1, 
                                                in [Optional=DefaultIsUndefined] float r2, 
                                                in [Optional=DefaultIsUndefined] float angle, 
                                                in [Optional=DefaultIsUndefined] boolean largeArcFlag, 
                                                in [Optional=DefaultIsUndefined] boolean sweepFlag);

        SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(in [Optional=DefaultIsUndefined] float x);
        SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(in [Optional=DefaultIsUndefined] float x);

        SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(in [Optional=DefaultIsUndefined] float y);
        SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(in [Optional=DefaultIsUndefined] float y);

        SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(in [Optional=DefaultIsUndefined] float x, 
                                                                              in [Optional=DefaultIsUndefined] float y, 
                                                                              in [Optional=DefaultIsUndefined] float x2, 
                                                                              in [Optional=DefaultIsUndefined] float y2);
        SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(in [Optional=DefaultIsUndefined] float x, 
                                                                              in [Optional=DefaultIsUndefined] float y, 
                                                                              in [Optional=DefaultIsUndefined] float x2, 
                                                                              in [Optional=DefaultIsUndefined] float y2);

        SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(in [Optional=DefaultIsUndefined] float x, 
                                                                                      in [Optional=DefaultIsUndefined] float y);
        SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(in [Optional=DefaultIsUndefined] float x, 
                                                                                      in [Optional=DefaultIsUndefined] float y);

        readonly attribute SVGPathSegList pathSegList;
        readonly attribute SVGPathSegList normalizedPathSegList;
        readonly attribute SVGPathSegList animatedPathSegList;
        readonly attribute SVGPathSegList animatedNormalizedPathSegList;
    };

}
