OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
.org> | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
.org> |
3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> |
4 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 typedef OwnerType UseOwnerType; | 84 typedef OwnerType UseOwnerType; |
85 | 85 |
86 #define REGISTER_LOCAL_ANIMATED_PROPERTY(LowerProperty) \ | 86 #define REGISTER_LOCAL_ANIMATED_PROPERTY(LowerProperty) \ |
87 map.addProperty(UseOwnerType::LowerProperty##PropertyInfo()); | 87 map.addProperty(UseOwnerType::LowerProperty##PropertyInfo()); |
88 | 88 |
89 #define REGISTER_PARENT_ANIMATED_PROPERTIES(ClassName) \ | 89 #define REGISTER_PARENT_ANIMATED_PROPERTIES(ClassName) \ |
90 map.addProperties(ClassName::attributeToPropertyMap()); \ | 90 map.addProperties(ClassName::attributeToPropertyMap()); \ |
91 | 91 |
92 #define END_REGISTER_ANIMATED_PROPERTIES } | 92 #define END_REGISTER_ANIMATED_PROPERTIES } |
93 | 93 |
94 // Property definition helpers (used in SVG*.cpp files) | |
95 #define DEFINE_ANIMATED_PROPERTY(AnimatedPropertyTypeEnum, OwnerType, DOMAttribu
te, SVGDOMAttributeIdentifier, UpperProperty, LowerProperty, TearOffType, Proper
tyType) \ | |
96 const SVGPropertyInfo* OwnerType::LowerProperty##PropertyInfo() { \ | |
97 DEFINE_STATIC_LOCAL(const SVGPropertyInfo, s_propertyInfo, \ | |
98 (AnimatedPropertyTypeEnum, \ | |
99 PropertyIsReadWrite, \ | |
100 DOMAttribute, \ | |
101 SVGDOMAttributeIdentifier, \ | |
102 &OwnerType::synchronize##UpperProperty, \ | |
103 &OwnerType::lookupOrCreate##UpperProperty##Wrapper)); \ | |
104 return &s_propertyInfo; \ | |
105 } \ | |
106 bool OwnerType::LowerProperty##Specified() const \ | |
107 { \ | |
108 if (TearOffType* wrapper = SVGAnimatedProperty::lookupWrapper<UseOwnerType,
TearOffType>(this, LowerProperty##PropertyInfo())) { \ | |
109 if (wrapper->isAnimating()) \ | |
110 return true; \ | |
111 } \ | |
112 return hasAttribute(SVGDOMAttributeIdentifier); \ | |
113 } \ | |
114 PropertyType& OwnerType::LowerProperty##CurrentValue() const \ | |
115 { \ | |
116 if (TearOffType* wrapper = SVGAnimatedProperty::lookupWrapper<UseOwnerType,
TearOffType>(this, LowerProperty##PropertyInfo())) { \ | |
117 if (wrapper->isAnimating()) \ | |
118 return wrapper->currentAnimatedValue(); \ | |
119 } \ | |
120 return m_##LowerProperty.value; \ | |
121 } \ | |
122 \ | |
123 PropertyType& OwnerType::LowerProperty##BaseValue() const \ | |
124 { \ | |
125 return m_##LowerProperty.value; \ | |
126 } \ | |
127 \ | |
128 void OwnerType::set##UpperProperty##BaseValue(const PropertyType& type) \ | |
129 { \ | |
130 m_##LowerProperty.value = type; \ | |
131 } \ | |
132 \ | |
133 PassRefPtr<TearOffType> OwnerType::LowerProperty() \ | |
134 { \ | |
135 m_##LowerProperty.shouldSynchronize = true; \ | |
136 return static_pointer_cast<TearOffType>(lookupOrCreate##UpperProperty##Wrapp
er(this)); \ | |
137 } \ | |
138 \ | |
139 void OwnerType::synchronize##UpperProperty() \ | |
140 { \ | |
141 if (!m_##LowerProperty.shouldSynchronize) \ | |
142 return; \ | |
143 AtomicString value(SVGPropertyTraits<PropertyType>::toString(m_##LowerProper
ty.value)); \ | |
144 m_##LowerProperty.synchronize(this, LowerProperty##PropertyInfo()->attribute
Name, value); \ | |
145 } \ | |
146 \ | |
147 PassRefPtr<SVGAnimatedProperty> OwnerType::lookupOrCreate##UpperProperty##Wrappe
r(SVGElement* maskedOwnerType) \ | |
148 { \ | |
149 ASSERT(maskedOwnerType); \ | |
150 UseOwnerType* ownerType = static_cast<UseOwnerType*>(maskedOwnerType); \ | |
151 return SVGAnimatedProperty::lookupOrCreateWrapper<UseOwnerType, TearOffType,
PropertyType>(ownerType, LowerProperty##PropertyInfo(), ownerType->m_##LowerPro
perty.value); \ | |
152 } \ | |
153 \ | |
154 void OwnerType::synchronize##UpperProperty(SVGElement* maskedOwnerType) \ | |
155 { \ | |
156 ASSERT(maskedOwnerType); \ | |
157 UseOwnerType* ownerType = static_cast<UseOwnerType*>(maskedOwnerType); \ | |
158 ownerType->synchronize##UpperProperty(); \ | |
159 } | |
160 | |
161 // Property declaration helpers (used in SVG*.h files) | 94 // Property declaration helpers (used in SVG*.h files) |
162 #define BEGIN_DECLARE_ANIMATED_PROPERTIES(OwnerType) \ | 95 #define BEGIN_DECLARE_ANIMATED_PROPERTIES(OwnerType) \ |
163 public: \ | 96 public: \ |
164 static SVGAttributeToPropertyMap& attributeToPropertyMap(); \ | 97 static SVGAttributeToPropertyMap& attributeToPropertyMap(); \ |
165 virtual SVGAttributeToPropertyMap& localAttributeToPropertyMap() const; \ | 98 virtual SVGAttributeToPropertyMap& localAttributeToPropertyMap() const; \ |
166 void registerAnimatedPropertiesFor##OwnerType(); \ | 99 void registerAnimatedPropertiesFor##OwnerType(); \ |
167 typedef OwnerType UseOwnerType; | 100 typedef OwnerType UseOwnerType; |
168 | 101 |
169 #define DECLARE_ANIMATED_PROPERTY(TearOffType, PropertyType, UpperProperty, Lowe
rProperty) \ | 102 #define DECLARE_ANIMATED_PROPERTY(TearOffType, PropertyType, UpperProperty, Lowe
rProperty) \ |
170 public: \ | 103 public: \ |
171 static const SVGPropertyInfo* LowerProperty##PropertyInfo(); \ | 104 static const SVGPropertyInfo* LowerProperty##PropertyInfo(); \ |
172 bool LowerProperty##Specified() const; \ | 105 bool LowerProperty##Specified() const; \ |
173 PropertyType& LowerProperty##CurrentValue() const; \ | 106 PropertyType& LowerProperty##CurrentValue() const; \ |
174 PropertyType& LowerProperty##BaseValue() const; \ | 107 PropertyType& LowerProperty##BaseValue() const; \ |
175 void set##UpperProperty##BaseValue(const PropertyType& type); \ | 108 void set##UpperProperty##BaseValue(const PropertyType& type); \ |
176 PassRefPtr<TearOffType> LowerProperty(); \ | 109 PassRefPtr<TearOffType> LowerProperty(); \ |
177 \ | 110 \ |
178 private: \ | 111 private: \ |
179 void synchronize##UpperProperty(); \ | 112 void synchronize##UpperProperty(); \ |
180 static PassRefPtr<SVGAnimatedProperty> lookupOrCreate##UpperProperty##Wrappe
r(SVGElement* maskedOwnerType); \ | 113 static PassRefPtr<SVGAnimatedProperty> lookupOrCreate##UpperProperty##Wrappe
r(SVGElement* maskedOwnerType); \ |
181 static void synchronize##UpperProperty(SVGElement* maskedOwnerType); \ | 114 static void synchronize##UpperProperty(SVGElement* maskedOwnerType); \ |
182 \ | 115 \ |
183 mutable SVGSynchronizableAnimatedProperty<PropertyType> m_##LowerProperty; | 116 mutable SVGSynchronizableAnimatedProperty<PropertyType> m_##LowerProperty; |
184 | 117 |
185 #define END_DECLARE_ANIMATED_PROPERTIES \ | 118 #define END_DECLARE_ANIMATED_PROPERTIES \ |
186 CleanUpAnimatedPropertiesCaller m_cleanupAnimatedPropertiesCaller; | 119 CleanUpAnimatedPropertiesCaller m_cleanupAnimatedPropertiesCaller; |
187 | 120 |
188 // List specific definition/declaration helpers | |
189 #define DECLARE_ANIMATED_LIST_PROPERTY(TearOffType, PropertyType, UpperProperty,
LowerProperty) \ | |
190 DECLARE_ANIMATED_PROPERTY(TearOffType, PropertyType, UpperProperty, LowerPropert
y) \ | |
191 void detachAnimated##UpperProperty##ListWrappers(unsigned newListSize) \ | |
192 { \ | |
193 if (TearOffType* wrapper = SVGAnimatedProperty::lookupWrapper<UseOwnerType,
TearOffType>(this, LowerProperty##PropertyInfo())) \ | |
194 wrapper->detachListWrappers(newListSize); \ | |
195 } | |
196 | |
197 } | 121 } |
198 | 122 |
199 #endif // SVGAnimatedPropertyMacros_h | 123 #endif // SVGAnimatedPropertyMacros_h |
OLD | NEW |