/src/gpac/src/scenegraph/svg_properties.c
Line | Count | Source |
1 | | /* |
2 | | * GPAC Multimedia Framework |
3 | | * |
4 | | * Authors: Cyril Concolato, Jean Le Feuvre |
5 | | * Copyright (c) Telecom ParisTech 2004-2012 |
6 | | * All rights reserved |
7 | | * |
8 | | * This file is part of GPAC / SVG Loader module |
9 | | * |
10 | | * GPAC is free software; you can redistribute it and/or modify |
11 | | * it under the terms of the GNU Lesser General Public License as published by |
12 | | * the Free Software Foundation; either version 2, or (at your option) |
13 | | * any later version. |
14 | | * |
15 | | * GPAC is distributed in the hope that it will be useful, |
16 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
18 | | * GNU Lesser General Public License for more details. |
19 | | * |
20 | | * You should have received a copy of the GNU Lesser General Public |
21 | | * License along with this library; see the file COPYING. If not, write to |
22 | | * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
23 | | * |
24 | | */ |
25 | | |
26 | | #include <gpac/scenegraph_svg.h> |
27 | | |
28 | | #ifndef GPAC_DISABLE_SVG |
29 | | |
30 | | #include <gpac/internal/scenegraph_dev.h> |
31 | | #include <gpac/nodes_svg.h> |
32 | | /* |
33 | | Initialization of properties at the top level before any rendering |
34 | | The value shall not use the 'inherit' value, it uses the initial value. |
35 | | The property values are then updated when going down the tree using svg_properties_apply |
36 | | */ |
37 | | GF_EXPORT |
38 | | void gf_svg_properties_init_pointers(SVGPropertiesPointers *svg_props) |
39 | 0 | { |
40 | 0 | if (!svg_props) return; |
41 | | |
42 | 0 | GF_SAFEALLOC(svg_props->audio_level, SVG_Number); |
43 | 0 | if (svg_props->audio_level) { |
44 | 0 | svg_props->audio_level->type = SVG_NUMBER_VALUE; |
45 | 0 | svg_props->audio_level->value = FIX_ONE; |
46 | 0 | svg_props->computed_audio_level = FIX_ONE; |
47 | 0 | } |
48 | | |
49 | 0 | GF_SAFEALLOC(svg_props->color, SVG_Paint); |
50 | 0 | if (svg_props->color) { |
51 | 0 | svg_props->color->type = SVG_PAINT_COLOR; |
52 | 0 | svg_props->color->color.type = SVG_COLOR_RGBCOLOR; |
53 | | /* svg_props->color->red, green, blue set to zero, so initial value for color property is black */ |
54 | 0 | } |
55 | | |
56 | 0 | GF_SAFEALLOC(svg_props->color_rendering, SVG_RenderingHint); |
57 | 0 | if (svg_props->color_rendering) *svg_props->color_rendering = SVG_RENDERINGHINT_AUTO; |
58 | |
|
59 | 0 | GF_SAFEALLOC(svg_props->display, SVG_Display); |
60 | 0 | if (svg_props->display) *svg_props->display = SVG_DISPLAY_INLINE; |
61 | |
|
62 | 0 | GF_SAFEALLOC(svg_props->display_align, SVG_DisplayAlign); |
63 | 0 | if (svg_props->display_align) *svg_props->display_align = SVG_DISPLAYALIGN_AUTO; |
64 | |
|
65 | 0 | GF_SAFEALLOC(svg_props->fill, SVG_Paint); |
66 | 0 | if (svg_props->fill) { |
67 | 0 | svg_props->fill->type = SVG_PAINT_COLOR; |
68 | 0 | svg_props->fill->color.type = SVG_COLOR_RGBCOLOR; |
69 | | /* svg_props->fill->color.red, green, blue set to zero, so initial value for fill color is black */ |
70 | 0 | } |
71 | 0 | GF_SAFEALLOC(svg_props->fill_opacity, SVG_Number); |
72 | 0 | if (svg_props->fill_opacity) { |
73 | 0 | svg_props->fill_opacity->type = SVG_NUMBER_VALUE; |
74 | 0 | svg_props->fill_opacity->value = FIX_ONE; |
75 | 0 | } |
76 | 0 | GF_SAFEALLOC(svg_props->fill_rule, SVG_FillRule); |
77 | 0 | if (svg_props->fill_rule) *svg_props->fill_rule = SVG_FILLRULE_NONZERO; |
78 | |
|
79 | 0 | GF_SAFEALLOC(svg_props->font_family, SVG_FontFamily); |
80 | 0 | if (svg_props->font_family) { |
81 | 0 | svg_props->font_family->type = SVG_FONTFAMILY_VALUE; |
82 | 0 | svg_props->font_family->value = gf_strdup("Arial"); |
83 | 0 | } |
84 | 0 | GF_SAFEALLOC(svg_props->font_size, SVG_FontSize); |
85 | 0 | if (svg_props->font_size) { |
86 | 0 | svg_props->font_size->type = SVG_NUMBER_VALUE; |
87 | 0 | svg_props->font_size->value = 12*FIX_ONE; |
88 | 0 | } |
89 | 0 | GF_SAFEALLOC(svg_props->font_style, SVG_FontStyle); |
90 | 0 | if (svg_props->font_style) *svg_props->font_style = SVG_FONTSTYLE_NORMAL; |
91 | |
|
92 | 0 | GF_SAFEALLOC(svg_props->font_variant, SVG_FontVariant); |
93 | 0 | if (svg_props->font_variant) *svg_props->font_variant = SVG_FONTVARIANT_NORMAL; |
94 | |
|
95 | 0 | GF_SAFEALLOC(svg_props->font_weight, SVG_FontWeight); |
96 | 0 | if (svg_props->font_weight) *svg_props->font_weight = SVG_FONTWEIGHT_NORMAL; |
97 | |
|
98 | 0 | GF_SAFEALLOC(svg_props->image_rendering, SVG_RenderingHint); |
99 | 0 | if (svg_props->image_rendering) *svg_props->image_rendering = SVG_RENDERINGHINT_AUTO; |
100 | |
|
101 | 0 | GF_SAFEALLOC(svg_props->line_increment, SVG_Number); |
102 | 0 | if (svg_props->line_increment) svg_props->line_increment->type = SVG_NUMBER_AUTO; |
103 | |
|
104 | 0 | GF_SAFEALLOC(svg_props->opacity, SVG_Number); |
105 | 0 | if (svg_props->opacity) { |
106 | 0 | svg_props->opacity->type = SVG_NUMBER_VALUE; |
107 | 0 | svg_props->opacity->value = FIX_ONE; |
108 | 0 | } |
109 | 0 | GF_SAFEALLOC(svg_props->pointer_events, SVG_PointerEvents); |
110 | 0 | if (svg_props->pointer_events) *svg_props->pointer_events = SVG_POINTEREVENTS_VISIBLEPAINTED; |
111 | |
|
112 | 0 | GF_SAFEALLOC(svg_props->shape_rendering, SVG_RenderingHint); |
113 | 0 | if (svg_props->shape_rendering) *svg_props->shape_rendering = SVG_RENDERINGHINT_AUTO; |
114 | |
|
115 | 0 | GF_SAFEALLOC(svg_props->solid_color, SVG_Paint); |
116 | 0 | if (svg_props->solid_color) { |
117 | 0 | svg_props->solid_color->type = SVG_PAINT_COLOR; |
118 | 0 | svg_props->solid_color->color.type = SVG_COLOR_RGBCOLOR; |
119 | | /* svg_props->solid_color->color.red, green, blue set to zero, so initial value for solid_color is black */ |
120 | 0 | } |
121 | 0 | GF_SAFEALLOC(svg_props->solid_opacity, SVG_Number); |
122 | 0 | if (svg_props->solid_opacity) { |
123 | 0 | svg_props->solid_opacity->type = SVG_NUMBER_VALUE; |
124 | 0 | svg_props->solid_opacity->value = FIX_ONE; |
125 | 0 | } |
126 | 0 | GF_SAFEALLOC(svg_props->stop_color, SVG_Paint); |
127 | 0 | if (svg_props->stop_color) { |
128 | 0 | svg_props->stop_color->type = SVG_PAINT_COLOR; |
129 | 0 | svg_props->stop_color->color.type = SVG_COLOR_RGBCOLOR; |
130 | | /* svg_props->stop_color->color.red, green, blue set to zero, so initial value for stop_color is black */ |
131 | 0 | } |
132 | 0 | GF_SAFEALLOC(svg_props->stop_opacity, SVG_Number); |
133 | 0 | if (svg_props->stop_opacity) { |
134 | 0 | svg_props->stop_opacity->type = SVG_NUMBER_VALUE; |
135 | 0 | svg_props->stop_opacity->value = FIX_ONE; |
136 | 0 | } |
137 | 0 | GF_SAFEALLOC(svg_props->stroke, SVG_Paint); |
138 | 0 | if (svg_props->stroke) { |
139 | 0 | svg_props->stroke->type = SVG_PAINT_NONE; |
140 | 0 | svg_props->stroke->color.type = SVG_COLOR_RGBCOLOR; |
141 | | /* svg_props->stroke->color.red, green, blue set to zero, so initial value for stroke color is black */ |
142 | 0 | } |
143 | | |
144 | 0 | GF_SAFEALLOC(svg_props->stroke_dasharray, SVG_StrokeDashArray); |
145 | 0 | if (svg_props->stroke_dasharray) svg_props->stroke_dasharray->type = SVG_STROKEDASHARRAY_NONE; |
146 | |
|
147 | 0 | GF_SAFEALLOC(svg_props->stroke_dashoffset , SVG_Length); |
148 | 0 | if (svg_props->stroke_dashoffset) { |
149 | 0 | svg_props->stroke_dashoffset->type = SVG_NUMBER_VALUE; |
150 | 0 | svg_props->stroke_dashoffset->value = 0; |
151 | 0 | } |
152 | | |
153 | 0 | GF_SAFEALLOC(svg_props->stroke_linecap, SVG_StrokeLineCap); |
154 | 0 | if (svg_props->stroke_linecap) *svg_props->stroke_linecap = SVG_STROKELINECAP_BUTT; |
155 | |
|
156 | 0 | GF_SAFEALLOC(svg_props->stroke_linejoin, SVG_StrokeLineJoin); |
157 | 0 | if (svg_props->stroke_linejoin) *svg_props->stroke_linejoin = SVG_STROKELINEJOIN_MITER; |
158 | |
|
159 | 0 | GF_SAFEALLOC(svg_props->stroke_miterlimit, SVG_Number); |
160 | 0 | if (svg_props->stroke_miterlimit) { |
161 | 0 | svg_props->stroke_miterlimit->type = SVG_NUMBER_VALUE; |
162 | 0 | svg_props->stroke_miterlimit->value = 4*FIX_ONE; |
163 | 0 | } |
164 | 0 | GF_SAFEALLOC(svg_props->stroke_opacity, SVG_Number); |
165 | 0 | if (svg_props->stroke_opacity) { |
166 | 0 | svg_props->stroke_opacity->type = SVG_NUMBER_VALUE; |
167 | 0 | svg_props->stroke_opacity->value = FIX_ONE; |
168 | 0 | } |
169 | 0 | GF_SAFEALLOC(svg_props->stroke_width, SVG_Length); |
170 | 0 | if (svg_props->stroke_width) { |
171 | 0 | svg_props->stroke_width->type = SVG_NUMBER_VALUE; |
172 | 0 | svg_props->stroke_width->value = FIX_ONE; |
173 | 0 | } |
174 | 0 | GF_SAFEALLOC(svg_props->text_align, SVG_TextAlign); |
175 | 0 | if (svg_props->text_align) *svg_props->text_align = SVG_TEXTALIGN_START; |
176 | |
|
177 | 0 | GF_SAFEALLOC(svg_props->text_anchor, SVG_TextAnchor); |
178 | 0 | if (svg_props->text_anchor) *svg_props->text_anchor = SVG_TEXTANCHOR_START; |
179 | |
|
180 | 0 | GF_SAFEALLOC(svg_props->text_rendering, SVG_RenderingHint); |
181 | 0 | if (svg_props->text_rendering) *svg_props->text_rendering = SVG_RENDERINGHINT_AUTO; |
182 | |
|
183 | 0 | GF_SAFEALLOC(svg_props->vector_effect, SVG_VectorEffect); |
184 | 0 | if (svg_props->vector_effect) *svg_props->vector_effect = SVG_VECTOREFFECT_NONE; |
185 | |
|
186 | 0 | GF_SAFEALLOC(svg_props->viewport_fill, SVG_Paint); |
187 | 0 | if (svg_props->viewport_fill) svg_props->viewport_fill->type = SVG_PAINT_NONE; |
188 | |
|
189 | 0 | GF_SAFEALLOC(svg_props->viewport_fill_opacity, SVG_Number); |
190 | 0 | if (svg_props->viewport_fill_opacity) { |
191 | 0 | svg_props->viewport_fill_opacity->type = SVG_NUMBER_VALUE; |
192 | 0 | svg_props->viewport_fill_opacity->value = FIX_ONE; |
193 | 0 | } |
194 | 0 | GF_SAFEALLOC(svg_props->visibility, SVG_Visibility); |
195 | 0 | if (svg_props->visibility) *svg_props->visibility = SVG_VISIBILITY_VISIBLE; |
196 | |
|
197 | 0 | } |
198 | | |
199 | | GF_EXPORT |
200 | | void gf_svg_properties_reset_pointers(SVGPropertiesPointers *svg_props) |
201 | 0 | { |
202 | 0 | if (!svg_props) return; |
203 | 0 | if(svg_props->audio_level) gf_free(svg_props->audio_level); |
204 | 0 | gf_svg_delete_paint(NULL, svg_props->color); |
205 | 0 | if(svg_props->color_rendering) gf_free(svg_props->color_rendering); |
206 | 0 | if(svg_props->display) gf_free(svg_props->display); |
207 | 0 | if(svg_props->display_align) gf_free(svg_props->display_align); |
208 | 0 | gf_svg_delete_paint(NULL, svg_props->fill); |
209 | 0 | if(svg_props->fill_opacity) gf_free(svg_props->fill_opacity); |
210 | 0 | if(svg_props->fill_rule) gf_free(svg_props->fill_rule); |
211 | 0 | if(svg_props->font_family) { |
212 | 0 | if (svg_props->font_family->value) gf_free(svg_props->font_family->value); |
213 | 0 | gf_free(svg_props->font_family); |
214 | 0 | } |
215 | 0 | if(svg_props->font_size) gf_free(svg_props->font_size); |
216 | 0 | if(svg_props->font_style) gf_free(svg_props->font_style); |
217 | 0 | if(svg_props->font_variant) gf_free(svg_props->font_variant); |
218 | 0 | if(svg_props->font_weight) gf_free(svg_props->font_weight); |
219 | 0 | if(svg_props->image_rendering) gf_free(svg_props->image_rendering); |
220 | 0 | if(svg_props->line_increment) gf_free(svg_props->line_increment); |
221 | 0 | if(svg_props->opacity) gf_free(svg_props->opacity); |
222 | 0 | if(svg_props->pointer_events) gf_free(svg_props->pointer_events); |
223 | 0 | if(svg_props->shape_rendering) gf_free(svg_props->shape_rendering); |
224 | 0 | gf_svg_delete_paint(NULL, svg_props->solid_color); |
225 | 0 | if(svg_props->solid_opacity) gf_free(svg_props->solid_opacity); |
226 | 0 | gf_svg_delete_paint(NULL, svg_props->stop_color); |
227 | 0 | if(svg_props->stop_opacity) gf_free(svg_props->stop_opacity); |
228 | 0 | gf_svg_delete_paint(NULL, svg_props->stroke); |
229 | 0 | if(svg_props->stroke_dasharray) { |
230 | 0 | if (svg_props->stroke_dasharray->array.count) gf_free(svg_props->stroke_dasharray->array.vals); |
231 | 0 | gf_free(svg_props->stroke_dasharray); |
232 | 0 | } |
233 | 0 | if(svg_props->stroke_dashoffset) gf_free(svg_props->stroke_dashoffset); |
234 | 0 | if(svg_props->stroke_linecap) gf_free(svg_props->stroke_linecap); |
235 | 0 | if(svg_props->stroke_linejoin) gf_free(svg_props->stroke_linejoin); |
236 | 0 | if(svg_props->stroke_miterlimit) gf_free(svg_props->stroke_miterlimit); |
237 | 0 | if(svg_props->stroke_opacity) gf_free(svg_props->stroke_opacity); |
238 | 0 | if(svg_props->stroke_width) gf_free(svg_props->stroke_width); |
239 | 0 | if(svg_props->text_align) gf_free(svg_props->text_align); |
240 | 0 | if(svg_props->text_anchor) gf_free(svg_props->text_anchor); |
241 | 0 | if(svg_props->text_rendering) gf_free(svg_props->text_rendering); |
242 | 0 | if(svg_props->vector_effect) gf_free(svg_props->vector_effect); |
243 | 0 | gf_svg_delete_paint(NULL, svg_props->viewport_fill); |
244 | 0 | if(svg_props->viewport_fill_opacity) gf_free(svg_props->viewport_fill_opacity); |
245 | 0 | if(svg_props->visibility) gf_free(svg_props->visibility); |
246 | 0 | memset(svg_props, 0, sizeof(SVGPropertiesPointers)); |
247 | 0 | } |
248 | | |
249 | | |
250 | | void *gf_svg_get_property_pointer_from_tag(SVGPropertiesPointers *output_property_context, u32 prop_tag) |
251 | 0 | { |
252 | 0 | switch (prop_tag) { |
253 | 0 | case TAG_SVG_ATT_audio_level: |
254 | 0 | return output_property_context->audio_level; |
255 | 0 | case TAG_SVG_ATT_color: |
256 | 0 | return output_property_context->color; |
257 | 0 | case TAG_SVG_ATT_color_rendering: |
258 | 0 | return output_property_context->color_rendering; |
259 | 0 | case TAG_SVG_ATT_display: |
260 | 0 | return output_property_context->display; |
261 | 0 | case TAG_SVG_ATT_display_align: |
262 | 0 | return output_property_context->display_align; |
263 | 0 | case TAG_SVG_ATT_fill: |
264 | 0 | return output_property_context->fill; |
265 | 0 | case TAG_SVG_ATT_fill_opacity: |
266 | 0 | return output_property_context->fill_opacity; |
267 | 0 | case TAG_SVG_ATT_fill_rule: |
268 | 0 | return output_property_context->fill_rule; |
269 | 0 | case TAG_SVG_ATT_font_family: |
270 | 0 | return output_property_context->font_family; |
271 | 0 | case TAG_SVG_ATT_font_size: |
272 | 0 | return output_property_context->font_size; |
273 | 0 | case TAG_SVG_ATT_font_style: |
274 | 0 | return output_property_context->font_style; |
275 | 0 | case TAG_SVG_ATT_font_variant: |
276 | 0 | return output_property_context->font_variant; |
277 | 0 | case TAG_SVG_ATT_font_weight: |
278 | 0 | return output_property_context->font_weight; |
279 | 0 | case TAG_SVG_ATT_image_rendering: |
280 | 0 | return output_property_context->image_rendering; |
281 | 0 | case TAG_SVG_ATT_line_increment: |
282 | 0 | return output_property_context->line_increment; |
283 | 0 | case TAG_SVG_ATT_opacity: |
284 | 0 | return output_property_context->opacity; |
285 | 0 | case TAG_SVG_ATT_pointer_events: |
286 | 0 | return output_property_context->pointer_events; |
287 | 0 | case TAG_SVG_ATT_shape_rendering: |
288 | 0 | return output_property_context->shape_rendering; |
289 | 0 | case TAG_SVG_ATT_solid_color: |
290 | 0 | return output_property_context->solid_color; |
291 | 0 | case TAG_SVG_ATT_solid_opacity: |
292 | 0 | return output_property_context->solid_opacity; |
293 | 0 | case TAG_SVG_ATT_stop_color: |
294 | 0 | return output_property_context->stop_color; |
295 | 0 | case TAG_SVG_ATT_stop_opacity: |
296 | 0 | return output_property_context->stop_opacity; |
297 | 0 | case TAG_SVG_ATT_stroke: |
298 | 0 | return output_property_context->stroke; |
299 | 0 | case TAG_SVG_ATT_stroke_dasharray: |
300 | 0 | return output_property_context->stroke_dasharray; |
301 | 0 | case TAG_SVG_ATT_stroke_dashoffset: |
302 | 0 | return output_property_context->stroke_dashoffset; |
303 | 0 | case TAG_SVG_ATT_stroke_linecap: |
304 | 0 | return output_property_context->stroke_linecap; |
305 | 0 | case TAG_SVG_ATT_stroke_linejoin: |
306 | 0 | return output_property_context->stroke_linejoin; |
307 | 0 | case TAG_SVG_ATT_stroke_miterlimit: |
308 | 0 | return output_property_context->stroke_miterlimit; |
309 | 0 | case TAG_SVG_ATT_stroke_opacity: |
310 | 0 | return output_property_context->stroke_opacity; |
311 | 0 | case TAG_SVG_ATT_stroke_width: |
312 | 0 | return output_property_context->stroke_width; |
313 | 0 | case TAG_SVG_ATT_text_align: |
314 | 0 | return output_property_context->text_align; |
315 | 0 | case TAG_SVG_ATT_text_anchor: |
316 | 0 | return output_property_context->text_anchor; |
317 | 0 | case TAG_SVG_ATT_text_rendering: |
318 | 0 | return output_property_context->text_rendering; |
319 | 0 | case TAG_SVG_ATT_vector_effect: |
320 | 0 | return output_property_context->vector_effect; |
321 | 0 | case TAG_SVG_ATT_viewport_fill: |
322 | 0 | return output_property_context->viewport_fill; |
323 | 0 | case TAG_SVG_ATT_viewport_fill_opacity: |
324 | 0 | return output_property_context->viewport_fill_opacity; |
325 | 0 | case TAG_SVG_ATT_visibility: |
326 | 0 | return output_property_context->visibility; |
327 | 0 | default: |
328 | 0 | return NULL; |
329 | 0 | } |
330 | 0 | } |
331 | | |
332 | | void *gf_svg_get_property_pointer(SVG_Element *elt, void *input_attribute, |
333 | | SVGPropertiesPointers *output_property_context) |
334 | 0 | { |
335 | 0 | SVGAttribute *att = elt->attributes; |
336 | 0 | while (att) { |
337 | 0 | if (att->data == input_attribute) break; |
338 | 0 | att = att->next; |
339 | 0 | } |
340 | 0 | if (!att) return NULL; |
341 | 0 | return gf_svg_get_property_pointer_from_tag(output_property_context, att->tag); |
342 | 0 | } |
343 | | |
344 | | Bool gf_svg_is_property(GF_Node *node, GF_FieldInfo *target_attribute) |
345 | 0 | { |
346 | 0 | u32 tag = gf_node_get_tag(node); |
347 | |
|
348 | 0 | if (tag > GF_NODE_RANGE_LAST_VRML) { |
349 | 0 | SVG_Element *e = (SVG_Element *)node; |
350 | 0 | SVGAttribute *att = e->attributes; |
351 | 0 | while (att) { |
352 | 0 | if (att->data == target_attribute->far_ptr) break; |
353 | 0 | att = att->next; |
354 | 0 | } |
355 | 0 | if (!att) return 0; |
356 | 0 | switch (att->tag) { |
357 | 0 | case TAG_SVG_ATT_audio_level: |
358 | 0 | case TAG_SVG_ATT_color: |
359 | 0 | case TAG_SVG_ATT_color_rendering: |
360 | 0 | case TAG_SVG_ATT_display: |
361 | 0 | case TAG_SVG_ATT_display_align: |
362 | 0 | case TAG_SVG_ATT_fill: |
363 | 0 | case TAG_SVG_ATT_fill_opacity: |
364 | 0 | case TAG_SVG_ATT_fill_rule: |
365 | 0 | case TAG_SVG_ATT_font_family: |
366 | 0 | case TAG_SVG_ATT_font_size: |
367 | 0 | case TAG_SVG_ATT_font_style: |
368 | 0 | case TAG_SVG_ATT_font_variant: |
369 | 0 | case TAG_SVG_ATT_font_weight: |
370 | 0 | case TAG_SVG_ATT_image_rendering: |
371 | 0 | case TAG_SVG_ATT_line_increment: |
372 | 0 | case TAG_SVG_ATT_opacity: |
373 | 0 | case TAG_SVG_ATT_pointer_events: |
374 | 0 | case TAG_SVG_ATT_shape_rendering: |
375 | 0 | case TAG_SVG_ATT_solid_color: |
376 | 0 | case TAG_SVG_ATT_solid_opacity: |
377 | 0 | case TAG_SVG_ATT_stop_color: |
378 | 0 | case TAG_SVG_ATT_stop_opacity: |
379 | 0 | case TAG_SVG_ATT_stroke: |
380 | 0 | case TAG_SVG_ATT_stroke_dasharray: |
381 | 0 | case TAG_SVG_ATT_stroke_dashoffset: |
382 | 0 | case TAG_SVG_ATT_stroke_linecap: |
383 | 0 | case TAG_SVG_ATT_stroke_linejoin: |
384 | 0 | case TAG_SVG_ATT_stroke_miterlimit: |
385 | 0 | case TAG_SVG_ATT_stroke_opacity: |
386 | 0 | case TAG_SVG_ATT_stroke_width: |
387 | 0 | case TAG_SVG_ATT_text_align: |
388 | 0 | case TAG_SVG_ATT_text_anchor: |
389 | 0 | case TAG_SVG_ATT_text_rendering: |
390 | 0 | case TAG_SVG_ATT_vector_effect: |
391 | 0 | case TAG_SVG_ATT_viewport_fill: |
392 | 0 | case TAG_SVG_ATT_viewport_fill_opacity: |
393 | 0 | case TAG_SVG_ATT_visibility: |
394 | 0 | return 1; |
395 | 0 | default: |
396 | 0 | return 0; |
397 | 0 | } |
398 | 0 | } |
399 | 0 | else { |
400 | 0 | return 0; |
401 | 0 | } |
402 | 0 | } |
403 | | |
404 | | /* TODO: Check that all possibly inherited types are treated */ |
405 | | Bool gf_svg_is_inherit(GF_FieldInfo *a) |
406 | 0 | { |
407 | 0 | if (!a->far_ptr) return 1; |
408 | | |
409 | 0 | switch (a->fieldType) { |
410 | 0 | case SVG_Color_datatype: |
411 | 0 | return (((SVG_Color *)a->far_ptr)->type == SVG_COLOR_INHERIT); |
412 | 0 | break; |
413 | 0 | case SVG_Paint_datatype: |
414 | 0 | return (((SVG_Paint *)a->far_ptr)->type == SVG_PAINT_INHERIT); |
415 | 0 | break; |
416 | 0 | case SVG_FontSize_datatype: |
417 | 0 | case SVG_Number_datatype: |
418 | 0 | return (((SVG_Number *)a->far_ptr)->type == SVG_NUMBER_INHERIT); |
419 | 0 | break; |
420 | 0 | case SVG_RenderingHint_datatype: |
421 | 0 | return (*((SVG_RenderingHint *)a->far_ptr) == SVG_RENDERINGHINT_INHERIT); |
422 | 0 | break; |
423 | 0 | case SVG_Display_datatype: |
424 | 0 | return (*((SVG_Display *)a->far_ptr) == SVG_DISPLAY_INHERIT); |
425 | 0 | break; |
426 | 0 | case SVG_DisplayAlign_datatype: |
427 | 0 | return (*((SVG_DisplayAlign *)a->far_ptr) == SVG_DISPLAYALIGN_INHERIT); |
428 | 0 | break; |
429 | 0 | case SVG_TextAlign_datatype: |
430 | 0 | return (*((SVG_TextAlign *)a->far_ptr) == SVG_TEXTALIGN_INHERIT); |
431 | 0 | break; |
432 | 0 | case SVG_FillRule_datatype: |
433 | 0 | return (*((SVG_FillRule *)a->far_ptr) == SVG_FILLRULE_INHERIT); |
434 | 0 | break; |
435 | 0 | case SVG_FontFamily_datatype: |
436 | 0 | return (((SVG_FontFamily *)a->far_ptr)->type == SVG_FONTFAMILY_INHERIT); |
437 | 0 | break; |
438 | 0 | case SVG_FontStyle_datatype: |
439 | 0 | return (*((SVG_FontStyle *)a->far_ptr) == SVG_FONTSTYLE_INHERIT); |
440 | 0 | break; |
441 | 0 | case SVG_FontWeight_datatype: |
442 | 0 | return (*((SVG_FontWeight *)a->far_ptr) == SVG_FONTWEIGHT_INHERIT); |
443 | 0 | break; |
444 | 0 | case SVG_PointerEvents_datatype: |
445 | 0 | return (*((SVG_PointerEvents *)a->far_ptr) == SVG_POINTEREVENTS_INHERIT); |
446 | 0 | break; |
447 | 0 | case SVG_StrokeDashArray_datatype: |
448 | 0 | return (((SVG_StrokeDashArray *)a->far_ptr)->type == SVG_STROKEDASHARRAY_INHERIT); |
449 | 0 | break; |
450 | 0 | case SVG_StrokeLineCap_datatype: |
451 | 0 | return (*((SVG_StrokeLineCap *)a->far_ptr) == SVG_STROKELINECAP_INHERIT); |
452 | 0 | break; |
453 | 0 | case SVG_StrokeLineJoin_datatype: |
454 | 0 | return (*((SVG_StrokeLineJoin *)a->far_ptr) == SVG_STROKELINEJOIN_INHERIT); |
455 | 0 | break; |
456 | 0 | case SVG_TextAnchor_datatype: |
457 | 0 | return (*((SVG_TextAnchor *)a->far_ptr) == SVG_TEXTANCHOR_INHERIT); |
458 | 0 | break; |
459 | 0 | case SVG_VectorEffect_datatype: |
460 | 0 | return (*((SVG_VectorEffect *)a->far_ptr) == SVG_VECTOREFFECT_INHERIT); |
461 | 0 | break; |
462 | 0 | case SVG_Visibility_datatype: |
463 | 0 | return (*((SVG_Visibility *)a->far_ptr) == SVG_VISIBILITY_INHERIT); |
464 | 0 | break; |
465 | 0 | case SVG_Overflow_datatype: |
466 | 0 | return (*((SVG_Overflow *)a->far_ptr) == SVG_OVERFLOW_INHERIT); |
467 | 0 | break; |
468 | 0 | default: |
469 | 0 | return 0; |
470 | 0 | } |
471 | 0 | } |
472 | | |
473 | | |
474 | | u32 gf_svg_get_modification_flags(SVG_Element *n, GF_FieldInfo *info) |
475 | 0 | { |
476 | | // return 0xFFFFFFFF; |
477 | 0 | switch (info->fieldType) { |
478 | 0 | case SVG_Paint_datatype: |
479 | 0 | if (info->fieldIndex == TAG_SVG_ATT_fill) return GF_SG_SVG_FILL_DIRTY; |
480 | 0 | if (info->fieldIndex == TAG_SVG_ATT_stroke) return GF_SG_SVG_STROKE_DIRTY; |
481 | 0 | if (info->fieldIndex == TAG_SVG_ATT_solid_color) return GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY; |
482 | 0 | if (info->fieldIndex == TAG_SVG_ATT_stop_color) return GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY; |
483 | 0 | if (info->fieldIndex == TAG_SVG_ATT_color) return GF_SG_SVG_COLOR_DIRTY; |
484 | 0 | break; |
485 | 0 | case SVG_Number_datatype: |
486 | 0 | if (info->fieldIndex == TAG_SVG_ATT_opacity) return GF_SG_SVG_OPACITY_DIRTY; |
487 | 0 | if (info->fieldIndex == TAG_SVG_ATT_fill_opacity) return GF_SG_SVG_FILLOPACITY_DIRTY; |
488 | 0 | if (info->fieldIndex == TAG_SVG_ATT_stroke_opacity) return GF_SG_SVG_STROKEOPACITY_DIRTY; |
489 | 0 | if (info->fieldIndex == TAG_SVG_ATT_solid_opacity) return GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY; |
490 | 0 | if (info->fieldIndex == TAG_SVG_ATT_stop_opacity) return GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY; |
491 | 0 | if (info->fieldIndex == TAG_SVG_ATT_line_increment) return GF_SG_SVG_LINEINCREMENT_DIRTY; |
492 | 0 | if (info->fieldIndex == TAG_SVG_ATT_stroke_miterlimit) return GF_SG_SVG_STROKEMITERLIMIT_DIRTY; |
493 | 0 | break; |
494 | 0 | case SVG_Length_datatype: |
495 | 0 | if (info->fieldIndex == TAG_SVG_ATT_stroke_dashoffset) return GF_SG_SVG_STROKEDASHOFFSET_DIRTY; |
496 | 0 | if (info->fieldIndex == TAG_SVG_ATT_stroke_width) return GF_SG_SVG_STROKEWIDTH_DIRTY; |
497 | 0 | break; |
498 | 0 | case SVG_DisplayAlign_datatype: |
499 | 0 | return GF_SG_SVG_DISPLAYALIGN_DIRTY; |
500 | 0 | case SVG_FillRule_datatype: |
501 | 0 | return GF_SG_SVG_FILLRULE_DIRTY; |
502 | 0 | case SVG_FontFamily_datatype: |
503 | 0 | return GF_SG_SVG_FONTFAMILY_DIRTY; |
504 | 0 | case SVG_FontSize_datatype: |
505 | 0 | return GF_SG_SVG_FONTSIZE_DIRTY; |
506 | 0 | case SVG_FontStyle_datatype: |
507 | 0 | return GF_SG_SVG_FONTSTYLE_DIRTY; |
508 | 0 | case SVG_FontVariant_datatype: |
509 | 0 | return GF_SG_SVG_FONTVARIANT_DIRTY; |
510 | 0 | case SVG_FontWeight_datatype: |
511 | 0 | return GF_SG_SVG_FONTWEIGHT_DIRTY; |
512 | 0 | case SVG_StrokeDashArray_datatype: |
513 | 0 | return GF_SG_SVG_STROKEDASHARRAY_DIRTY; |
514 | 0 | case SVG_StrokeLineCap_datatype: |
515 | 0 | return GF_SG_SVG_STROKELINECAP_DIRTY; |
516 | 0 | case SVG_StrokeLineJoin_datatype: |
517 | 0 | return GF_SG_SVG_STROKELINEJOIN_DIRTY; |
518 | 0 | case SVG_TextAlign_datatype: |
519 | 0 | return GF_SG_SVG_TEXTPOSITION_DIRTY; |
520 | 0 | case SVG_TextAnchor_datatype: |
521 | 0 | return GF_SG_SVG_TEXTPOSITION_DIRTY; |
522 | 0 | case SVG_Display_datatype: |
523 | 0 | return GF_SG_SVG_DISPLAY_DIRTY; |
524 | 0 | case SVG_VectorEffect_datatype: |
525 | 0 | return GF_SG_SVG_VECTOREFFECT_DIRTY; |
526 | 0 | } |
527 | | |
528 | | /* this is not a property but a regular attribute, the animatable attributes are at the moment: |
529 | | focusable, focusHighlight, gradientUnits, nav-*, target, xlink:href, xlink:type, |
530 | | |
531 | | |
532 | | the following affect the geometry of the element (some affect the positioning): |
533 | | cx, cy, d, height, offset, pathLength, points, r, rx, ry, width, x, x1, x2, y, y1, y2, rotate |
534 | | |
535 | | the following affect the positioning and are computed at each frame: |
536 | | transform, motion |
537 | | */ |
538 | 0 | switch (info->fieldType) { |
539 | 0 | case SVG_Number_datatype: |
540 | 0 | case SVG_Length_datatype: |
541 | 0 | case SVG_Coordinate_datatype: |
542 | 0 | case SVG_Numbers_datatype: |
543 | 0 | case SVG_Points_datatype: |
544 | 0 | case SVG_Coordinates_datatype: |
545 | 0 | case SVG_PathData_datatype: |
546 | 0 | case SVG_Rotate_datatype: |
547 | 0 | return GF_SG_SVG_GEOMETRY_DIRTY; |
548 | | |
549 | 0 | case XMLRI_datatype: |
550 | 0 | return GF_SG_SVG_XLINK_HREF_DIRTY; |
551 | | /*for viewbox & PAR, use node dirty to force recomputing of the viewbox*/ |
552 | 0 | case SVG_PreserveAspectRatio_datatype: |
553 | 0 | case SVG_ViewBox_datatype: |
554 | 0 | return GF_SG_NODE_DIRTY; |
555 | | |
556 | | //case SVG_Matrix_datatype: |
557 | | //case SVG_Motion_datatype: |
558 | | |
559 | 0 | default: |
560 | 0 | return 0; |
561 | 0 | } |
562 | 0 | } |
563 | | |
564 | | /* NOTE: Some properties (audio-level, display, opacity, solid*, stop*, vector-effect, viewport*) |
565 | | are inherited only when they are specified with the value 'inherit' |
566 | | otherwise they default to their initial value |
567 | | which for the function below means NULL, the compositor will take care of the rest |
568 | | */ |
569 | | GF_EXPORT |
570 | | u32 gf_svg_apply_inheritance(SVGAllAttributes *all_atts, SVGPropertiesPointers *render_svg_props) |
571 | 0 | { |
572 | 0 | u32 inherited_flags_mask = GF_SG_NODE_DIRTY | GF_SG_CHILD_DIRTY; |
573 | 0 | if(!all_atts || !render_svg_props) return ~inherited_flags_mask; |
574 | | |
575 | 0 | if (!all_atts->audio_level) { |
576 | 0 | render_svg_props->audio_level = NULL; |
577 | 0 | } else { |
578 | 0 | Fixed par_val = render_svg_props->computed_audio_level; |
579 | 0 | Fixed val; |
580 | 0 | if (all_atts->audio_level->type != SVG_NUMBER_INHERIT) { |
581 | 0 | render_svg_props->audio_level = all_atts->audio_level; |
582 | 0 | val = all_atts->audio_level->value; |
583 | 0 | } else if (render_svg_props->audio_level) { |
584 | 0 | val = render_svg_props->audio_level->value; |
585 | 0 | } else { |
586 | 0 | val = FIX_ONE; |
587 | 0 | } |
588 | 0 | par_val = MIN(FIX_ONE, MAX( par_val, 0)); |
589 | 0 | val = MIN(FIX_ONE, MAX( val, 0)); |
590 | 0 | render_svg_props->computed_audio_level = gf_mulfix(val, par_val); |
591 | 0 | } |
592 | |
|
593 | 0 | if (all_atts->color && all_atts->color->type == SVG_PAINT_COLOR |
594 | 0 | && all_atts->color->color.type != SVG_COLOR_INHERIT) { |
595 | 0 | render_svg_props->color = all_atts->color; |
596 | 0 | } else { |
597 | 0 | inherited_flags_mask |= GF_SG_SVG_COLOR_DIRTY; |
598 | 0 | } |
599 | 0 | if (all_atts->color_rendering && *(all_atts->color_rendering) != SVG_RENDERINGHINT_INHERIT) { |
600 | 0 | render_svg_props->color_rendering = all_atts->color_rendering; |
601 | 0 | } |
602 | 0 | if (all_atts->display && *(all_atts->display) != SVG_DISPLAY_INHERIT) { |
603 | 0 | render_svg_props->display = all_atts->display; |
604 | 0 | } else if (!all_atts->display) { |
605 | 0 | render_svg_props->display = NULL; |
606 | 0 | } else { |
607 | 0 | inherited_flags_mask |= GF_SG_SVG_DISPLAY_DIRTY; |
608 | 0 | } |
609 | |
|
610 | 0 | if (all_atts->display_align && *(all_atts->display_align) != SVG_DISPLAYALIGN_INHERIT) { |
611 | 0 | render_svg_props->display_align = all_atts->display_align; |
612 | 0 | } else { |
613 | 0 | inherited_flags_mask |= GF_SG_SVG_DISPLAYALIGN_DIRTY; |
614 | 0 | } |
615 | 0 | if (all_atts->fill && all_atts->fill->type != SVG_PAINT_INHERIT) { |
616 | 0 | render_svg_props->fill = all_atts->fill; |
617 | 0 | if (all_atts->fill->type == SVG_PAINT_COLOR && |
618 | 0 | all_atts->fill->color.type == SVG_COLOR_CURRENTCOLOR) { |
619 | 0 | render_svg_props->fill = render_svg_props->color; |
620 | 0 | if (inherited_flags_mask & GF_SG_SVG_COLOR_DIRTY) { |
621 | 0 | inherited_flags_mask |= GF_SG_SVG_FILL_DIRTY; |
622 | 0 | } |
623 | 0 | } |
624 | 0 | } else { |
625 | 0 | inherited_flags_mask |= GF_SG_SVG_FILL_DIRTY; |
626 | 0 | } |
627 | 0 | if (all_atts->fill_opacity && all_atts->fill_opacity->type != SVG_NUMBER_INHERIT) { |
628 | 0 | render_svg_props->fill_opacity = all_atts->fill_opacity; |
629 | 0 | } else { |
630 | 0 | inherited_flags_mask |= GF_SG_SVG_FILLOPACITY_DIRTY; |
631 | 0 | } |
632 | 0 | if (all_atts->fill_rule && *(all_atts->fill_rule) != SVG_FILLRULE_INHERIT) { |
633 | 0 | render_svg_props->fill_rule = all_atts->fill_rule; |
634 | 0 | } else { |
635 | 0 | inherited_flags_mask |= GF_SG_SVG_FILLRULE_DIRTY; |
636 | 0 | } |
637 | 0 | if (all_atts->font_family && all_atts->font_family->type != SVG_FONTFAMILY_INHERIT) { |
638 | 0 | render_svg_props->font_family = all_atts->font_family; |
639 | 0 | } else { |
640 | 0 | inherited_flags_mask |= GF_SG_SVG_FONTFAMILY_DIRTY; |
641 | 0 | } |
642 | 0 | if (all_atts->font_size && all_atts->font_size->type != SVG_NUMBER_INHERIT) { |
643 | 0 | render_svg_props->font_size = all_atts->font_size; |
644 | 0 | } else { |
645 | 0 | inherited_flags_mask |= GF_SG_SVG_FONTSIZE_DIRTY; |
646 | 0 | } |
647 | 0 | if (all_atts->font_style && *(all_atts->font_style) != SVG_FONTSTYLE_INHERIT) { |
648 | 0 | render_svg_props->font_style = all_atts->font_style; |
649 | 0 | } else { |
650 | 0 | inherited_flags_mask |= GF_SG_SVG_FONTSTYLE_DIRTY; |
651 | 0 | } |
652 | 0 | if (all_atts->font_variant && *(all_atts->font_variant) != SVG_FONTVARIANT_INHERIT) { |
653 | 0 | render_svg_props->font_variant = all_atts->font_variant; |
654 | 0 | } else { |
655 | 0 | inherited_flags_mask |= GF_SG_SVG_FONTVARIANT_DIRTY; |
656 | 0 | } |
657 | 0 | if (all_atts->font_weight && *(all_atts->font_weight) != SVG_FONTWEIGHT_INHERIT) { |
658 | 0 | render_svg_props->font_weight = all_atts->font_weight; |
659 | 0 | } else { |
660 | 0 | inherited_flags_mask |= GF_SG_SVG_FONTWEIGHT_DIRTY; |
661 | 0 | } |
662 | 0 | if (all_atts->image_rendering && *(all_atts->image_rendering) != SVG_RENDERINGHINT_INHERIT) { |
663 | 0 | render_svg_props->image_rendering = all_atts->image_rendering; |
664 | 0 | } |
665 | 0 | if (all_atts->line_increment && all_atts->line_increment->type != SVG_NUMBER_INHERIT) { |
666 | 0 | render_svg_props->line_increment = all_atts->line_increment; |
667 | 0 | } else { |
668 | 0 | inherited_flags_mask |= GF_SG_SVG_LINEINCREMENT_DIRTY; |
669 | 0 | } |
670 | 0 | if (all_atts->opacity && all_atts->opacity->type != SVG_NUMBER_INHERIT) { |
671 | 0 | render_svg_props->opacity = all_atts->opacity; |
672 | 0 | } else if (!all_atts->opacity) { |
673 | 0 | render_svg_props->opacity = NULL; |
674 | 0 | } else { |
675 | 0 | inherited_flags_mask |= GF_SG_SVG_OPACITY_DIRTY; |
676 | 0 | } |
677 | |
|
678 | 0 | if (all_atts->pointer_events && *(all_atts->pointer_events) != SVG_POINTEREVENTS_INHERIT) { |
679 | 0 | render_svg_props->pointer_events = all_atts->pointer_events; |
680 | 0 | } |
681 | 0 | if (all_atts->shape_rendering && *(all_atts->shape_rendering) != SVG_RENDERINGHINT_INHERIT) { |
682 | 0 | render_svg_props->shape_rendering = all_atts->shape_rendering; |
683 | 0 | } |
684 | 0 | if (all_atts->solid_color && all_atts->solid_color->type != SVG_PAINT_INHERIT) { |
685 | 0 | render_svg_props->solid_color = all_atts->solid_color; |
686 | 0 | if (all_atts->solid_color->type == SVG_PAINT_COLOR && |
687 | 0 | all_atts->solid_color->color.type == SVG_COLOR_CURRENTCOLOR) { |
688 | 0 | render_svg_props->solid_color = render_svg_props->color; |
689 | 0 | if (inherited_flags_mask & GF_SG_SVG_COLOR_DIRTY) { |
690 | 0 | inherited_flags_mask |= GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY; |
691 | 0 | } |
692 | 0 | } |
693 | 0 | } else if (!all_atts->solid_color) { |
694 | 0 | render_svg_props->solid_color = NULL; |
695 | 0 | } else { |
696 | 0 | inherited_flags_mask |= GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY; |
697 | 0 | } |
698 | 0 | if (all_atts->solid_opacity && all_atts->solid_opacity->type != SVG_NUMBER_INHERIT) { |
699 | 0 | render_svg_props->solid_opacity = all_atts->solid_opacity; |
700 | 0 | } else if (!all_atts->solid_opacity) { |
701 | 0 | render_svg_props->solid_opacity = NULL; |
702 | 0 | } else { |
703 | 0 | inherited_flags_mask |= GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY; |
704 | 0 | } |
705 | 0 | if (all_atts->stop_color && all_atts->stop_color->type != SVG_PAINT_INHERIT) { |
706 | 0 | render_svg_props->stop_color = all_atts->stop_color; |
707 | 0 | if (all_atts->stop_color->type == SVG_PAINT_COLOR && |
708 | 0 | all_atts->stop_color->color.type == SVG_COLOR_CURRENTCOLOR) { |
709 | 0 | render_svg_props->stop_color = render_svg_props->color; |
710 | 0 | if (inherited_flags_mask & GF_SG_SVG_COLOR_DIRTY) { |
711 | 0 | inherited_flags_mask |= GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY; |
712 | 0 | } |
713 | 0 | } |
714 | 0 | } else if (!all_atts->stop_color) { |
715 | 0 | render_svg_props->stop_color = NULL; |
716 | 0 | } else { |
717 | 0 | inherited_flags_mask |= GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY; |
718 | 0 | } |
719 | 0 | if (all_atts->stop_opacity && all_atts->stop_opacity->type != SVG_NUMBER_INHERIT) { |
720 | 0 | render_svg_props->stop_opacity = all_atts->stop_opacity; |
721 | 0 | } else if (!all_atts->stop_opacity) { |
722 | 0 | render_svg_props->stop_opacity = NULL; |
723 | 0 | } else { |
724 | 0 | inherited_flags_mask |= GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY; |
725 | 0 | } |
726 | 0 | if (all_atts->stroke && all_atts->stroke->type != SVG_PAINT_INHERIT) { |
727 | 0 | render_svg_props->stroke = all_atts->stroke; |
728 | 0 | if (all_atts->stroke->type == SVG_PAINT_COLOR && |
729 | 0 | all_atts->stroke->color.type == SVG_COLOR_CURRENTCOLOR) { |
730 | 0 | render_svg_props->stroke = render_svg_props->color; |
731 | 0 | if (inherited_flags_mask & GF_SG_SVG_COLOR_DIRTY) { |
732 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKE_DIRTY; |
733 | 0 | } |
734 | 0 | } |
735 | 0 | } else { |
736 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKE_DIRTY; |
737 | 0 | } |
738 | 0 | if (all_atts->stroke_dasharray && all_atts->stroke_dasharray->type != SVG_STROKEDASHARRAY_INHERIT) { |
739 | 0 | render_svg_props->stroke_dasharray = all_atts->stroke_dasharray; |
740 | 0 | } else { |
741 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKEDASHARRAY_DIRTY; |
742 | 0 | } |
743 | 0 | if (all_atts->stroke_dashoffset && all_atts->stroke_dashoffset->type != SVG_NUMBER_INHERIT) { |
744 | 0 | render_svg_props->stroke_dashoffset = all_atts->stroke_dashoffset; |
745 | 0 | } else { |
746 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKEDASHOFFSET_DIRTY; |
747 | 0 | } |
748 | 0 | if (all_atts->stroke_linecap && *(all_atts->stroke_linecap) != SVG_STROKELINECAP_INHERIT) { |
749 | 0 | render_svg_props->stroke_linecap = all_atts->stroke_linecap; |
750 | 0 | } else { |
751 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKELINECAP_DIRTY; |
752 | 0 | } |
753 | 0 | if (all_atts->stroke_linejoin && *(all_atts->stroke_linejoin) != SVG_STROKELINEJOIN_INHERIT) { |
754 | 0 | render_svg_props->stroke_linejoin = all_atts->stroke_linejoin; |
755 | 0 | } else { |
756 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKELINEJOIN_DIRTY; |
757 | 0 | } |
758 | 0 | if (all_atts->stroke_miterlimit && all_atts->stroke_miterlimit->type != SVG_NUMBER_INHERIT) { |
759 | 0 | render_svg_props->stroke_miterlimit = all_atts->stroke_miterlimit; |
760 | 0 | } else { |
761 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKEMITERLIMIT_DIRTY; |
762 | 0 | } |
763 | 0 | if (all_atts->stroke_opacity && all_atts->stroke_opacity->type != SVG_NUMBER_INHERIT) { |
764 | 0 | render_svg_props->stroke_opacity = all_atts->stroke_opacity; |
765 | 0 | } else { |
766 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKEOPACITY_DIRTY; |
767 | 0 | } |
768 | 0 | if (all_atts->stroke_width && all_atts->stroke_width->type != SVG_NUMBER_INHERIT) { |
769 | 0 | render_svg_props->stroke_width = all_atts->stroke_width; |
770 | 0 | } else { |
771 | 0 | inherited_flags_mask |= GF_SG_SVG_STROKEWIDTH_DIRTY; |
772 | 0 | } |
773 | 0 | if (all_atts->text_align && *(all_atts->text_align) != SVG_TEXTALIGN_INHERIT) { |
774 | 0 | render_svg_props->text_align = all_atts->text_align; |
775 | 0 | } else { |
776 | 0 | inherited_flags_mask |= GF_SG_SVG_TEXTPOSITION_DIRTY; |
777 | 0 | } |
778 | 0 | if (all_atts->text_anchor && *(all_atts->text_anchor) != SVG_TEXTANCHOR_INHERIT) { |
779 | 0 | render_svg_props->text_anchor = all_atts->text_anchor; |
780 | 0 | } else { |
781 | 0 | inherited_flags_mask |= GF_SG_SVG_TEXTPOSITION_DIRTY; |
782 | 0 | } |
783 | 0 | if (all_atts->text_rendering && *(all_atts->text_rendering) != SVG_RENDERINGHINT_INHERIT) { |
784 | 0 | render_svg_props->text_rendering = all_atts->text_rendering; |
785 | 0 | } |
786 | 0 | if (all_atts->vector_effect && *(all_atts->vector_effect) != SVG_VECTOREFFECT_INHERIT) { |
787 | 0 | render_svg_props->vector_effect = all_atts->vector_effect; |
788 | 0 | } else if (!all_atts->vector_effect) { |
789 | 0 | render_svg_props->vector_effect = NULL; |
790 | 0 | } else { |
791 | 0 | inherited_flags_mask |= GF_SG_SVG_VECTOREFFECT_DIRTY; |
792 | 0 | } |
793 | 0 | if (all_atts->viewport_fill && all_atts->viewport_fill->type != SVG_PAINT_INHERIT) { |
794 | 0 | render_svg_props->viewport_fill = all_atts->viewport_fill; |
795 | 0 | } else if (!all_atts->viewport_fill) { |
796 | 0 | render_svg_props->viewport_fill = NULL; |
797 | 0 | } |
798 | 0 | if (all_atts->viewport_fill_opacity && all_atts->viewport_fill_opacity->type != SVG_NUMBER_INHERIT) { |
799 | 0 | render_svg_props->viewport_fill_opacity = all_atts->viewport_fill_opacity; |
800 | 0 | } else if (!all_atts->viewport_fill_opacity) { |
801 | 0 | render_svg_props->viewport_fill_opacity = NULL; |
802 | 0 | } |
803 | 0 | if (all_atts->visibility && *(all_atts->visibility) != SVG_VISIBILITY_INHERIT) { |
804 | 0 | render_svg_props->visibility = all_atts->visibility; |
805 | 0 | } |
806 | 0 | return inherited_flags_mask; |
807 | 0 | } |
808 | | |
809 | | |
810 | | |
811 | | GF_EXPORT |
812 | | void gf_svg_flatten_attributes(SVG_Element *e, SVGAllAttributes *all_atts) |
813 | 0 | { |
814 | 0 | SVGAttribute *att; |
815 | 0 | memset(all_atts, 0, sizeof(SVGAllAttributes)); |
816 | 0 | if (e->sgprivate->tag <= GF_NODE_FIRST_DOM_NODE_TAG) return; |
817 | 0 | att = e->attributes; |
818 | 0 | while (att) { |
819 | 0 | switch(att->tag) { |
820 | 0 | case TAG_XML_ATT_id: |
821 | 0 | all_atts->xml_id = (SVG_ID *)att->data; |
822 | 0 | break; |
823 | 0 | case TAG_XML_ATT_base: |
824 | 0 | all_atts->xml_base = (XMLRI *)att->data; |
825 | 0 | break; |
826 | 0 | case TAG_XML_ATT_lang: |
827 | 0 | all_atts->xml_lang = (SVG_LanguageID *)att->data; |
828 | 0 | break; |
829 | 0 | case TAG_XML_ATT_space: |
830 | 0 | all_atts->xml_space = (XML_Space *)att->data; |
831 | 0 | break; |
832 | | |
833 | 0 | case TAG_XLINK_ATT_type: |
834 | 0 | all_atts->xlink_type = (SVG_String *)att->data; |
835 | 0 | break; |
836 | 0 | case TAG_XLINK_ATT_role: |
837 | 0 | all_atts->xlink_role = (XMLRI *)att->data; |
838 | 0 | break; |
839 | 0 | case TAG_XLINK_ATT_arcrole: |
840 | 0 | all_atts->xlink_arcrole = (XMLRI *)att->data; |
841 | 0 | break; |
842 | 0 | case TAG_XLINK_ATT_title: |
843 | 0 | all_atts->xlink_title = (SVG_String *)att->data; |
844 | 0 | break; |
845 | 0 | case TAG_XLINK_ATT_href: |
846 | 0 | all_atts->xlink_href = (XMLRI *)att->data; |
847 | 0 | break; |
848 | 0 | case TAG_XLINK_ATT_show: |
849 | 0 | all_atts->xlink_show = (SVG_String *)att->data; |
850 | 0 | break; |
851 | 0 | case TAG_XLINK_ATT_actuate: |
852 | 0 | all_atts->xlink_actuate = (SVG_String *)att->data; |
853 | 0 | break; |
854 | | |
855 | 0 | case TAG_XMLEV_ATT_event: |
856 | 0 | all_atts->event = (XMLEV_Event *)att->data; |
857 | 0 | break; |
858 | 0 | case TAG_XMLEV_ATT_phase: |
859 | 0 | all_atts->phase = (XMLEV_Phase *)att->data; |
860 | 0 | break; |
861 | 0 | case TAG_XMLEV_ATT_propagate: |
862 | 0 | all_atts->propagate = (XMLEV_Propagate *)att->data; |
863 | 0 | break; |
864 | 0 | case TAG_XMLEV_ATT_defaultAction: |
865 | 0 | all_atts->defaultAction = (XMLEV_DefaultAction *)att->data; |
866 | 0 | break; |
867 | 0 | case TAG_XMLEV_ATT_observer: |
868 | 0 | all_atts->observer = (XML_IDREF *)att->data; |
869 | 0 | break; |
870 | 0 | case TAG_XMLEV_ATT_target: |
871 | 0 | all_atts->listener_target = (XML_IDREF *)att->data; |
872 | 0 | break; |
873 | 0 | case TAG_XMLEV_ATT_handler: |
874 | 0 | all_atts->handler = (XMLRI *)att->data; |
875 | 0 | break; |
876 | | |
877 | 0 | case TAG_LSR_ATT_enabled: |
878 | 0 | all_atts->lsr_enabled = (SVG_Boolean *)att->data; |
879 | 0 | break; |
880 | | |
881 | 0 | case TAG_SVG_ATT_id: |
882 | 0 | all_atts->id = (SVG_ID *)att->data; |
883 | 0 | break; |
884 | 0 | case TAG_SVG_ATT__class: |
885 | 0 | all_atts->_class = (SVG_String *)att->data; |
886 | 0 | break; |
887 | 0 | case TAG_SVG_ATT_requiredFeatures: |
888 | 0 | all_atts->requiredFeatures = (SVG_ListOfIRI *)att->data; |
889 | 0 | break; |
890 | 0 | case TAG_SVG_ATT_requiredExtensions: |
891 | 0 | all_atts->requiredExtensions = (SVG_ListOfIRI *)att->data; |
892 | 0 | break; |
893 | 0 | case TAG_SVG_ATT_requiredFormats: |
894 | 0 | all_atts->requiredFormats = (SVG_FormatList *)att->data; |
895 | 0 | break; |
896 | 0 | case TAG_SVG_ATT_requiredFonts: |
897 | 0 | all_atts->requiredFonts = (SVG_FontList *)att->data; |
898 | 0 | break; |
899 | 0 | case TAG_SVG_ATT_systemLanguage: |
900 | 0 | all_atts->systemLanguage = (SVG_LanguageIDs *)att->data; |
901 | 0 | break; |
902 | 0 | case TAG_SVG_ATT_display: |
903 | 0 | all_atts->display = (SVG_Display *)att->data; |
904 | 0 | break; |
905 | 0 | case TAG_SVG_ATT_visibility: |
906 | 0 | all_atts->visibility = (SVG_Visibility *)att->data; |
907 | 0 | break; |
908 | 0 | case TAG_SVG_ATT_image_rendering: |
909 | 0 | all_atts->image_rendering = (SVG_RenderingHint *)att->data; |
910 | 0 | break; |
911 | 0 | case TAG_SVG_ATT_pointer_events: |
912 | 0 | all_atts->pointer_events = (SVG_PointerEvents *)att->data; |
913 | 0 | break; |
914 | 0 | case TAG_SVG_ATT_shape_rendering: |
915 | 0 | all_atts->shape_rendering = (SVG_RenderingHint *)att->data; |
916 | 0 | break; |
917 | 0 | case TAG_SVG_ATT_text_rendering: |
918 | 0 | all_atts->text_rendering = (SVG_RenderingHint *)att->data; |
919 | 0 | break; |
920 | 0 | case TAG_SVG_ATT_audio_level: |
921 | 0 | all_atts->audio_level = (SVG_Number *)att->data; |
922 | 0 | break; |
923 | 0 | case TAG_SVG_ATT_viewport_fill: |
924 | 0 | all_atts->viewport_fill = (SVG_Paint *)att->data; |
925 | 0 | break; |
926 | 0 | case TAG_SVG_ATT_viewport_fill_opacity: |
927 | 0 | all_atts->viewport_fill_opacity = (SVG_Number *)att->data; |
928 | 0 | break; |
929 | 0 | case TAG_SVG_ATT_overflow: |
930 | 0 | all_atts->overflow = (SVG_String *)att->data; |
931 | 0 | break; |
932 | 0 | case TAG_SVG_ATT_fill_opacity: |
933 | 0 | all_atts->fill_opacity = (SVG_Number *)att->data; |
934 | 0 | break; |
935 | 0 | case TAG_SVG_ATT_stroke_opacity: |
936 | 0 | all_atts->stroke_opacity = (SVG_Number *)att->data; |
937 | 0 | break; |
938 | 0 | case TAG_SVG_ATT_fill: |
939 | 0 | all_atts->fill = (SVG_Paint *)att->data; |
940 | 0 | break; |
941 | 0 | case TAG_SVG_ATT_filter: |
942 | 0 | all_atts->filter = (SVG_Paint *)att->data; |
943 | 0 | break; |
944 | 0 | case TAG_SVG_ATT_fill_rule: |
945 | 0 | all_atts->fill_rule = (SVG_FillRule *)att->data; |
946 | 0 | break; |
947 | 0 | case TAG_SVG_ATT_stroke: |
948 | 0 | all_atts->stroke = (SVG_Paint *)att->data; |
949 | 0 | break; |
950 | 0 | case TAG_SVG_ATT_stroke_dasharray: |
951 | 0 | all_atts->stroke_dasharray = (SVG_StrokeDashArray *)att->data; |
952 | 0 | break; |
953 | 0 | case TAG_SVG_ATT_stroke_dashoffset: |
954 | 0 | all_atts->stroke_dashoffset = (SVG_Length *)att->data; |
955 | 0 | break; |
956 | 0 | case TAG_SVG_ATT_stroke_linecap: |
957 | 0 | all_atts->stroke_linecap = (SVG_StrokeLineCap *)att->data; |
958 | 0 | break; |
959 | 0 | case TAG_SVG_ATT_stroke_linejoin: |
960 | 0 | all_atts->stroke_linejoin = (SVG_StrokeLineJoin *)att->data; |
961 | 0 | break; |
962 | 0 | case TAG_SVG_ATT_stroke_miterlimit: |
963 | 0 | all_atts->stroke_miterlimit = (SVG_Number *)att->data; |
964 | 0 | break; |
965 | 0 | case TAG_SVG_ATT_stroke_width: |
966 | 0 | all_atts->stroke_width = (SVG_Length *)att->data; |
967 | 0 | break; |
968 | 0 | case TAG_SVG_ATT_color: |
969 | 0 | all_atts->color = (SVG_Paint *)att->data; |
970 | 0 | break; |
971 | 0 | case TAG_SVG_ATT_color_rendering: |
972 | 0 | all_atts->color_rendering = (SVG_RenderingHint *)att->data; |
973 | 0 | break; |
974 | 0 | case TAG_SVG_ATT_vector_effect: |
975 | 0 | all_atts->vector_effect = (SVG_VectorEffect *)att->data; |
976 | 0 | break; |
977 | 0 | case TAG_SVG_ATT_solid_color: |
978 | 0 | all_atts->solid_color = (SVG_SVGColor *)att->data; |
979 | 0 | break; |
980 | 0 | case TAG_SVG_ATT_solid_opacity: |
981 | 0 | all_atts->solid_opacity = (SVG_Number *)att->data; |
982 | 0 | break; |
983 | 0 | case TAG_SVG_ATT_display_align: |
984 | 0 | all_atts->display_align = (SVG_DisplayAlign *)att->data; |
985 | 0 | break; |
986 | 0 | case TAG_SVG_ATT_line_increment: |
987 | 0 | all_atts->line_increment = (SVG_Number *)att->data; |
988 | 0 | break; |
989 | 0 | case TAG_SVG_ATT_stop_color: |
990 | 0 | all_atts->stop_color = (SVG_SVGColor *)att->data; |
991 | 0 | break; |
992 | 0 | case TAG_SVG_ATT_stop_opacity: |
993 | 0 | all_atts->stop_opacity = (SVG_Number *)att->data; |
994 | 0 | break; |
995 | 0 | case TAG_SVG_ATT_font_family: |
996 | 0 | all_atts->font_family = (SVG_FontFamily *)att->data; |
997 | 0 | break; |
998 | 0 | case TAG_SVG_ATT_font_size: |
999 | 0 | all_atts->font_size = (SVG_FontSize *)att->data; |
1000 | 0 | break; |
1001 | 0 | case TAG_SVG_ATT_font_style: |
1002 | 0 | all_atts->font_style = (SVG_FontStyle *)att->data; |
1003 | 0 | break; |
1004 | 0 | case TAG_SVG_ATT_font_variant: |
1005 | 0 | all_atts->font_variant = (SVG_FontVariant *)att->data; |
1006 | 0 | break; |
1007 | 0 | case TAG_SVG_ATT_font_weight: |
1008 | 0 | all_atts->font_weight = (SVG_FontWeight *)att->data; |
1009 | 0 | break; |
1010 | 0 | case TAG_SVG_ATT_text_anchor: |
1011 | 0 | all_atts->text_anchor = (SVG_TextAnchor *)att->data; |
1012 | 0 | break; |
1013 | 0 | case TAG_SVG_ATT_text_align: |
1014 | 0 | all_atts->text_align = (SVG_TextAlign *)att->data; |
1015 | 0 | break; |
1016 | 0 | case TAG_SVG_ATT_text_decoration: |
1017 | 0 | all_atts->text_decoration = (SVG_String *)att->data; |
1018 | 0 | break; |
1019 | 0 | case TAG_SVG_ATT_focusHighlight: |
1020 | 0 | all_atts->focusHighlight = (SVG_FocusHighlight *)att->data; |
1021 | 0 | break; |
1022 | 0 | case TAG_SVG_ATT_externalResourcesRequired: |
1023 | 0 | all_atts->externalResourcesRequired = (SVG_Boolean *)att->data; |
1024 | 0 | break; |
1025 | 0 | case TAG_SVG_ATT_focusable: |
1026 | 0 | all_atts->focusable = (SVG_Focusable *)att->data; |
1027 | 0 | break; |
1028 | 0 | case TAG_SVG_ATT_nav_next: |
1029 | 0 | all_atts->nav_next = (SVG_Focus *)att->data; |
1030 | 0 | break; |
1031 | 0 | case TAG_SVG_ATT_nav_prev: |
1032 | 0 | all_atts->nav_prev = (SVG_Focus *)att->data; |
1033 | 0 | break; |
1034 | 0 | case TAG_SVG_ATT_nav_up: |
1035 | 0 | all_atts->nav_up = (SVG_Focus *)att->data; |
1036 | 0 | break; |
1037 | 0 | case TAG_SVG_ATT_nav_up_right: |
1038 | 0 | all_atts->nav_up_right = (SVG_Focus *)att->data; |
1039 | 0 | break; |
1040 | 0 | case TAG_SVG_ATT_nav_right: |
1041 | 0 | all_atts->nav_right = (SVG_Focus *)att->data; |
1042 | 0 | break; |
1043 | 0 | case TAG_SVG_ATT_nav_down_right: |
1044 | 0 | all_atts->nav_down_right = (SVG_Focus *)att->data; |
1045 | 0 | break; |
1046 | 0 | case TAG_SVG_ATT_nav_down: |
1047 | 0 | all_atts->nav_down = (SVG_Focus *)att->data; |
1048 | 0 | break; |
1049 | 0 | case TAG_SVG_ATT_nav_down_left: |
1050 | 0 | all_atts->nav_down_left = (SVG_Focus *)att->data; |
1051 | 0 | break; |
1052 | 0 | case TAG_SVG_ATT_nav_left: |
1053 | 0 | all_atts->nav_left = (SVG_Focus *)att->data; |
1054 | 0 | break; |
1055 | 0 | case TAG_SVG_ATT_nav_up_left: |
1056 | 0 | all_atts->nav_up_left = (SVG_Focus *)att->data; |
1057 | 0 | break; |
1058 | 0 | case TAG_SVG_ATT_transform: |
1059 | 0 | all_atts->transform = (SVG_Transform *)att->data; |
1060 | 0 | break; |
1061 | 0 | case TAG_SVG_ATT_target: |
1062 | 0 | all_atts->target = (SVG_String *)att->data; |
1063 | 0 | break; |
1064 | 0 | case TAG_SVG_ATT_attributeName: |
1065 | 0 | all_atts->attributeName = (SMIL_AttributeName *)att->data; |
1066 | 0 | break; |
1067 | 0 | case TAG_SVG_ATT_attributeType: |
1068 | 0 | all_atts->attributeType = (SMIL_AttributeType *)att->data; |
1069 | 0 | break; |
1070 | 0 | case TAG_SVG_ATT_begin: |
1071 | 0 | all_atts->begin = (SMIL_Times *)att->data; |
1072 | 0 | break; |
1073 | 0 | case TAG_SVG_ATT_dur: |
1074 | 0 | all_atts->dur = (SMIL_Duration *)att->data; |
1075 | 0 | break; |
1076 | 0 | case TAG_SVG_ATT_end: |
1077 | 0 | all_atts->end = (SMIL_Times *)att->data; |
1078 | 0 | break; |
1079 | 0 | case TAG_SVG_ATT_repeatCount: |
1080 | 0 | all_atts->repeatCount = (SMIL_RepeatCount *)att->data; |
1081 | 0 | break; |
1082 | 0 | case TAG_SVG_ATT_repeatDur: |
1083 | 0 | all_atts->repeatDur = (SMIL_Duration *)att->data; |
1084 | 0 | break; |
1085 | 0 | case TAG_SVG_ATT_restart: |
1086 | 0 | all_atts->restart = (SMIL_Restart *)att->data; |
1087 | 0 | break; |
1088 | 0 | case TAG_SVG_ATT_smil_fill: |
1089 | 0 | all_atts->smil_fill = (SMIL_Fill *)att->data; |
1090 | 0 | break; |
1091 | 0 | case TAG_SVG_ATT_min: |
1092 | 0 | all_atts->min = (SMIL_Duration *)att->data; |
1093 | 0 | break; |
1094 | 0 | case TAG_SVG_ATT_max: |
1095 | 0 | all_atts->max = (SMIL_Duration *)att->data; |
1096 | 0 | break; |
1097 | 0 | case TAG_SVG_ATT_to: |
1098 | 0 | all_atts->to = (SMIL_AnimateValue *)att->data; |
1099 | 0 | break; |
1100 | 0 | case TAG_SVG_ATT_calcMode: |
1101 | 0 | all_atts->calcMode = (SMIL_CalcMode *)att->data; |
1102 | 0 | break; |
1103 | 0 | case TAG_SVG_ATT_values: |
1104 | 0 | all_atts->values = (SMIL_AnimateValues *)att->data; |
1105 | 0 | break; |
1106 | 0 | case TAG_SVG_ATT_keyTimes: |
1107 | 0 | all_atts->keyTimes = (SMIL_KeyTimes *)att->data; |
1108 | 0 | break; |
1109 | 0 | case TAG_SVG_ATT_keySplines: |
1110 | 0 | all_atts->keySplines = (SMIL_KeySplines *)att->data; |
1111 | 0 | break; |
1112 | 0 | case TAG_SVG_ATT_from: |
1113 | 0 | all_atts->from = (SMIL_AnimateValue *)att->data; |
1114 | 0 | break; |
1115 | 0 | case TAG_SVG_ATT_by: |
1116 | 0 | all_atts->by = (SMIL_AnimateValue *)att->data; |
1117 | 0 | break; |
1118 | 0 | case TAG_SVG_ATT_additive: |
1119 | 0 | all_atts->additive = (SMIL_Additive *)att->data; |
1120 | 0 | break; |
1121 | 0 | case TAG_SVG_ATT_accumulate: |
1122 | 0 | all_atts->accumulate = (SMIL_Accumulate *)att->data; |
1123 | 0 | break; |
1124 | 0 | case TAG_SVG_ATT_path: |
1125 | 0 | all_atts->path = (SVG_PathData *)att->data; |
1126 | 0 | break; |
1127 | 0 | case TAG_SVG_ATT_keyPoints: |
1128 | 0 | all_atts->keyPoints = (SMIL_KeyPoints *)att->data; |
1129 | 0 | break; |
1130 | 0 | case TAG_SVG_ATT_rotate: |
1131 | 0 | all_atts->rotate = (SVG_Rotate *)att->data; |
1132 | 0 | break; |
1133 | 0 | case TAG_SVG_ATT_origin: |
1134 | 0 | all_atts->origin = (SVG_String *)att->data; |
1135 | 0 | break; |
1136 | 0 | case TAG_SVG_ATT_transform_type: |
1137 | 0 | all_atts->transform_type = (SVG_TransformType *)att->data; |
1138 | 0 | break; |
1139 | 0 | case TAG_SVG_ATT_clipBegin: |
1140 | 0 | all_atts->clipBegin = (SVG_Clock *)att->data; |
1141 | 0 | break; |
1142 | 0 | case TAG_SVG_ATT_clipEnd: |
1143 | 0 | all_atts->clipEnd = (SVG_Clock *)att->data; |
1144 | 0 | break; |
1145 | 0 | case TAG_SVG_ATT_syncBehavior: |
1146 | 0 | all_atts->syncBehavior = (SMIL_SyncBehavior *)att->data; |
1147 | 0 | break; |
1148 | 0 | case TAG_SVG_ATT_syncTolerance: |
1149 | 0 | all_atts->syncTolerance = (SMIL_SyncTolerance *)att->data; |
1150 | 0 | break; |
1151 | 0 | case TAG_SVG_ATT_syncMaster: |
1152 | 0 | all_atts->syncMaster = (SVG_Boolean *)att->data; |
1153 | 0 | break; |
1154 | 0 | case TAG_SVG_ATT_syncReference: |
1155 | 0 | all_atts->syncReference = (XMLRI *)att->data; |
1156 | 0 | break; |
1157 | 0 | case TAG_SVG_ATT_x: |
1158 | 0 | all_atts->x = (SVG_Coordinate *)att->data; |
1159 | 0 | break; |
1160 | 0 | case TAG_SVG_ATT_y: |
1161 | 0 | all_atts->y = (SVG_Coordinate *)att->data; |
1162 | 0 | break; |
1163 | 0 | case TAG_SVG_ATT_width: |
1164 | 0 | all_atts->width = (SVG_Length *)att->data; |
1165 | 0 | break; |
1166 | 0 | case TAG_SVG_ATT_height: |
1167 | 0 | all_atts->height = (SVG_Length *)att->data; |
1168 | 0 | break; |
1169 | 0 | case TAG_SVG_ATT_preserveAspectRatio: |
1170 | 0 | all_atts->preserveAspectRatio = (SVG_PreserveAspectRatio *)att->data; |
1171 | 0 | break; |
1172 | 0 | case TAG_SVG_ATT_initialVisibility: |
1173 | 0 | all_atts->initialVisibility = (SVG_InitialVisibility *)att->data; |
1174 | 0 | break; |
1175 | 0 | case TAG_SVG_ATT_type: |
1176 | 0 | all_atts->type = (SVG_ContentType *)att->data; |
1177 | 0 | break; |
1178 | 0 | case TAG_SVG_ATT_cx: |
1179 | 0 | all_atts->cx = (SVG_Coordinate *)att->data; |
1180 | 0 | break; |
1181 | 0 | case TAG_SVG_ATT_cy: |
1182 | 0 | all_atts->cy = (SVG_Coordinate *)att->data; |
1183 | 0 | break; |
1184 | 0 | case TAG_SVG_ATT_r: |
1185 | 0 | all_atts->r = (SVG_Length *)att->data; |
1186 | 0 | break; |
1187 | 0 | case TAG_SVG_ATT_cursorManager_x: |
1188 | 0 | all_atts->cursorManager_x = (SVG_Length *)att->data; |
1189 | 0 | break; |
1190 | 0 | case TAG_SVG_ATT_cursorManager_y: |
1191 | 0 | all_atts->cursorManager_y = (SVG_Length *)att->data; |
1192 | 0 | break; |
1193 | 0 | case TAG_SVG_ATT_rx: |
1194 | 0 | all_atts->rx = (SVG_Length *)att->data; |
1195 | 0 | break; |
1196 | 0 | case TAG_SVG_ATT_ry: |
1197 | 0 | all_atts->ry = (SVG_Length *)att->data; |
1198 | 0 | break; |
1199 | 0 | case TAG_SVG_ATT_horiz_adv_x: |
1200 | 0 | all_atts->horiz_adv_x = (SVG_Number *)att->data; |
1201 | 0 | break; |
1202 | 0 | case TAG_SVG_ATT_horiz_origin_x: |
1203 | 0 | all_atts->horiz_origin_x = (SVG_Number *)att->data; |
1204 | 0 | break; |
1205 | 0 | case TAG_SVG_ATT_font_stretch: |
1206 | 0 | all_atts->font_stretch = (SVG_String *)att->data; |
1207 | 0 | break; |
1208 | 0 | case TAG_SVG_ATT_unicode_range: |
1209 | 0 | all_atts->unicode_range = (SVG_String *)att->data; |
1210 | 0 | break; |
1211 | 0 | case TAG_SVG_ATT_panose_1: |
1212 | 0 | all_atts->panose_1 = (SVG_String *)att->data; |
1213 | 0 | break; |
1214 | 0 | case TAG_SVG_ATT_widths: |
1215 | 0 | all_atts->widths = (SVG_String *)att->data; |
1216 | 0 | break; |
1217 | 0 | case TAG_SVG_ATT_bbox: |
1218 | 0 | all_atts->bbox = (SVG_String *)att->data; |
1219 | 0 | break; |
1220 | 0 | case TAG_SVG_ATT_units_per_em: |
1221 | 0 | all_atts->units_per_em = (SVG_Number *)att->data; |
1222 | 0 | break; |
1223 | 0 | case TAG_SVG_ATT_stemv: |
1224 | 0 | all_atts->stemv = (SVG_Number *)att->data; |
1225 | 0 | break; |
1226 | 0 | case TAG_SVG_ATT_stemh: |
1227 | 0 | all_atts->stemh = (SVG_Number *)att->data; |
1228 | 0 | break; |
1229 | 0 | case TAG_SVG_ATT_slope: |
1230 | 0 | all_atts->slope = (SVG_Number *)att->data; |
1231 | 0 | break; |
1232 | 0 | case TAG_SVG_ATT_cap_height: |
1233 | 0 | all_atts->cap_height = (SVG_Number *)att->data; |
1234 | 0 | break; |
1235 | 0 | case TAG_SVG_ATT_x_height: |
1236 | 0 | all_atts->x_height = (SVG_Number *)att->data; |
1237 | 0 | break; |
1238 | 0 | case TAG_SVG_ATT_accent_height: |
1239 | 0 | all_atts->accent_height = (SVG_Number *)att->data; |
1240 | 0 | break; |
1241 | 0 | case TAG_SVG_ATT_ascent: |
1242 | 0 | all_atts->ascent = (SVG_Number *)att->data; |
1243 | 0 | break; |
1244 | 0 | case TAG_SVG_ATT_descent: |
1245 | 0 | all_atts->descent = (SVG_Number *)att->data; |
1246 | 0 | break; |
1247 | 0 | case TAG_SVG_ATT_ideographic: |
1248 | 0 | all_atts->ideographic = (SVG_Number *)att->data; |
1249 | 0 | break; |
1250 | 0 | case TAG_SVG_ATT_alphabetic: |
1251 | 0 | all_atts->alphabetic = (SVG_Number *)att->data; |
1252 | 0 | break; |
1253 | 0 | case TAG_SVG_ATT_mathematical: |
1254 | 0 | all_atts->mathematical = (SVG_Number *)att->data; |
1255 | 0 | break; |
1256 | 0 | case TAG_SVG_ATT_hanging: |
1257 | 0 | all_atts->hanging = (SVG_Number *)att->data; |
1258 | 0 | break; |
1259 | 0 | case TAG_SVG_ATT_underline_position: |
1260 | 0 | all_atts->underline_position = (SVG_Number *)att->data; |
1261 | 0 | break; |
1262 | 0 | case TAG_SVG_ATT_underline_thickness: |
1263 | 0 | all_atts->underline_thickness = (SVG_Number *)att->data; |
1264 | 0 | break; |
1265 | 0 | case TAG_SVG_ATT_strikethrough_position: |
1266 | 0 | all_atts->strikethrough_position = (SVG_Number *)att->data; |
1267 | 0 | break; |
1268 | 0 | case TAG_SVG_ATT_strikethrough_thickness: |
1269 | 0 | all_atts->strikethrough_thickness = (SVG_Number *)att->data; |
1270 | 0 | break; |
1271 | 0 | case TAG_SVG_ATT_overline_position: |
1272 | 0 | all_atts->overline_position = (SVG_Number *)att->data; |
1273 | 0 | break; |
1274 | 0 | case TAG_SVG_ATT_overline_thickness: |
1275 | 0 | all_atts->overline_thickness = (SVG_Number *)att->data; |
1276 | 0 | break; |
1277 | 0 | case TAG_SVG_ATT_d: |
1278 | 0 | all_atts->d = (SVG_PathData *)att->data; |
1279 | 0 | break; |
1280 | 0 | case TAG_SVG_ATT_unicode: |
1281 | 0 | all_atts->unicode = (SVG_String *)att->data; |
1282 | 0 | break; |
1283 | 0 | case TAG_SVG_ATT_glyph_name: |
1284 | 0 | all_atts->glyph_name = (SVG_String *)att->data; |
1285 | 0 | break; |
1286 | 0 | case TAG_SVG_ATT_arabic_form: |
1287 | 0 | all_atts->arabic_form = (SVG_String *)att->data; |
1288 | 0 | break; |
1289 | 0 | case TAG_SVG_ATT_lang: |
1290 | 0 | all_atts->lang = (SVG_LanguageIDs *)att->data; |
1291 | 0 | break; |
1292 | 0 | case TAG_SVG_ATT_u1: |
1293 | 0 | all_atts->u1 = (SVG_String *)att->data; |
1294 | 0 | break; |
1295 | 0 | case TAG_SVG_ATT_g1: |
1296 | 0 | all_atts->g1 = (SVG_String *)att->data; |
1297 | 0 | break; |
1298 | 0 | case TAG_SVG_ATT_u2: |
1299 | 0 | all_atts->u2 = (SVG_String *)att->data; |
1300 | 0 | break; |
1301 | 0 | case TAG_SVG_ATT_g2: |
1302 | 0 | all_atts->g2 = (SVG_String *)att->data; |
1303 | 0 | break; |
1304 | 0 | case TAG_SVG_ATT_k: |
1305 | 0 | all_atts->k = (SVG_Number *)att->data; |
1306 | 0 | break; |
1307 | 0 | case TAG_SVG_ATT_opacity: |
1308 | 0 | all_atts->opacity = (SVG_Number *)att->data; |
1309 | 0 | break; |
1310 | 0 | case TAG_SVG_ATT_x1: |
1311 | 0 | all_atts->x1 = (SVG_Coordinate *)att->data; |
1312 | 0 | break; |
1313 | 0 | case TAG_SVG_ATT_y1: |
1314 | 0 | all_atts->y1 = (SVG_Coordinate *)att->data; |
1315 | 0 | break; |
1316 | 0 | case TAG_SVG_ATT_x2: |
1317 | 0 | all_atts->x2 = (SVG_Coordinate *)att->data; |
1318 | 0 | break; |
1319 | 0 | case TAG_SVG_ATT_y2: |
1320 | 0 | all_atts->y2 = (SVG_Coordinate *)att->data; |
1321 | 0 | break; |
1322 | 0 | case TAG_SVG_ATT_gradientUnits: |
1323 | 0 | all_atts->gradientUnits = (SVG_GradientUnit *)att->data; |
1324 | 0 | break; |
1325 | 0 | case TAG_SVG_ATT_filterUnits: |
1326 | 0 | all_atts->focusable = (SVG_GradientUnit *)att->data; |
1327 | 0 | break; |
1328 | 0 | case TAG_SVG_ATT_spreadMethod: |
1329 | 0 | all_atts->spreadMethod = (SVG_SpreadMethod *)att->data; |
1330 | 0 | break; |
1331 | 0 | case TAG_SVG_ATT_gradientTransform: |
1332 | 0 | all_atts->gradientTransform = (SVG_Transform *)att->data; |
1333 | 0 | break; |
1334 | 0 | case TAG_SVG_ATT_pathLength: |
1335 | 0 | all_atts->pathLength = (SVG_Number *)att->data; |
1336 | 0 | break; |
1337 | 0 | case TAG_SVG_ATT_points: |
1338 | 0 | all_atts->points = (SVG_Points *)att->data; |
1339 | 0 | break; |
1340 | 0 | case TAG_SVG_ATT_mediaSize: |
1341 | 0 | all_atts->mediaSize = (SVG_Number *)att->data; |
1342 | 0 | break; |
1343 | 0 | case TAG_SVG_ATT_mediaTime: |
1344 | 0 | all_atts->mediaTime = (SVG_String *)att->data; |
1345 | 0 | break; |
1346 | 0 | case TAG_SVG_ATT_mediaCharacterEncoding: |
1347 | 0 | all_atts->mediaCharacterEncoding = (SVG_String *)att->data; |
1348 | 0 | break; |
1349 | 0 | case TAG_SVG_ATT_mediaContentEncodings: |
1350 | 0 | all_atts->mediaContentEncodings = (SVG_String *)att->data; |
1351 | 0 | break; |
1352 | 0 | case TAG_SVG_ATT_bandwidth: |
1353 | 0 | all_atts->bandwidth = (SVG_Number *)att->data; |
1354 | 0 | break; |
1355 | 0 | case TAG_SVG_ATT_fx: |
1356 | 0 | all_atts->fx = (SVG_Coordinate *)att->data; |
1357 | 0 | break; |
1358 | 0 | case TAG_SVG_ATT_fy: |
1359 | 0 | all_atts->fy = (SVG_Coordinate *)att->data; |
1360 | 0 | break; |
1361 | 0 | case TAG_SVG_ATT_size: |
1362 | 0 | all_atts->size = (LASeR_Size *)att->data; |
1363 | 0 | break; |
1364 | 0 | case TAG_SVG_ATT_choice: |
1365 | 0 | all_atts->choice = (LASeR_Choice *)att->data; |
1366 | 0 | break; |
1367 | 0 | case TAG_SVG_ATT_delta: |
1368 | 0 | all_atts->delta = (LASeR_Size *)att->data; |
1369 | 0 | break; |
1370 | 0 | case TAG_SVG_ATT_offset: |
1371 | 0 | all_atts->offset = (SVG_Number *)att->data; |
1372 | 0 | break; |
1373 | 0 | case TAG_SVG_ATT_syncBehaviorDefault: |
1374 | 0 | all_atts->syncBehaviorDefault = (SMIL_SyncBehavior *)att->data; |
1375 | 0 | break; |
1376 | 0 | case TAG_SVG_ATT_syncToleranceDefault: |
1377 | 0 | all_atts->syncToleranceDefault = (SMIL_SyncTolerance *)att->data; |
1378 | 0 | break; |
1379 | 0 | case TAG_SVG_ATT_viewBox: |
1380 | 0 | all_atts->viewBox = (SVG_ViewBox *)att->data; |
1381 | 0 | break; |
1382 | 0 | case TAG_SVG_ATT_zoomAndPan: |
1383 | 0 | all_atts->zoomAndPan = (SVG_ZoomAndPan *)att->data; |
1384 | 0 | break; |
1385 | 0 | case TAG_SVG_ATT_version: |
1386 | 0 | all_atts->version = (SVG_String *)att->data; |
1387 | 0 | break; |
1388 | 0 | case TAG_SVG_ATT_baseProfile: |
1389 | 0 | all_atts->baseProfile = (SVG_String *)att->data; |
1390 | 0 | break; |
1391 | 0 | case TAG_SVG_ATT_contentScriptType: |
1392 | 0 | all_atts->contentScriptType = (SVG_ContentType *)att->data; |
1393 | 0 | break; |
1394 | 0 | case TAG_SVG_ATT_snapshotTime: |
1395 | 0 | all_atts->snapshotTime = (SVG_Clock *)att->data; |
1396 | 0 | break; |
1397 | 0 | case TAG_SVG_ATT_timelineBegin: |
1398 | 0 | all_atts->timelineBegin = (SVG_TimelineBegin *)att->data; |
1399 | 0 | break; |
1400 | 0 | case TAG_SVG_ATT_playbackOrder: |
1401 | 0 | all_atts->playbackOrder = (SVG_PlaybackOrder *)att->data; |
1402 | 0 | break; |
1403 | 0 | case TAG_SVG_ATT_editable: |
1404 | 0 | all_atts->editable = (SVG_Boolean *)att->data; |
1405 | 0 | break; |
1406 | 0 | case TAG_SVG_ATT_text_x: |
1407 | 0 | all_atts->text_x = (SVG_Coordinates *)att->data; |
1408 | 0 | break; |
1409 | 0 | case TAG_SVG_ATT_text_y: |
1410 | 0 | all_atts->text_y = (SVG_Coordinates *)att->data; |
1411 | 0 | break; |
1412 | 0 | case TAG_SVG_ATT_text_rotate: |
1413 | 0 | all_atts->text_rotate = (SVG_Numbers *)att->data; |
1414 | 0 | break; |
1415 | 0 | case TAG_SVG_ATT_transformBehavior: |
1416 | 0 | all_atts->transformBehavior = (SVG_TransformBehavior *)att->data; |
1417 | 0 | break; |
1418 | 0 | case TAG_SVG_ATT_overlay: |
1419 | 0 | all_atts->overlay = (SVG_Overlay *)att->data; |
1420 | 0 | break; |
1421 | 0 | case TAG_SVG_ATT_fullscreen: |
1422 | 0 | all_atts->fullscreen = (SVG_Boolean *)att->data; |
1423 | 0 | break; |
1424 | 0 | case TAG_SVG_ATT_motionTransform: |
1425 | 0 | all_atts->motionTransform = (SVG_Motion *)att->data; |
1426 | 0 | break; |
1427 | 0 | case TAG_SVG_ATT_clip_path: |
1428 | 0 | all_atts->clip_path = (SVG_ClipPath *)att->data; |
1429 | 0 | break; |
1430 | | |
1431 | 0 | case TAG_GSVG_ATT_useAsPrimary: |
1432 | 0 | all_atts->gpac_useAsPrimary = (SVG_Boolean *)att->data; |
1433 | 0 | break; |
1434 | 0 | case TAG_GSVG_ATT_depthOffset: |
1435 | 0 | all_atts->gpac_depthOffset = (SVG_Number *)att->data; |
1436 | 0 | break; |
1437 | 0 | case TAG_GSVG_ATT_depthGain: |
1438 | 0 | all_atts->gpac_depthGain = (SVG_Number *)att->data; |
1439 | 0 | break; |
1440 | 0 | } |
1441 | | |
1442 | 0 | att = att->next; |
1443 | 0 | } |
1444 | 0 | } |
1445 | | |
1446 | | #endif |
1447 | | |