/*
    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
    Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
    Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
    Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.

    This file is part of the KDE project

    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 {

    interface [Conditional=SVG, PODType=AffineTransform] SVGMatrix {
        // FIXME: these attributes should all be floats but since we implement
        // AffineTransform with doubles setting these as doubles makes more sense.
        attribute double a;
        attribute double b;
        attribute double c;
        attribute double d;
        attribute double e;
        attribute double f;

        [Custom] SVGMatrix multiply(in SVGMatrix secondMatrix);
        [Custom] SVGMatrix inverse()
            raises(SVGException);
        [Custom] SVGMatrix translate(in float x, in float y);
        [Custom] SVGMatrix scale(in float scaleFactor);
        [Custom] SVGMatrix scaleNonUniform(in float scaleFactorX, in float scaleFactorY);
        [Custom] SVGMatrix rotate(in float angle);
        [Custom] SVGMatrix rotateFromVector(in float x, in float y)
            raises(SVGException);
        [Custom] SVGMatrix flipX();
        [Custom] SVGMatrix flipY();
        [Custom] SVGMatrix skewX(in float angle);
        [Custom] SVGMatrix skewY(in float angle);
    };

}
