| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 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 CSSMatrixTransformComponent_h | |
| 6 #define CSSMatrixTransformComponent_h | |
| 7 | |
| 8 #include "core/css/cssom/CSSTransformComponent.h" | |
| 9 #include "platform/transforms/TransformationMatrix.h" | |
| 10 #include <memory> | |
| 11 | |
| 12 namespace blink { | |
| 13 | |
| 14 class CORE_EXPORT CSSMatrixTransformComponent final | |
| 15 : public CSSTransformComponent { | |
| 16 WTF_MAKE_NONCOPYABLE(CSSMatrixTransformComponent); | |
| 17 DEFINE_WRAPPERTYPEINFO(); | |
| 18 | |
| 19 public: | |
| 20 static CSSMatrixTransformComponent* create(double a, | |
| 21 double b, | |
| 22 double c, | |
| 23 double d, | |
| 24 double e, | |
| 25 double f) { | |
| 26 return new CSSMatrixTransformComponent(a, b, c, d, e, f); | |
| 27 } | |
| 28 | |
| 29 static CSSMatrixTransformComponent* create(double m11, | |
| 30 double m12, | |
| 31 double m13, | |
| 32 double m14, | |
| 33 double m21, | |
| 34 double m22, | |
| 35 double m23, | |
| 36 double m24, | |
| 37 double m31, | |
| 38 double m32, | |
| 39 double m33, | |
| 40 double m34, | |
| 41 double m41, | |
| 42 double m42, | |
| 43 double m43, | |
| 44 double m44) { | |
| 45 return new CSSMatrixTransformComponent(m11, m12, m13, m14, m21, m22, m23, | |
| 46 m24, m31, m32, m33, m34, m41, m42, | |
| 47 m43, m44); | |
| 48 } | |
| 49 | |
| 50 static CSSMatrixTransformComponent* fromCSSValue( | |
| 51 const CSSFunctionValue& value) { | |
| 52 return nullptr; | |
| 53 } | |
| 54 | |
| 55 // 2D matrix attributes | |
| 56 double a() const { return m_matrix->a(); } | |
| 57 double b() const { return m_matrix->b(); } | |
| 58 double c() const { return m_matrix->c(); } | |
| 59 double d() const { return m_matrix->d(); } | |
| 60 double e() const { return m_matrix->e(); } | |
| 61 double f() const { return m_matrix->f(); } | |
| 62 | |
| 63 // 3D matrix attributes | |
| 64 double m11() const { return m_matrix->m11(); } | |
| 65 double m12() const { return m_matrix->m12(); } | |
| 66 double m13() const { return m_matrix->m13(); } | |
| 67 double m14() const { return m_matrix->m14(); } | |
| 68 double m21() const { return m_matrix->m21(); } | |
| 69 double m22() const { return m_matrix->m22(); } | |
| 70 double m23() const { return m_matrix->m23(); } | |
| 71 double m24() const { return m_matrix->m24(); } | |
| 72 double m31() const { return m_matrix->m31(); } | |
| 73 double m32() const { return m_matrix->m32(); } | |
| 74 double m33() const { return m_matrix->m33(); } | |
| 75 double m34() const { return m_matrix->m34(); } | |
| 76 double m41() const { return m_matrix->m41(); } | |
| 77 double m42() const { return m_matrix->m42(); } | |
| 78 double m43() const { return m_matrix->m43(); } | |
| 79 double m44() const { return m_matrix->m44(); } | |
| 80 | |
| 81 TransformComponentType type() const override { | |
| 82 return m_is2D ? MatrixType : Matrix3DType; | |
| 83 } | |
| 84 | |
| 85 // Bindings require a non const return value. | |
| 86 CSSMatrixTransformComponent* asMatrix() const override { | |
| 87 return const_cast<CSSMatrixTransformComponent*>(this); | |
| 88 } | |
| 89 | |
| 90 CSSFunctionValue* toCSSValue() const override; | |
| 91 | |
| 92 static CSSMatrixTransformComponent* perspective(double length); | |
| 93 | |
| 94 static CSSMatrixTransformComponent* rotate(double angle); | |
| 95 static CSSMatrixTransformComponent* rotate3d(double angle, | |
| 96 double x, | |
| 97 double y, | |
| 98 double z); | |
| 99 | |
| 100 static CSSMatrixTransformComponent* scale(double x, double y); | |
| 101 static CSSMatrixTransformComponent* scale3d(double x, double y, double z); | |
| 102 | |
| 103 static CSSMatrixTransformComponent* skew(double x, double y); | |
| 104 | |
| 105 static CSSMatrixTransformComponent* translate(double x, double y); | |
| 106 static CSSMatrixTransformComponent* translate3d(double x, double y, double z); | |
| 107 | |
| 108 private: | |
| 109 CSSMatrixTransformComponent(double a, | |
| 110 double b, | |
| 111 double c, | |
| 112 double d, | |
| 113 double e, | |
| 114 double f) | |
| 115 : CSSTransformComponent(), | |
| 116 m_matrix(TransformationMatrix::create(a, b, c, d, e, f)), | |
| 117 m_is2D(true) {} | |
| 118 | |
| 119 CSSMatrixTransformComponent(double m11, | |
| 120 double m12, | |
| 121 double m13, | |
| 122 double m14, | |
| 123 double m21, | |
| 124 double m22, | |
| 125 double m23, | |
| 126 double m24, | |
| 127 double m31, | |
| 128 double m32, | |
| 129 double m33, | |
| 130 double m34, | |
| 131 double m41, | |
| 132 double m42, | |
| 133 double m43, | |
| 134 double m44) | |
| 135 : CSSTransformComponent(), | |
| 136 m_matrix(TransformationMatrix::create(m11, | |
| 137 m12, | |
| 138 m13, | |
| 139 m14, | |
| 140 m21, | |
| 141 m22, | |
| 142 m23, | |
| 143 m24, | |
| 144 m31, | |
| 145 m32, | |
| 146 m33, | |
| 147 m34, | |
| 148 m41, | |
| 149 m42, | |
| 150 m43, | |
| 151 m44)), | |
| 152 m_is2D(false) {} | |
| 153 | |
| 154 CSSMatrixTransformComponent( | |
| 155 std::unique_ptr<const TransformationMatrix> matrix, | |
| 156 TransformComponentType fromType) | |
| 157 : CSSTransformComponent(), | |
| 158 m_matrix(std::move(matrix)), | |
| 159 m_is2D(is2DComponentType(fromType)) {} | |
| 160 | |
| 161 // TransformationMatrix needs to be 16-byte aligned. PartitionAlloc | |
| 162 // supports 16-byte alignment but Oilpan doesn't. So we use an std::unique_ptr | |
| 163 // to allocate TransformationMatrix on PartitionAlloc. | |
| 164 // TODO(oilpan): Oilpan should support 16-byte aligned allocations. | |
| 165 std::unique_ptr<const TransformationMatrix> m_matrix; | |
| 166 bool m_is2D; | |
| 167 }; | |
| 168 | |
| 169 } // namespace blink | |
| 170 | |
| 171 #endif | |
| OLD | NEW |