// 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.

#ifndef DOMMatrix_h
#define DOMMatrix_h

#include "core/dom/DOMMatrixInit.h"
#include "core/dom/DOMMatrixReadOnly.h"

namespace blink {

class CORE_EXPORT DOMMatrix : public DOMMatrixReadOnly {
    DEFINE_WRAPPERTYPEINFO();
public:
    static DOMMatrix* create();
    static DOMMatrix* create(DOMMatrixReadOnly*);
    static DOMMatrix* create(const SkMatrix44&);
    static DOMMatrix* fromFloat32Array(DOMFloat32Array*, ExceptionState&);
    static DOMMatrix* fromFloat64Array(DOMFloat64Array*, ExceptionState&);
    static DOMMatrix* fromMatrix(DOMMatrixInit&, ExceptionState&);

    void setA(double value) { m_matrix->setM11(value); }
    void setB(double value) { m_matrix->setM12(value); }
    void setC(double value) { m_matrix->setM21(value); }
    void setD(double value) { m_matrix->setM22(value); }
    void setE(double value) { m_matrix->setM41(value); }
    void setF(double value) { m_matrix->setM42(value); }

    void setM11(double value) { m_matrix->setM11(value); }
    void setM12(double value) { m_matrix->setM12(value); }
    void setM13(double value) { m_matrix->setM13(value); setIs2D(!value); }
    void setM14(double value) { m_matrix->setM14(value); setIs2D(!value); }
    void setM21(double value) { m_matrix->setM21(value); }
    void setM22(double value) { m_matrix->setM22(value); }
    void setM23(double value) { m_matrix->setM23(value); setIs2D(!value); }
    void setM24(double value) { m_matrix->setM24(value); setIs2D(!value); }
    void setM31(double value) { m_matrix->setM31(value); setIs2D(!value); }
    void setM32(double value) { m_matrix->setM32(value); setIs2D(!value); }
    void setM33(double value) { m_matrix->setM33(value); setIs2D(value != 1); }
    void setM34(double value) { m_matrix->setM34(value); setIs2D(!value); }
    void setM41(double value) { m_matrix->setM41(value); }
    void setM42(double value) { m_matrix->setM42(value); }
    void setM43(double value) { m_matrix->setM43(value); setIs2D(!value); }
    void setM44(double value) { m_matrix->setM44(value); setIs2D(value != 1); }

    DOMMatrix* multiplySelf(DOMMatrixInit&, ExceptionState&);
    DOMMatrix* preMultiplySelf(DOMMatrixInit&, ExceptionState&);
    DOMMatrix* translateSelf(double tx, double ty, double tz = 0);
    DOMMatrix* scaleSelf(double scale, double ox = 0, double oy = 0);
    DOMMatrix* scale3dSelf(double scale, double ox = 0, double oy = 0, double oz = 0);
    DOMMatrix* scaleNonUniformSelf(double sx, double sy = 1, double sz = 1,
        double ox = 0, double oy = 0, double oz = 0);
    DOMMatrix* skewXSelf(double sx = 0);
    DOMMatrix* skewYSelf(double sy = 0);
    DOMMatrix* invertSelf();

private:
    DOMMatrix(const TransformationMatrix&, bool is2D = true);
    template <typename T>
    DOMMatrix(T sequence, int size);

    void setIs2D(bool value);
};

} // namespace blink

#endif
