OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef DOMMatrixReadOnly_h |
| 6 #define DOMMatrixReadOnly_h |
| 7 |
| 8 #include "bindings/core/v8/ExceptionState.h" |
| 9 #include "bindings/core/v8/ScriptWrappable.h" |
| 10 #include "core/dom/DOMTypedArray.h" |
| 11 #include "platform/heap/Handle.h" |
| 12 #include "platform/transforms/TransformationMatrix.h" |
| 13 #include <memory> |
| 14 |
| 15 namespace blink { |
| 16 |
| 17 class DOMMatrix; |
| 18 class DOMMatrixInit; |
| 19 class DOMPoint; |
| 20 class DOMPointInit; |
| 21 |
| 22 class CORE_EXPORT DOMMatrixReadOnly |
| 23 : public GarbageCollectedFinalized<DOMMatrixReadOnly>, |
| 24 public ScriptWrappable { |
| 25 DEFINE_WRAPPERTYPEINFO(); |
| 26 |
| 27 public: |
| 28 static DOMMatrixReadOnly* create(ExceptionState&); |
| 29 static DOMMatrixReadOnly* create(const String&, ExceptionState&); |
| 30 static DOMMatrixReadOnly* create(Vector<double>, ExceptionState&); |
| 31 static DOMMatrixReadOnly* fromFloat32Array(DOMFloat32Array*, ExceptionState&); |
| 32 static DOMMatrixReadOnly* fromFloat64Array(DOMFloat64Array*, ExceptionState&); |
| 33 static DOMMatrixReadOnly* fromMatrix(DOMMatrixInit&, ExceptionState&); |
| 34 virtual ~DOMMatrixReadOnly(); |
| 35 |
| 36 double a() const { return m_matrix->m11(); } |
| 37 double b() const { return m_matrix->m12(); } |
| 38 double c() const { return m_matrix->m21(); } |
| 39 double d() const { return m_matrix->m22(); } |
| 40 double e() const { return m_matrix->m41(); } |
| 41 double f() const { return m_matrix->m42(); } |
| 42 |
| 43 double m11() const { return m_matrix->m11(); } |
| 44 double m12() const { return m_matrix->m12(); } |
| 45 double m13() const { return m_matrix->m13(); } |
| 46 double m14() const { return m_matrix->m14(); } |
| 47 double m21() const { return m_matrix->m21(); } |
| 48 double m22() const { return m_matrix->m22(); } |
| 49 double m23() const { return m_matrix->m23(); } |
| 50 double m24() const { return m_matrix->m24(); } |
| 51 double m31() const { return m_matrix->m31(); } |
| 52 double m32() const { return m_matrix->m32(); } |
| 53 double m33() const { return m_matrix->m33(); } |
| 54 double m34() const { return m_matrix->m34(); } |
| 55 double m41() const { return m_matrix->m41(); } |
| 56 double m42() const { return m_matrix->m42(); } |
| 57 double m43() const { return m_matrix->m43(); } |
| 58 double m44() const { return m_matrix->m44(); } |
| 59 |
| 60 bool is2D() const; |
| 61 bool isIdentity() const; |
| 62 |
| 63 DOMMatrix* multiply(DOMMatrixInit&, ExceptionState&); |
| 64 DOMMatrix* translate(double tx = 0, double ty = 0, double tz = 0); |
| 65 DOMMatrix* scale(double sx = 1); |
| 66 DOMMatrix* scale(double sx, |
| 67 double sy, |
| 68 double sz = 1, |
| 69 double ox = 0, |
| 70 double oy = 0, |
| 71 double oz = 0); |
| 72 DOMMatrix* scale3d(double scale = 1, |
| 73 double ox = 0, |
| 74 double oy = 0, |
| 75 double oz = 0); |
| 76 DOMMatrix* rotate(double rotX); |
| 77 DOMMatrix* rotate(double rotX, double rotY); |
| 78 DOMMatrix* rotate(double rotX, double rotY, double rotZ); |
| 79 DOMMatrix* rotateFromVector(double x, double y); |
| 80 DOMMatrix* rotateAxisAngle(double x = 0, |
| 81 double y = 0, |
| 82 double z = 0, |
| 83 double angle = 0); |
| 84 DOMMatrix* skewX(double sx); |
| 85 DOMMatrix* skewY(double sy); |
| 86 DOMMatrix* flipX(); |
| 87 DOMMatrix* flipY(); |
| 88 DOMMatrix* inverse(); |
| 89 |
| 90 DOMPoint* transformPoint(const DOMPointInit&); |
| 91 |
| 92 DOMFloat32Array* toFloat32Array() const; |
| 93 DOMFloat64Array* toFloat64Array() const; |
| 94 |
| 95 const String toString() const; |
| 96 |
| 97 ScriptValue toJSONForBinding(ScriptState*) const; |
| 98 |
| 99 const TransformationMatrix& matrix() const { return *m_matrix; } |
| 100 |
| 101 DEFINE_INLINE_TRACE() {} |
| 102 |
| 103 protected: |
| 104 DOMMatrixReadOnly() {} |
| 105 DOMMatrixReadOnly(const String&, ExceptionState&); |
| 106 DOMMatrixReadOnly(const TransformationMatrix&, bool is2D = true); |
| 107 |
| 108 template <typename T> |
| 109 DOMMatrixReadOnly(T sequence, int size) { |
| 110 if (size == 6) { |
| 111 m_matrix = |
| 112 TransformationMatrix::create(sequence[0], sequence[1], sequence[2], |
| 113 sequence[3], sequence[4], sequence[5]); |
| 114 m_is2D = true; |
| 115 } else if (size == 16) { |
| 116 m_matrix = TransformationMatrix::create( |
| 117 sequence[0], sequence[1], sequence[2], sequence[3], sequence[4], |
| 118 sequence[5], sequence[6], sequence[7], sequence[8], sequence[9], |
| 119 sequence[10], sequence[11], sequence[12], sequence[13], sequence[14], |
| 120 sequence[15]); |
| 121 m_is2D = false; |
| 122 } else { |
| 123 NOTREACHED(); |
| 124 } |
| 125 } |
| 126 |
| 127 void setMatrixValueFromString(const String&, ExceptionState&); |
| 128 |
| 129 static bool validateAndFixup(DOMMatrixInit&, ExceptionState&); |
| 130 // TransformationMatrix needs to be 16-byte aligned. PartitionAlloc |
| 131 // supports 16-byte alignment but Oilpan doesn't. So we use an std::unique_ptr |
| 132 // to allocate TransformationMatrix on PartitionAlloc. |
| 133 // TODO(oilpan): Oilpan should support 16-byte aligned allocations. |
| 134 std::unique_ptr<TransformationMatrix> m_matrix; |
| 135 bool m_is2D; |
| 136 }; |
| 137 |
| 138 } // namespace blink |
| 139 |
| 140 #endif |
OLD | NEW |