Index: third_party/WebKit/Source/core/dom/DOMMatrixReadOnly.h |
diff --git a/third_party/WebKit/Source/core/dom/DOMMatrixReadOnly.h b/third_party/WebKit/Source/core/dom/DOMMatrixReadOnly.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c78bfe50da335a02e5411f03f91910faa8aa748f |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/dom/DOMMatrixReadOnly.h |
@@ -0,0 +1,140 @@ |
+// 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 DOMMatrixReadOnly_h |
+#define DOMMatrixReadOnly_h |
+ |
+#include "bindings/core/v8/ExceptionState.h" |
+#include "bindings/core/v8/ScriptWrappable.h" |
+#include "core/dom/DOMTypedArray.h" |
+#include "platform/heap/Handle.h" |
+#include "platform/transforms/TransformationMatrix.h" |
+#include <memory> |
+ |
+namespace blink { |
+ |
+class DOMMatrix; |
+class DOMMatrixInit; |
+class DOMPoint; |
+class DOMPointInit; |
+ |
+class CORE_EXPORT DOMMatrixReadOnly |
+ : public GarbageCollectedFinalized<DOMMatrixReadOnly>, |
+ public ScriptWrappable { |
+ DEFINE_WRAPPERTYPEINFO(); |
+ |
+ public: |
+ static DOMMatrixReadOnly* create(ExceptionState&); |
+ static DOMMatrixReadOnly* create(const String&, ExceptionState&); |
+ static DOMMatrixReadOnly* create(Vector<double>, ExceptionState&); |
+ static DOMMatrixReadOnly* fromFloat32Array(DOMFloat32Array*, ExceptionState&); |
+ static DOMMatrixReadOnly* fromFloat64Array(DOMFloat64Array*, ExceptionState&); |
+ static DOMMatrixReadOnly* fromMatrix(DOMMatrixInit&, ExceptionState&); |
+ virtual ~DOMMatrixReadOnly(); |
+ |
+ double a() const { return m_matrix->m11(); } |
+ double b() const { return m_matrix->m12(); } |
+ double c() const { return m_matrix->m21(); } |
+ double d() const { return m_matrix->m22(); } |
+ double e() const { return m_matrix->m41(); } |
+ double f() const { return m_matrix->m42(); } |
+ |
+ double m11() const { return m_matrix->m11(); } |
+ double m12() const { return m_matrix->m12(); } |
+ double m13() const { return m_matrix->m13(); } |
+ double m14() const { return m_matrix->m14(); } |
+ double m21() const { return m_matrix->m21(); } |
+ double m22() const { return m_matrix->m22(); } |
+ double m23() const { return m_matrix->m23(); } |
+ double m24() const { return m_matrix->m24(); } |
+ double m31() const { return m_matrix->m31(); } |
+ double m32() const { return m_matrix->m32(); } |
+ double m33() const { return m_matrix->m33(); } |
+ double m34() const { return m_matrix->m34(); } |
+ double m41() const { return m_matrix->m41(); } |
+ double m42() const { return m_matrix->m42(); } |
+ double m43() const { return m_matrix->m43(); } |
+ double m44() const { return m_matrix->m44(); } |
+ |
+ bool is2D() const; |
+ bool isIdentity() const; |
+ |
+ DOMMatrix* multiply(DOMMatrixInit&, ExceptionState&); |
+ DOMMatrix* translate(double tx = 0, double ty = 0, double tz = 0); |
+ DOMMatrix* scale(double sx = 1); |
+ DOMMatrix* scale(double sx, |
+ double sy, |
+ double sz = 1, |
+ double ox = 0, |
+ double oy = 0, |
+ double oz = 0); |
+ DOMMatrix* scale3d(double scale = 1, |
+ double ox = 0, |
+ double oy = 0, |
+ double oz = 0); |
+ DOMMatrix* rotate(double rotX); |
+ DOMMatrix* rotate(double rotX, double rotY); |
+ DOMMatrix* rotate(double rotX, double rotY, double rotZ); |
+ DOMMatrix* rotateFromVector(double x, double y); |
+ DOMMatrix* rotateAxisAngle(double x = 0, |
+ double y = 0, |
+ double z = 0, |
+ double angle = 0); |
+ DOMMatrix* skewX(double sx); |
+ DOMMatrix* skewY(double sy); |
+ DOMMatrix* flipX(); |
+ DOMMatrix* flipY(); |
+ DOMMatrix* inverse(); |
+ |
+ DOMPoint* transformPoint(const DOMPointInit&); |
+ |
+ DOMFloat32Array* toFloat32Array() const; |
+ DOMFloat64Array* toFloat64Array() const; |
+ |
+ const String toString() const; |
+ |
+ ScriptValue toJSONForBinding(ScriptState*) const; |
+ |
+ const TransformationMatrix& matrix() const { return *m_matrix; } |
+ |
+ DEFINE_INLINE_TRACE() {} |
+ |
+ protected: |
+ DOMMatrixReadOnly() {} |
+ DOMMatrixReadOnly(const String&, ExceptionState&); |
+ DOMMatrixReadOnly(const TransformationMatrix&, bool is2D = true); |
+ |
+ template <typename T> |
+ DOMMatrixReadOnly(T sequence, int size) { |
+ if (size == 6) { |
+ m_matrix = |
+ TransformationMatrix::create(sequence[0], sequence[1], sequence[2], |
+ sequence[3], sequence[4], sequence[5]); |
+ m_is2D = true; |
+ } else if (size == 16) { |
+ m_matrix = TransformationMatrix::create( |
+ sequence[0], sequence[1], sequence[2], sequence[3], sequence[4], |
+ sequence[5], sequence[6], sequence[7], sequence[8], sequence[9], |
+ sequence[10], sequence[11], sequence[12], sequence[13], sequence[14], |
+ sequence[15]); |
+ m_is2D = false; |
+ } else { |
+ NOTREACHED(); |
+ } |
+ } |
+ |
+ void setMatrixValueFromString(const String&, ExceptionState&); |
+ |
+ static bool validateAndFixup(DOMMatrixInit&, ExceptionState&); |
+ // TransformationMatrix needs to be 16-byte aligned. PartitionAlloc |
+ // supports 16-byte alignment but Oilpan doesn't. So we use an std::unique_ptr |
+ // to allocate TransformationMatrix on PartitionAlloc. |
+ // TODO(oilpan): Oilpan should support 16-byte aligned allocations. |
+ std::unique_ptr<TransformationMatrix> m_matrix; |
+ bool m_is2D; |
+}; |
+ |
+} // namespace blink |
+ |
+#endif |