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