/*
 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
 * Copyright (C) 2004, 2005, 2010 Rob Buis <buis@kde.org>
 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 * Copyright (C) 2006 Apple Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

module svg {

    // TODO: no css::ViewCSS available!
    // TODO: Fix SVGSVGElement inheritance (css::DocumentCSS)! 
    // TODO: no events::DocumentEvent available!
    interface [
        Conditional=SVG
    ] SVGSVGElement : SVGElement,
                                                SVGTests,
                                                SVGLangSpace,
                                                SVGExternalResourcesRequired,
                                                SVGStylable,
                                                SVGLocatable,
                                                SVGFitToViewBox,
                                                SVGZoomAndPan {
        readonly attribute SVGAnimatedLength x;
        readonly attribute SVGAnimatedLength y;
        readonly attribute SVGAnimatedLength width;
        readonly attribute SVGAnimatedLength height;
                 attribute DOMString contentScriptType
                     /*setter raises(DOMException)*/;
                 attribute DOMString contentStyleType
                     /*setter raises(DOMException)*/;
        readonly attribute SVGRect viewport;
        readonly attribute float pixelUnitToMillimeterX;
        readonly attribute float pixelUnitToMillimeterY;
        readonly attribute float screenPixelToMillimeterX;
        readonly attribute float screenPixelToMillimeterY;
                 attribute boolean useCurrentView
                     /*setter raises(DOMException)*/;
        // TODO    readonly attribute SVGViewSpec currentView;
                 attribute float currentScale
                     /*setter raises(DOMException)*/;
        readonly attribute SVGPoint currentTranslate;

        unsigned long suspendRedraw(in [Optional=CallWithDefaultValue] unsigned long maxWaitMilliseconds);
        void unsuspendRedraw(in [Optional=CallWithDefaultValue] unsigned long suspendHandleId);
        void unsuspendRedrawAll();
        void forceRedraw();
        void pauseAnimations();
        void unpauseAnimations();
        boolean animationsPaused();
        float getCurrentTime();
        void setCurrentTime(in [Optional=CallWithDefaultValue] float seconds);
        NodeList getIntersectionList(in [Optional=CallWithDefaultValue] SVGRect rect, 
                                     in [Optional=CallWithDefaultValue] SVGElement referenceElement);
        NodeList getEnclosureList(in [Optional=CallWithDefaultValue] SVGRect rect, 
                                  in [Optional=CallWithDefaultValue] SVGElement referenceElement);
        boolean checkIntersection(in [Optional=CallWithDefaultValue] SVGElement element, 
                                  in [Optional=CallWithDefaultValue] SVGRect rect);
        boolean checkEnclosure(in [Optional=CallWithDefaultValue] SVGElement element, 
                               in [Optional=CallWithDefaultValue] SVGRect rect);
        void deselectAll();

        SVGNumber createSVGNumber();
        SVGLength createSVGLength();
        SVGAngle createSVGAngle();
        SVGPoint createSVGPoint();
        SVGMatrix createSVGMatrix();
        SVGRect createSVGRect();
        SVGTransform createSVGTransform();
        SVGTransform createSVGTransformFromMatrix(in [Optional=CallWithDefaultValue] SVGMatrix matrix);
        Element getElementById(in [Optional=CallWithDefaultValue] DOMString elementId);
    };

}
