/*
    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
                  2004, 2005 Rob Buis <buis@kde.org>
    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, GenerateConstructor, PODType=SVGTransform] SVGTransform { 
        // Transform Types
        const unsigned short SVG_TRANSFORM_UNKNOWN   = 0;
        const unsigned short SVG_TRANSFORM_MATRIX    = 1;
        const unsigned short SVG_TRANSFORM_TRANSLATE = 2;
        const unsigned short SVG_TRANSFORM_SCALE     = 3;
        const unsigned short SVG_TRANSFORM_ROTATE    = 4;
        const unsigned short SVG_TRANSFORM_SKEWX     = 5;
        const unsigned short SVG_TRANSFORM_SKEWY     = 6;

        readonly attribute unsigned short type;
        readonly attribute SVGMatrix matrix;
        readonly attribute float angle;

        void setMatrix(in SVGMatrix matrix);
        void setTranslate(in float tx, in float ty);
        void setScale(in float sx, in float sy);
        void setRotate(in float angle, in float cx, in float cy);
        void setSkewX(in float angle);
        void setSkewY(in float angle);
    };

}
