1c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// found in the LICENSE file.
4c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
5c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#ifndef DOMMatrixReadOnly_h
6c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#define DOMMatrixReadOnly_h
7c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
8e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "bindings/core/v8/ScriptWrappable.h"
9c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "platform/heap/Handle.h"
109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "platform/transforms/TransformationMatrix.h"
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/Float32Array.h"
127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/Float64Array.h"
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
14c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
15c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
169e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)class DOMMatrix;
179e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
18e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class DOMMatrixReadOnly : public GarbageCollected<DOMMatrixReadOnly>, public ScriptWrappableBase {
19c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)public:
209e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double a() const { return m_matrix.m11(); }
219e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double b() const { return m_matrix.m12(); }
229e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double c() const { return m_matrix.m21(); }
239e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double d() const { return m_matrix.m22(); }
249e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double e() const { return m_matrix.m41(); }
259e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double f() const { return m_matrix.m42(); }
269e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
279e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m11() const { return m_matrix.m11(); }
289e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m12() const { return m_matrix.m12(); }
299e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m13() const { return m_matrix.m13(); }
309e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m14() const { return m_matrix.m14(); }
319e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m21() const { return m_matrix.m21(); }
329e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m22() const { return m_matrix.m22(); }
339e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m23() const { return m_matrix.m23(); }
349e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m24() const { return m_matrix.m24(); }
359e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m31() const { return m_matrix.m31(); }
369e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m32() const { return m_matrix.m32(); }
379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m33() const { return m_matrix.m33(); }
389e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m34() const { return m_matrix.m34(); }
399e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m41() const { return m_matrix.m41(); }
409e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m42() const { return m_matrix.m42(); }
419e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m43() const { return m_matrix.m43(); }
429e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    double m44() const { return m_matrix.m44(); }
43c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
44c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool is2D() const;
45c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool isIdentity() const;
46c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DOMMatrix* multiply(DOMMatrix*);
489e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    DOMMatrix* translate(double tx, double ty, double tz = 0);
499e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    DOMMatrix* scale(double scale, double ox = 0, double oy = 0);
509e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    DOMMatrix* scale3d(double scale, double ox = 0, double oy = 0, double oz = 0);
519e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    DOMMatrix* scaleNonUniform(double sx, double sy = 1, double sz = 1,
529e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        double ox = 0, double oy = 0, double oz = 0);
539e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtr<Float32Array> toFloat32Array() const;
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtr<Float64Array> toFloat64Array() const;
567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    const TransformationMatrix& matrix() const { return m_matrix; }
589e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
59c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void trace(Visitor*) { }
60c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
61c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)protected:
629e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    TransformationMatrix m_matrix;
63c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool m_is2D;
64c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)};
65c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
66c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
67c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
68c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#endif
69