/*
Copyright (C) Research In Motion Limited 2010. All rights reserved.
Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef SVGAnimatedPropertyTraits_h
#define SVGAnimatedPropertyTraits_h
#if ENABLE(SVG)
#include "FloatRect.h"
#include "PlatformString.h"
#include "SVGAngle.h"
#include "SVGLength.h"
#include "SVGLengthList.h"
#include "SVGNumberList.h"
#include "SVGPreserveAspectRatio.h"
#include "SVGTransformList.h"
namespace WebCore {
template<typename Type>
struct SVGAnimatedPropertyTraits : public Noncopyable { };
// SVGAnimatedAngle
template<>
struct SVGAnimatedPropertyTraits<SVGAngle> : public Noncopyable {
typedef const SVGAngle& PassType;
typedef SVGAngle ReturnType;
typedef SVGAngle StoredType;
static ReturnType null() { return SVGAngle(); }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return type.valueAsString(); }
};
// SVGAnimatedBoolean
template<>
struct SVGAnimatedPropertyTraits<bool> : public Noncopyable {
typedef const bool& PassType;
typedef bool ReturnType;
typedef bool StoredType;
static ReturnType null() { return false; }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return type ? "true" : "false"; }
};
// SVGAnimatedEnumeration
template<>
struct SVGAnimatedPropertyTraits<int> : public Noncopyable {
typedef const int& PassType;
typedef int ReturnType;
typedef int StoredType;
static ReturnType null() { return 0; }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return String::number(type); }
};
// SVGAnimatedInteger
template<>
struct SVGAnimatedPropertyTraits<long> : public Noncopyable {
typedef const long& PassType;
typedef long ReturnType;
typedef long StoredType;
static ReturnType null() { return 0l; }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return String::number(type); }
};
// SVGAnimatedLength
template<>
struct SVGAnimatedPropertyTraits<SVGLength> : public Noncopyable {
typedef const SVGLength& PassType;
typedef SVGLength ReturnType;
typedef SVGLength StoredType;
static ReturnType null() { return SVGLength(); }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return type.valueAsString(); }
};
// SVGAnimatedLengthList
template<>
struct SVGAnimatedPropertyTraits<SVGLengthList*> : public Noncopyable {
typedef SVGLengthList* PassType;
typedef SVGLengthList* ReturnType;
typedef RefPtr<SVGLengthList> StoredType;
static ReturnType null() { return 0; }
static ReturnType toReturnType(const StoredType& type) { return type.get(); }
static String toString(PassType type) { return type ? type->valueAsString() : String(); }
};
// SVGAnimatedNumber
template<>
struct SVGAnimatedPropertyTraits<float> : public Noncopyable {
typedef const float& PassType;
typedef float ReturnType;
typedef float StoredType;
static ReturnType null() { return 0.0f; }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return String::number(type); }
};
// SVGAnimatedNumberList
template<>
struct SVGAnimatedPropertyTraits<SVGNumberList*> : public Noncopyable {
typedef SVGNumberList* PassType;
typedef SVGNumberList* ReturnType;
typedef RefPtr<SVGNumberList> StoredType;
static ReturnType null() { return 0; }
static ReturnType toReturnType(const StoredType& type) { return type.get(); }
static String toString(PassType type) { return type ? type->valueAsString() : String(); }
};
// SVGAnimatedPreserveAspectRatio
template<>
struct SVGAnimatedPropertyTraits<SVGPreserveAspectRatio> : public Noncopyable {
typedef const SVGPreserveAspectRatio& PassType;
typedef SVGPreserveAspectRatio ReturnType;
typedef SVGPreserveAspectRatio StoredType;
static ReturnType null() { return SVGPreserveAspectRatio(); }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return type.valueAsString(); }
};
// SVGAnimatedRect
template<>
struct SVGAnimatedPropertyTraits<FloatRect> : public Noncopyable {
typedef const FloatRect& PassType;
typedef FloatRect ReturnType;
typedef FloatRect StoredType;
static ReturnType null() { return FloatRect(); }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return String::format("%f %f %f %f", type.x(), type.y(), type.width(), type.height()); }
};
// SVGAnimatedString
template<>
struct SVGAnimatedPropertyTraits<String> : public Noncopyable {
typedef const String& PassType;
typedef String ReturnType;
typedef String StoredType;
static ReturnType null() { return String(); }
static ReturnType toReturnType(const StoredType& type) { return type; }
static String toString(PassType type) { return type; }
};
// SVGAnimatedTransformList
template<>
struct SVGAnimatedPropertyTraits<SVGTransformList*> : public Noncopyable {
typedef SVGTransformList* PassType;
typedef SVGTransformList* ReturnType;
typedef RefPtr<SVGTransformList> StoredType;
static ReturnType null() { return 0; }
static ReturnType toReturnType(const StoredType& type) { return type.get(); }
static String toString(PassType type) { return type ? type->valueAsString() : String(); }
};
}
#endif
#endif