• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2     Copyright (C) Research In Motion Limited 2010. All rights reserved.
3     Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
4 
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9 
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14 
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20 
21 #ifndef SVGAnimatedPropertyTraits_h
22 #define SVGAnimatedPropertyTraits_h
23 
24 #if ENABLE(SVG)
25 #include "FloatRect.h"
26 #include "PlatformString.h"
27 #include "SVGAngle.h"
28 #include "SVGLength.h"
29 #include "SVGLengthList.h"
30 #include "SVGNumberList.h"
31 #include "SVGPreserveAspectRatio.h"
32 #include "SVGTransformList.h"
33 
34 namespace WebCore {
35 
36 template<typename Type>
37 struct SVGAnimatedPropertyTraits : public Noncopyable { };
38 
39 // SVGAnimatedAngle
40 template<>
41 struct SVGAnimatedPropertyTraits<SVGAngle> : public Noncopyable {
42     typedef const SVGAngle& PassType;
43     typedef SVGAngle ReturnType;
44     typedef SVGAngle StoredType;
45 
46     static ReturnType null() { return SVGAngle(); }
47     static ReturnType toReturnType(const StoredType& type) { return type; }
48     static String toString(PassType type) { return type.valueAsString(); }
49 };
50 
51 // SVGAnimatedBoolean
52 template<>
53 struct SVGAnimatedPropertyTraits<bool> : public Noncopyable {
54     typedef const bool& PassType;
55     typedef bool ReturnType;
56     typedef bool StoredType;
57 
58     static ReturnType null() { return false; }
59     static ReturnType toReturnType(const StoredType& type) { return type; }
60     static String toString(PassType type) { return type ? "true" : "false"; }
61 };
62 
63 // SVGAnimatedEnumeration
64 template<>
65 struct SVGAnimatedPropertyTraits<int> : public Noncopyable {
66     typedef const int& PassType;
67     typedef int ReturnType;
68     typedef int StoredType;
69 
70     static ReturnType null() { return 0; }
71     static ReturnType toReturnType(const StoredType& type) { return type; }
72     static String toString(PassType type) { return String::number(type); }
73 };
74 
75 // SVGAnimatedInteger
76 template<>
77 struct SVGAnimatedPropertyTraits<long> : public Noncopyable {
78     typedef const long& PassType;
79     typedef long ReturnType;
80     typedef long StoredType;
81 
82     static ReturnType null() { return 0l; }
83     static ReturnType toReturnType(const StoredType& type) { return type; }
84     static String toString(PassType type) { return String::number(type); }
85 };
86 
87 // SVGAnimatedLength
88 template<>
89 struct SVGAnimatedPropertyTraits<SVGLength> : public Noncopyable {
90     typedef const SVGLength& PassType;
91     typedef SVGLength ReturnType;
92     typedef SVGLength StoredType;
93 
94     static ReturnType null() { return SVGLength(); }
95     static ReturnType toReturnType(const StoredType& type) { return type; }
96     static String toString(PassType type) { return type.valueAsString(); }
97 };
98 
99 // SVGAnimatedLengthList
100 template<>
101 struct SVGAnimatedPropertyTraits<SVGLengthList*> : public Noncopyable {
102     typedef SVGLengthList* PassType;
103     typedef SVGLengthList* ReturnType;
104     typedef RefPtr<SVGLengthList> StoredType;
105 
106     static ReturnType null() { return 0; }
107     static ReturnType toReturnType(const StoredType& type) { return type.get(); }
108     static String toString(PassType type) { return type ? type->valueAsString() : String(); }
109 };
110 
111 // SVGAnimatedNumber
112 template<>
113 struct SVGAnimatedPropertyTraits<float> : public Noncopyable {
114     typedef const float& PassType;
115     typedef float ReturnType;
116     typedef float StoredType;
117 
118     static ReturnType null() { return 0.0f; }
119     static ReturnType toReturnType(const StoredType& type) { return type; }
120     static String toString(PassType type) { return String::number(type); }
121 };
122 
123 // SVGAnimatedNumberList
124 template<>
125 struct SVGAnimatedPropertyTraits<SVGNumberList*> : public Noncopyable {
126     typedef SVGNumberList* PassType;
127     typedef SVGNumberList* ReturnType;
128     typedef RefPtr<SVGNumberList> StoredType;
129 
130     static ReturnType null() { return 0; }
131     static ReturnType toReturnType(const StoredType& type) { return type.get(); }
132     static String toString(PassType type) { return type ? type->valueAsString() : String(); }
133 };
134 
135 // SVGAnimatedPreserveAspectRatio
136 template<>
137 struct SVGAnimatedPropertyTraits<SVGPreserveAspectRatio> : public Noncopyable {
138     typedef const SVGPreserveAspectRatio& PassType;
139     typedef SVGPreserveAspectRatio ReturnType;
140     typedef SVGPreserveAspectRatio StoredType;
141 
142     static ReturnType null() { return SVGPreserveAspectRatio(); }
143     static ReturnType toReturnType(const StoredType& type) { return type; }
144     static String toString(PassType type) { return type.valueAsString(); }
145 };
146 
147 // SVGAnimatedRect
148 template<>
149 struct SVGAnimatedPropertyTraits<FloatRect> : public Noncopyable {
150     typedef const FloatRect& PassType;
151     typedef FloatRect ReturnType;
152     typedef FloatRect StoredType;
153 
154     static ReturnType null() { return FloatRect(); }
155     static ReturnType toReturnType(const StoredType& type) { return type; }
156     static String toString(PassType type) { return String::format("%f %f %f %f", type.x(), type.y(), type.width(), type.height()); }
157 };
158 
159 // SVGAnimatedString
160 template<>
161 struct SVGAnimatedPropertyTraits<String> : public Noncopyable {
162     typedef const String& PassType;
163     typedef String ReturnType;
164     typedef String StoredType;
165 
166     static ReturnType null() { return String(); }
167     static ReturnType toReturnType(const StoredType& type) { return type; }
168     static String toString(PassType type) { return type; }
169 };
170 
171 // SVGAnimatedTransformList
172 template<>
173 struct SVGAnimatedPropertyTraits<SVGTransformList*> : public Noncopyable {
174     typedef SVGTransformList* PassType;
175     typedef SVGTransformList* ReturnType;
176     typedef RefPtr<SVGTransformList> StoredType;
177 
178     static ReturnType null() { return 0; }
179     static ReturnType toReturnType(const StoredType& type) { return type.get(); }
180     static String toString(PassType type) { return type ? type->valueAsString() : String(); }
181 };
182 
183 }
184 
185 #endif
186 #endif
187