// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// http://dev.w3.org/fxtf/geometry/#DOMMatrix

[
    Constructor,
    Constructor(DOMMatrixReadOnly other),
    // FIXME: Should implement more constructors (See: crbug.com/388780)
    // FIXME: Exposed=(Window,Worker)
    RuntimeEnabled=GeometryInterfaces,
] interface DOMMatrix : DOMMatrixReadOnly {
    [RaisesException, NewObject] static DOMMatrix fromFloat32Array(Float32Array array32);
    [RaisesException, NewObject] static DOMMatrix fromFloat64Array(Float64Array array64);
    [RaisesException, NewObject] static DOMMatrix fromMatrix(optional DOMMatrixInit other);

    // These attributes are simple aliases for certain elements of the 4x4 matrix
    inherit attribute unrestricted double a;
    inherit attribute unrestricted double b;
    inherit attribute unrestricted double c;
    inherit attribute unrestricted double d;
    inherit attribute unrestricted double e;
    inherit attribute unrestricted double f;

    inherit attribute unrestricted double m11;
    inherit attribute unrestricted double m12;
    inherit attribute unrestricted double m13;
    inherit attribute unrestricted double m14;
    inherit attribute unrestricted double m21;
    inherit attribute unrestricted double m22;
    inherit attribute unrestricted double m23;
    inherit attribute unrestricted double m24;
    inherit attribute unrestricted double m31;
    inherit attribute unrestricted double m32;
    inherit attribute unrestricted double m33;
    inherit attribute unrestricted double m34;
    inherit attribute unrestricted double m41;
    inherit attribute unrestricted double m42;
    inherit attribute unrestricted double m43;
    inherit attribute unrestricted double m44;

    // TODO(zino): Should implement rotateSelf() method (See: crbug.com/645878)
    // TODO(zino): Should implement rotateFromVectorSelf() method (See: crbug.com/645882)
    // TODO(zino): Should implement rotateAxisAngleSelf() method (See: crbug.com/645883)
    // TODO(zino): Should implement setMatrixValue() method (See: crbug.com/645884)
    // TODO(zino): Should remove scaleNonUniformSelf() method (See: crbug.com/645887)
    // Mutable transform methods
    [RaisesException] DOMMatrix multiplySelf(optional DOMMatrixInit other);
    [RaisesException] DOMMatrix preMultiplySelf(optional DOMMatrixInit other);
    DOMMatrix translateSelf(unrestricted double tx,
                            unrestricted double ty,
                            optional unrestricted double tz = 0);
    DOMMatrix scaleSelf(unrestricted double scale,
                        optional unrestricted double originX = 0,
                        optional unrestricted double originY = 0);
    DOMMatrix scale3dSelf(unrestricted double scale,
                          optional unrestricted double originX = 0,
                          optional unrestricted double originY = 0,
                          optional unrestricted double originZ = 0);
    DOMMatrix scaleNonUniformSelf(unrestricted double scaleX,
                                  optional unrestricted double scaleY = 1,
                                  optional unrestricted double scaleZ = 1,
                                  optional unrestricted double originX = 0,
                                  optional unrestricted double originY = 0,
                                  optional unrestricted double originZ = 0);
    DOMMatrix skewXSelf(optional unrestricted double sx = 0);
    DOMMatrix skewYSelf(optional unrestricted double sy = 0);
    DOMMatrix invertSelf();
};
