1c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// found in the LICENSE file. 4c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 5c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "config.h" 6c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "core/dom/DOMMatrix.h" 7c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 8c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 9c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 10c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)DOMMatrix* DOMMatrix::create() 11c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return new DOMMatrix(TransformationMatrix()); 13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 14c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 15c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)DOMMatrix* DOMMatrix::create(DOMMatrixReadOnly* other) 16c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 179e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return new DOMMatrix(other->matrix(), other->is2D()); 189e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 199e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 209e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)DOMMatrix::DOMMatrix(const TransformationMatrix& matrix, bool is2D) 219e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 229e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_matrix = matrix; 23c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) m_is2D = is2D; 24c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 25c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 26c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void DOMMatrix::setIs2D(bool value) 27c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 28c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (m_is2D) 29c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) m_is2D = value; 30c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 31c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciDOMMatrix* DOMMatrix::multiplySelf(DOMMatrix* other) 337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!other->is2D()) 357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_is2D = false; 367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_matrix = m_matrix * other->matrix(); 387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this; 407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciDOMMatrix* DOMMatrix::preMultiplySelf(DOMMatrix* other) 437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!other->is2D()) 457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_is2D = false; 467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_matrix = other->matrix() * m_matrix; 487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this; 507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 529e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)DOMMatrix* DOMMatrix::translateSelf(double tx, double ty, double tz) 539e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 549e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (!tx && !ty && !tz) 559e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return this; 569e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (tz) 589e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_is2D = false; 599e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 609e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (m_is2D) 619e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_matrix.translate(tx, ty); 629e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) else 639e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_matrix.translate3d(tx, ty, tz); 649e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 659e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return this; 669e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 679e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 689e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)DOMMatrix* DOMMatrix::scaleSelf(double scale, double ox, double oy) 699e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 709e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return scaleNonUniformSelf(scale, scale, 1, ox, oy); 719e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 729e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 739e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)DOMMatrix* DOMMatrix::scale3dSelf(double scale, double ox, double oy, double oz) 749e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 759e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return scaleNonUniformSelf(scale, scale, scale, ox, oy, oz); 769e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 779e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 789e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)DOMMatrix* DOMMatrix::scaleNonUniformSelf(double sx, double sy, double sz, 799e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) double ox, double oy, double oz) 809e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 819e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (sz != 1 || oz) 829e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_is2D = false; 839e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 849e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (sx == 1 && sy == 1 && sz == 1) 859e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return this; 869e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 879e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) bool hasTranslation = (ox || oy || oz); 889e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 899e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (hasTranslation) 909e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) translateSelf(ox, oy, oz); 919e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 929e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (m_is2D) 939e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_matrix.scaleNonUniform(sx, sy); 949e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) else 959e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_matrix.scale3d(sx, sy, sz); 969e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 979e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (hasTranslation) 989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) translateSelf(-ox, -oy, -oz); 999e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 1009e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return this; 1019e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 1029e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 103c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 104