Index: third_party/WebKit/Source/core/css/cssom/CSSMatrixComponent.cpp |
diff --git a/third_party/WebKit/Source/core/css/cssom/CSSMatrixComponent.cpp b/third_party/WebKit/Source/core/css/cssom/CSSMatrixComponent.cpp |
index 3ad9133c7d98c592987354d119b05d3299458ed5..952ec18ee128376a76bedb7fa4265bcb7c9ddb17 100644 |
--- a/third_party/WebKit/Source/core/css/cssom/CSSMatrixComponent.cpp |
+++ b/third_party/WebKit/Source/core/css/cssom/CSSMatrixComponent.cpp |
@@ -5,31 +5,57 @@ |
#include "core/css/cssom/CSSMatrixComponent.h" |
#include "core/css/CSSPrimitiveValue.h" |
+#include "core/css/cssom/CSSMatrixComponentOptions.h" |
+#include "core/geometry/DOMMatrix.h" |
#include "platform/wtf/MathExtras.h" |
namespace blink { |
-CSSMatrixComponent* CSSMatrixComponent::Create(DOMMatrixReadOnly* matrix) { |
- return new CSSMatrixComponent(matrix); |
+namespace { |
+ |
+DOMMatrix* To2DMatrix(DOMMatrixReadOnly* matrix) { |
+ DOMMatrix* twoDimensionalMatrix = DOMMatrix::Create(); |
+ twoDimensionalMatrix->setA(matrix->m11()); |
+ twoDimensionalMatrix->setB(matrix->m12()); |
+ twoDimensionalMatrix->setC(matrix->m21()); |
+ twoDimensionalMatrix->setD(matrix->m22()); |
+ twoDimensionalMatrix->setE(matrix->m41()); |
+ twoDimensionalMatrix->setF(matrix->m42()); |
+ return twoDimensionalMatrix; |
+} |
+ |
+} // namespace |
+ |
+CSSMatrixComponent* CSSMatrixComponent::Create( |
+ DOMMatrixReadOnly* matrix, |
+ const CSSMatrixComponentOptions& options) { |
+ return new CSSMatrixComponent(matrix, options.is2D() || matrix->is2D()); |
+} |
+ |
+DOMMatrix* CSSMatrixComponent::AsMatrix() const { |
+ if (is2D() && !matrix_->is2D()) |
+ return To2DMatrix(matrix_); |
+ |
+ return matrix_.Get(); |
} |
CSSFunctionValue* CSSMatrixComponent::ToCSSValue() const { |
CSSFunctionValue* result = |
- CSSFunctionValue::Create(is2d_ ? CSSValueMatrix : CSSValueMatrix3d); |
+ CSSFunctionValue::Create(is2D() ? CSSValueMatrix : CSSValueMatrix3d); |
- if (is2d_) { |
- double values[6] = {matrix()->a(), matrix()->b(), matrix()->c(), |
- matrix()->d(), matrix()->e(), matrix()->f()}; |
+ if (is2D()) { |
+ double values[6] = {matrix_->a(), matrix_->b(), matrix_->c(), |
+ matrix_->d(), matrix_->e(), matrix_->f()}; |
for (double value : values) { |
result->Append(*CSSPrimitiveValue::Create( |
value, CSSPrimitiveValue::UnitType::kNumber)); |
} |
} else { |
double values[16] = { |
- matrix()->m11(), matrix()->m12(), matrix()->m13(), matrix()->m14(), |
- matrix()->m21(), matrix()->m22(), matrix()->m23(), matrix()->m24(), |
- matrix()->m31(), matrix()->m32(), matrix()->m33(), matrix()->m34(), |
- matrix()->m41(), matrix()->m42(), matrix()->m43(), matrix()->m44()}; |
+ matrix_->m11(), matrix_->m12(), matrix_->m13(), matrix_->m14(), |
+ matrix_->m21(), matrix_->m22(), matrix_->m23(), matrix_->m24(), |
+ matrix_->m31(), matrix_->m32(), matrix_->m33(), matrix_->m34(), |
+ matrix_->m41(), matrix_->m42(), matrix_->m43(), matrix_->m44()}; |
for (double value : values) { |
result->Append(*CSSPrimitiveValue::Create( |
value, CSSPrimitiveValue::UnitType::kNumber)); |
@@ -39,10 +65,4 @@ CSSFunctionValue* CSSMatrixComponent::ToCSSValue() const { |
return result; |
} |
-CSSMatrixComponent::CSSMatrixComponent(DOMMatrixReadOnly* matrix) |
- : CSSTransformComponent() { |
- matrix_ = DOMMatrix::Create(matrix); |
- is2d_ = matrix->is2D(); |
-} |
- |
} // namespace blink |