/*
 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 *
 * 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 COMPUTER, 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 COMPUTER, 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. 
 */

#import <WebCore/DOMSVGElement.h>
#import <WebCore/DOMSVGTests.h>
#import <WebCore/DOMSVGLangSpace.h>
#import <WebCore/DOMSVGExternalResourcesRequired.h>
#import <WebCore/DOMSVGStylable.h>
#import <WebCore/DOMSVGTransformable.h>
#import <WebCore/DOMSVGAnimatedPathData.h>

@class DOMSVGAnimatedNumber;
@class DOMSVGPathSegArcAbs;
@class DOMSVGPathSegArcRel;
@class DOMSVGPathSegClosePath;
@class DOMSVGPathSegCurvetoCubicAbs;
@class DOMSVGPathSegCurvetoCubicRel;
@class DOMSVGPathSegCurvetoCubicSmoothAbs;
@class DOMSVGPathSegCurvetoCubicSmoothRel;
@class DOMSVGPathSegCurvetoQuadraticAbs;
@class DOMSVGPathSegCurvetoQuadraticRel;
@class DOMSVGPathSegCurvetoQuadraticSmoothAbs;
@class DOMSVGPathSegCurvetoQuadraticSmoothRel;
@class DOMSVGPathSegLinetoAbs;
@class DOMSVGPathSegLinetoHorizontalAbs;
@class DOMSVGPathSegLinetoHorizontalRel;
@class DOMSVGPathSegLinetoRel;
@class DOMSVGPathSegLinetoVerticalAbs;
@class DOMSVGPathSegLinetoVerticalRel;
@class DOMSVGPathSegMovetoAbs;
@class DOMSVGPathSegMovetoRel;
@class DOMSVGPoint;

@interface DOMSVGPathElement : DOMSVGElement <DOMSVGTests, DOMSVGLangSpace, DOMSVGExternalResourcesRequired, DOMSVGStylable, DOMSVGTransformable, DOMSVGAnimatedPathData>
@property(readonly, retain) DOMSVGAnimatedNumber *pathLength;

- (float)getTotalLength;
- (DOMSVGPoint *)getPointAtLength:(float)distance;
- (unsigned)getPathSegAtLength:(float)distance;
- (DOMSVGPathSegClosePath *)createSVGPathSegClosePath;
- (DOMSVGPathSegMovetoAbs *)createSVGPathSegMovetoAbs:(float)x y:(float)y;
- (DOMSVGPathSegMovetoRel *)createSVGPathSegMovetoRel:(float)x y:(float)y;
- (DOMSVGPathSegLinetoAbs *)createSVGPathSegLinetoAbs:(float)x y:(float)y;
- (DOMSVGPathSegLinetoRel *)createSVGPathSegLinetoRel:(float)x y:(float)y;
- (DOMSVGPathSegCurvetoCubicAbs *)createSVGPathSegCurvetoCubicAbs:(float)x y:(float)y x1:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2;
- (DOMSVGPathSegCurvetoCubicRel *)createSVGPathSegCurvetoCubicRel:(float)x y:(float)y x1:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2;
- (DOMSVGPathSegCurvetoQuadraticAbs *)createSVGPathSegCurvetoQuadraticAbs:(float)x y:(float)y x1:(float)x1 y1:(float)y1;
- (DOMSVGPathSegCurvetoQuadraticRel *)createSVGPathSegCurvetoQuadraticRel:(float)x y:(float)y x1:(float)x1 y1:(float)y1;
- (DOMSVGPathSegArcAbs *)createSVGPathSegArcAbs:(float)x y:(float)y r1:(float)r1 r2:(float)r2 angle:(float)angle largeArcFlag:(BOOL)largeArcFlag sweepFlag:(BOOL)sweepFlag;
- (DOMSVGPathSegArcRel *)createSVGPathSegArcRel:(float)x y:(float)y r1:(float)r1 r2:(float)r2 angle:(float)angle largeArcFlag:(BOOL)largeArcFlag sweepFlag:(BOOL)sweepFlag;
- (DOMSVGPathSegLinetoHorizontalAbs *)createSVGPathSegLinetoHorizontalAbs:(float)x;
- (DOMSVGPathSegLinetoHorizontalRel *)createSVGPathSegLinetoHorizontalRel:(float)x;
- (DOMSVGPathSegLinetoVerticalAbs *)createSVGPathSegLinetoVerticalAbs:(float)y;
- (DOMSVGPathSegLinetoVerticalRel *)createSVGPathSegLinetoVerticalRel:(float)y;
- (DOMSVGPathSegCurvetoCubicSmoothAbs *)createSVGPathSegCurvetoCubicSmoothAbs:(float)x y:(float)y x2:(float)x2 y2:(float)y2;
- (DOMSVGPathSegCurvetoCubicSmoothRel *)createSVGPathSegCurvetoCubicSmoothRel:(float)x y:(float)y x2:(float)x2 y2:(float)y2;
- (DOMSVGPathSegCurvetoQuadraticSmoothAbs *)createSVGPathSegCurvetoQuadraticSmoothAbs:(float)x y:(float)y;
- (DOMSVGPathSegCurvetoQuadraticSmoothRel *)createSVGPathSegCurvetoQuadraticSmoothRel:(float)x y:(float)y;
@end
