File indexing completed on 2024-04-28 11:39:24
0001 /* 0002 Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org> 0003 2004, 2005 Rob Buis <buis@kde.org> 0004 0005 This file is part of the KDE project 0006 0007 This library is free software; you can redistribute it and/or 0008 modify it under the terms of the GNU Library General Public 0009 License as published by the Free Software Foundation; either 0010 version 2 of the License, or (at your option) any later version. 0011 0012 This library is distributed in the hope that it will be useful, 0013 but WITHOUT ANY WARRANTY; without even the implied warranty of 0014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0015 Library General Public License for more details. 0016 0017 You should have received a copy of the GNU Library General Public License 0018 along with this library; see the file COPYING.LIB. If not, write to 0019 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0020 Boston, MA 02110-1301, USA. 0021 */ 0022 0023 #include "wtf/Platform.h" 0024 0025 #if ENABLE(SVG) 0026 #include "AffineTransform.h" 0027 #include "SVGSVGElement.h" 0028 #include "SVGTransformDistance.h" 0029 #include "SVGTransformList.h" 0030 0031 using namespace WebCore; 0032 0033 SVGTransformList::SVGTransformList(const QualifiedName &attributeName) 0034 : SVGPODList<SVGTransform>(attributeName) 0035 { 0036 } 0037 0038 SVGTransformList::~SVGTransformList() 0039 { 0040 } 0041 0042 SVGTransform SVGTransformList::createSVGTransformFromMatrix(const AffineTransform &matrix) const 0043 { 0044 return SVGSVGElement::createSVGTransformFromMatrix(matrix); 0045 } 0046 0047 SVGTransform SVGTransformList::consolidate() 0048 { 0049 ExceptionCode ec = 0; 0050 return initialize(concatenate(), ec); 0051 } 0052 0053 SVGTransform SVGTransformList::concatenate() const 0054 { 0055 unsigned int length = numberOfItems(); 0056 if (!length) { 0057 return SVGTransform(); 0058 } 0059 0060 AffineTransform matrix; 0061 ExceptionCode ec = 0; 0062 for (unsigned int i = 0; i < length; i++) { 0063 matrix = getItem(i, ec).matrix() * matrix; 0064 } 0065 0066 return SVGTransform(matrix); 0067 } 0068 0069 SVGTransform SVGTransformList::concatenateForType(SVGTransform::SVGTransformType type) const 0070 { 0071 unsigned int length = numberOfItems(); 0072 if (!length) { 0073 return SVGTransform(); 0074 } 0075 0076 ExceptionCode ec = 0; 0077 SVGTransformDistance totalTransform; 0078 for (unsigned int i = 0; i < length; i++) { 0079 const SVGTransform &transform = getItem(i, ec); 0080 if (transform.type() == type) { 0081 totalTransform.addSVGTransform(transform); 0082 } 0083 } 0084 0085 return totalTransform.addToSVGTransform(SVGTransform()); 0086 } 0087 0088 #endif // ENABLE(SVG)