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