SVGPointList.cpp revision dcc8cf2e65d1aa555cce12431a16547e66b469ee
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann <zimmermann@kde.org> 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2004, 2005 Rob Buis <buis@kde.org> 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project This library is free software; you can redistribute it and/or 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project modify it under the terms of the GNU Library General Public 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project License as published by the Free Software Foundation; either 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project version 2 of the License, or (at your option) any later version. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project This library is distributed in the hope that it will be useful, 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project but WITHOUT ANY WARRANTY; without even the implied warranty of 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Library General Public License for more details. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project You should have received a copy of the GNU Library General Public License 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project along with this library; see the file COPYING.LIB. If not, write to 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Boston, MA 02110-1301, USA. 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG) 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGPointList.h" 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SVGPathSegList.h" 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSVGPointList::SVGPointList(const QualifiedName& attributeName) 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : SVGPODList<FloatPoint>(attributeName) 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSVGPointList::~SVGPointList() 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString SVGPointList::valueAsString() const 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String result; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ExceptionCode ec = 0; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned int i = 0; i < numberOfItems(); ++i) { 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (i > 0) 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result += " "; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FloatPoint point = getItem(i, ec); 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(ec == 0); 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result += String::format("%.6lg %.6lg", point.x(), point.y()); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockPassRefPtr<SVGPointList> SVGPointList::createAnimated(const SVGPointList* fromList, const SVGPointList* toList, float progress) 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block unsigned itemCount = fromList->numberOfItems(); 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!itemCount || itemCount != toList->numberOfItems()) 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RefPtr<SVGPointList> result = create(fromList->associatedAttributeName()); 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ExceptionCode ec = 0; 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (unsigned n = 0; n < itemCount; ++n) { 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block FloatPoint from = fromList->getItem(n, ec); 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (ec) 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block FloatPoint to = toList->getItem(n, ec); 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (ec) 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block FloatPoint segment = FloatPoint(adjustAnimatedValue(from.x(), to.x(), progress), 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block adjustAnimatedValue(from.y(), to.y(), progress)); 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block result->appendItem(segment, ec); 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (ec) 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return result.release(); 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG) 83