OSDN Git Service

add tstools.
[rec10/rec10-git.git] / tstools / DtsEdit / src / gpac / scenegraph_svg.h
1 /*\r
2  *                      GPAC - Multimedia Framework C SDK\r
3  *\r
4  *                      Copyright (c) Cyril Concolato 2004\r
5  *                                      All rights reserved\r
6  *\r
7  *  This file is part of GPAC / SVG Scene Graph sub-project\r
8  *\r
9  *  GPAC is free software; you can redistribute it and/or modify\r
10  *  it under the terms of the GNU Lesser General Public License as published by\r
11  *  the Free Software Foundation; either version 2, or (at your option)\r
12  *  any later version.\r
13  *   \r
14  *  GPAC is distributed in the hope that it will be useful,\r
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
17  *  GNU Lesser General Public License for more details.\r
18  *   \r
19  *  You should have received a copy of the GNU Lesser General Public\r
20  *  License along with this library; see the file COPYING.  If not, write to\r
21  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
22  *\r
23  */\r
24 \r
25 #ifndef _GF_SG_SVG_H_\r
26 #define _GF_SG_SVG_H_\r
27 \r
28 #ifdef __cplusplus\r
29 extern "C" {\r
30 #endif\r
31 \r
32 #include <gpac/scenegraph.h>\r
33 #include <gpac/svg_types.h>\r
34 \r
35 /*******************************************************************************\r
36  * \r
37  *          DOM base scene graph\r
38  *\r
39  *******************************************************************************/\r
40 \r
41 enum\r
42 {\r
43         /*should never be used, this is only a parsing error*/\r
44         TAG_DOM_ATTRIBUTE_NULL,\r
45         /*this tag is set for a full dom attribute only - attribute name is then available*/\r
46         TAG_DOM_ATT_any,\r
47 \r
48         TAG_XML_ATT_RANGE_FIRST,\r
49         TAG_XML_ATT_id = TAG_XML_ATT_RANGE_FIRST,\r
50         TAG_XML_ATT_base,\r
51         TAG_XML_ATT_lang,\r
52         TAG_XML_ATT_space,\r
53         TAG_XML_ATT_RANGE_LAST,\r
54         TAG_XLINK_ATT_RANGE_FIRST,\r
55 \r
56         TAG_XLINK_ATT_type = TAG_XLINK_ATT_RANGE_FIRST,\r
57         TAG_XLINK_ATT_role,\r
58         TAG_XLINK_ATT_arcrole,\r
59         TAG_XLINK_ATT_title,\r
60         TAG_XLINK_ATT_href,\r
61         TAG_XLINK_ATT_show,\r
62         TAG_XLINK_ATT_actuate,\r
63         TAG_XLINK_ATT_RANGE_LAST,\r
64 \r
65         TAG_XMLEV_ATT_RANGE_FIRST,\r
66         TAG_XMLEV_ATT_event,\r
67         TAG_XMLEV_ATT_phase,\r
68         TAG_XMLEV_ATT_propagate,\r
69         TAG_XMLEV_ATT_defaultAction,\r
70         TAG_XMLEV_ATT_observer,\r
71         TAG_XMLEV_ATT_target,\r
72         TAG_XMLEV_ATT_handler,\r
73         TAG_XMLEV_ATT_RANGE_LAST,\r
74 \r
75         TAG_LSR_ATT_RANGE_FIRST,\r
76         TAG_LSR_ATT_enabled,\r
77         TAG_LSR_ATT_RANGE_LAST,\r
78         /*these attribute types are only use for binary purpose*/\r
79         TAG_LSR_ATT_children,\r
80         TAG_LSR_ATT_overflow,\r
81         TAG_LSR_ATT_rotation,\r
82         TAG_LSR_ATT_scale,\r
83         TAG_LSR_ATT_translation,\r
84         TAG_LSR_ATT_svg_width,\r
85         TAG_LSR_ATT_svg_height,\r
86         TAG_LSR_ATT_textContent,\r
87         /*WHAT THE HECK IS THIS THING IN THE SDL BUT NOWHERE IN THE SPEC ?*/\r
88         TAG_LSR_ATT_text_display,\r
89 \r
90         TAG_SVG_ATT_RANGE_FIRST,\r
91 \r
92         TAG_XBL_ATT_RANGE_FIRST = TAG_SVG_ATT_RANGE_FIRST + 256,\r
93         TAG_XBL_ATT_id = TAG_XBL_ATT_RANGE_FIRST,\r
94         TAG_XBL_ATT_extends,\r
95         TAG_XBL_ATT_display,\r
96         TAG_XBL_ATT_inheritstyle,\r
97         TAG_XBL_ATT_includes,\r
98         TAG_XBL_ATT_name,\r
99         TAG_XBL_ATT_implements,\r
100         TAG_XBL_ATT_type,\r
101         TAG_XBL_ATT_readonly,\r
102         TAG_XBL_ATT_onget,\r
103         TAG_XBL_ATT_onset,\r
104         TAG_XBL_ATT_event,\r
105         TAG_XBL_ATT_action,\r
106         TAG_XBL_ATT_phase,\r
107         TAG_XBL_ATT_button,\r
108         TAG_XBL_ATT_modifiers,\r
109         TAG_XBL_ATT_keycode,\r
110         TAG_XBL_ATT_key,\r
111         TAG_XBL_ATT_charcode,\r
112         TAG_XBL_ATT_clickcount,\r
113         TAG_XBL_ATT_command,\r
114         TAG_XBL_ATT_preventdefault,\r
115         TAG_XBL_ATT_src,\r
116 };\r
117 \r
118 \r
119 #define GF_DOM_BASE_ATTRIBUTE   \\r
120         u16 tag;        /*attribute identifier*/        \\r
121         u16 data_type; /*attribute datatype*/     \\r
122         void *data; /*data pointer*/                            \\r
123         struct __dom_base_attribute *next; /*next attribute*/\r
124 \r
125 #define GF_DOM_FULL_ATTRIBUTE   \\r
126         GF_DOM_ATTRIBUTE        \\r
127 \r
128 typedef struct __dom_base_attribute\r
129 {\r
130         GF_DOM_BASE_ATTRIBUTE\r
131 } GF_DOMAttribute;\r
132 \r
133 typedef struct __dom_full_attribute\r
134 {\r
135         GF_DOM_BASE_ATTRIBUTE\r
136         u32 xmlns;\r
137         char *name; /*attribute name - in this case, the data field is the attribute literal value*/\r
138 } GF_DOMFullAttribute;\r
139 \r
140 #define GF_DOM_BASE_NODE         \\r
141         BASE_NODE                               \\r
142         CHILDREN                                \\r
143         GF_DOMAttribute *attributes;\r
144 \r
145 typedef struct __dom_base_node\r
146 {\r
147         GF_DOM_BASE_NODE\r
148 } GF_DOMNode;\r
149 \r
150 typedef struct __dom_full_node\r
151 {\r
152         GF_DOM_BASE_NODE\r
153         char *name;\r
154         u32 ns;\r
155 } GF_DOMFullNode;\r
156 \r
157 \r
158 \r
159 enum\r
160 {\r
161         /*no NS specified, it will be evaluated from attribute/node name*/\r
162         GF_XMLNS_NONE,\r
163 \r
164         GF_XMLNS_XML,\r
165         GF_XMLNS_XLINK,\r
166         GF_XMLNS_XMLEV,\r
167         GF_XMLNS_LASER,\r
168         GF_XMLNS_SVG,\r
169         GF_XMLNS_XBL,\r
170 \r
171         /*any other namespace uses the CRC32 of the namespace as an identifier*/\r
172 };\r
173 \r
174 GF_Err gf_sg_add_namespace(GF_SceneGraph *sg, char *name, char *qname);\r
175 GF_Err gf_sg_remove_namespace(GF_SceneGraph *sg, char *name, char *qname);\r
176 u32 gf_sg_get_namespace_code(GF_SceneGraph *sg, char *qname);\r
177 u32 gf_sg_get_namespace_code_from_name(GF_SceneGraph *sg, char *name);\r
178 const char *gf_sg_get_namespace_qname(GF_SceneGraph *sg, u32 xmlns_id);\r
179 \r
180 u32 gf_xml_get_element_namespace(GF_Node *n);\r
181 const char *gf_sg_get_namespace(GF_SceneGraph *sg, u32 xmlns_id);\r
182 \r
183 void gf_xml_push_namespaces(GF_DOMNode *elt);\r
184 void gf_xml_pop_namespaces(GF_DOMNode *elt);\r
185 \r
186 \r
187 \r
188 \r
189 enum\r
190 {\r
191         GF_DOM_TEXT_REGULAR = 0,\r
192         GF_DOM_TEXT_CDATA,\r
193         /*inserted text node (typically external script)*/\r
194         GF_DOM_TEXT_INSERTED\r
195 };\r
196 \r
197 typedef struct\r
198 {\r
199         BASE_NODE\r
200         CHILDREN\r
201         char *textContent;\r
202         u32 type;\r
203 } GF_DOMText;\r
204 \r
205 /*creates a new text node, assign string (does NOT duplicate it) and register node with parent if desired*/\r
206 GF_DOMText *gf_dom_add_text_node(GF_Node *parent, char *text_data);\r
207 \r
208 /*creates a new text node - this DOES NOT register the node at all*/\r
209 GF_DOMText *gf_dom_new_text_node(GF_SceneGraph *sg);\r
210 \r
211 typedef struct\r
212 {\r
213         BASE_NODE\r
214         CHILDREN\r
215         char *data;\r
216         u32 data_size;\r
217         GF_List *updates;\r
218 } GF_DOMUpdates;\r
219 \r
220 /*creates a new updates node and register node with parent*/\r
221 GF_DOMUpdates *gf_dom_add_updates_node(GF_Node *parent);\r
222 \r
223 typedef struct\r
224 {\r
225         Bool bufferValid;\r
226         u32 level;\r
227         Fixed remaining_time;\r
228         u16 status;\r
229         const char *session_name;\r
230         u32 nb_streams;\r
231         struct mae_item {u32 streamType; u32 mediaType; u32 transport; } streams[20];\r
232 } GF_DOMMediaAccessEvent;\r
233 \r
234 /* \r
235         DOM event handling\r
236 */\r
237 enum\r
238 {\r
239         GF_DOM_EVENT_PHASE_CAPTURE = 1,\r
240         GF_DOM_EVENT_PHASE_AT_TARGET = 2,\r
241         GF_DOM_EVENT_PHASE_BUBBLE = 3,\r
242 \r
243         /*special phase indicating the event has been canceled*/\r
244         GF_DOM_EVENT_PHASE_CANCEL = 1<<5,\r
245         /*special phase indicating the event has been canceled immediately*/\r
246         GF_DOM_EVENT_PHASE_CANCEL_ALL = 1<<6,\r
247         /*special phase indicating the default action of the event is prevented*/\r
248         GF_DOM_EVENT_PHASE_PREVENT = 1<<7,\r
249 };\r
250 \r
251 /*possible event targets*/\r
252 enum\r
253 {\r
254         GF_DOM_EVENT_NODE,\r
255         GF_DOM_EVENT_DOCUMENT,\r
256         GF_DOM_EVENT_XHR,\r
257         GF_DOM_EVENT_TIMER,\r
258         GF_DOM_EVENT_CONNECTION,\r
259 };\r
260 \r
261 typedef struct \r
262 {\r
263         GF_List *evt_list;\r
264         void *ptr;\r
265         u32 ptr_type;\r
266 } GF_DOMEventTarget;\r
267 \r
268 GF_Err gf_dom_listener_add(GF_Node *listener, GF_DOMEventTarget *evt_target);\r
269 \r
270 \r
271 typedef struct\r
272 {\r
273         /*event type, as defined in <gpac/events.h>*/\r
274         u32 type;\r
275         /*event phase type, READ-ONLY\r
276         0: at target, 1: bubbling, 2: capturing , 3: canceled\r
277         */\r
278         u8 event_phase;\r
279         u8 bubbles;\r
280         u8 cancelable;\r
281         /*output only - indicates UI events (mouse) have been detected*/\r
282         u8 has_ui_events;\r
283         \r
284         /*we don't use a GF_DOMEventTarget here since the structure is only created when events are attached */\r
285         void *target;\r
286         u32 target_type;\r
287 \r
288         GF_DOMEventTarget *currentTarget;\r
289         Double timestamp;\r
290         /*UIEvent extension.    \r
291                 For mouse extensions: number of clicks \r
292                 For key event: the key code\r
293                 For SMIL event: number of iteration (repeat)\r
294         */\r
295         u32 detail;\r
296 \r
297         /*MouseEvent extension*/\r
298         s32 screenX, screenY;\r
299         s32 clientX, clientY;\r
300         u32 button;\r
301         /*key flags*/\r
302         u32 key_flags;\r
303         /*key hardware code*/\r
304         u32 key_hw_code;\r
305         GF_Node *relatedTarget;\r
306         /*Zoom event*/\r
307         GF_Rect screen_rect;\r
308         GF_Point2D prev_translate, new_translate;\r
309         Fixed prev_scale, new_scale;\r
310         /* CPU */\r
311         u32 cpu_percentage;\r
312         /* Battery */\r
313         Bool onBattery;\r
314         u32 batteryState, batteryLevel;\r
315         /*smil event time*/\r
316         Double smil_event_time;\r
317         /* mutation event */\r
318         GF_Node *relatedNode;\r
319 \r
320         /*DOM event used in VRML (GPAC's internal)*/\r
321         Bool is_vrml;\r
322         GF_DOMMediaAccessEvent *mae;\r
323 \r
324         /*number of listeners triggered by the event*/\r
325         u32 consumed;\r
326 } GF_DOM_Event;\r
327 \r
328 /*fires event on the specified node\r
329 BE CAREFULL: event execution may very well destroy ANY node, especially the event target node !!\r
330 */\r
331 Bool gf_dom_event_fire(GF_Node *node, GF_DOM_Event *event);\r
332 \r
333 /*fires event on the specified node\r
334 BE CAREFULL: event execution may very well destroy ANY node, especially the event target node !!\r
335 use_stack: a list of parent node/use node pairs for bubbling phase - may be NULL\r
336 */\r
337 Bool gf_dom_event_fire_ex(GF_Node *node, GF_DOM_Event *event, GF_List *use_stack);\r
338 \r
339 u32 gf_dom_event_type_by_name(const char *name);\r
340 const char *gf_dom_event_get_name(u32 type);\r
341 \r
342 const char *gf_dom_get_key_name(u32 key_identifier);\r
343 u32 gf_dom_get_key_type(char *key_name);\r
344 \r
345 \r
346 /*listener is simply a node added to the node events list. \r
347 Only one observer can be attached to a listener. The listener will remove itself from the observer\r
348 event list when destructed.*/\r
349 \r
350 typedef struct __xml_ev_handler \r
351 {\r
352         GF_DOM_BASE_NODE\r
353         void (*handle_event)(GF_Node *hdl, GF_DOM_Event *event, GF_Node *observer);\r
354         /*if handler targets a VRML script, point to the script here*/\r
355         void *js_context;\r
356         /*target EventListener object (this) */\r
357         void *evt_listen_obj;\r
358         /*function value for spidermonkey - we cannot use JS_CallFunction since it does not work on closures\r
359         we use 64 bits to store the value for portability safety*/\r
360         u64 js_fun_val;\r
361         /*compiled function for the case were CallFunction is needed*/\r
362         void *js_fun;\r
363 } GF_DOMHandler;\r
364 \r
365 \r
366 \r
367 enum\r
368 {\r
369         /*basic DOM events*/\r
370         GF_DOM_EVENT_DOM = 1,\r
371         /*DOM mutation events*/\r
372         GF_DOM_EVENT_MUTATION = 1<<1,\r
373         /*DOM mouse events*/\r
374         GF_DOM_EVENT_MOUSE = 1<<2,\r
375         /*DOM focus events*/\r
376         GF_DOM_EVENT_FOCUS = 1<<3,\r
377         /*DOM key events*/\r
378         GF_DOM_EVENT_KEY = 1<<4,\r
379         /*DOM/SVG/HTML UI events (resize, scroll, ...)*/\r
380         GF_DOM_EVENT_UI = 1<<5,\r
381         /*text events*/\r
382         GF_DOM_EVENT_TEXT = 1<<6,\r
383         /*SVG events*/\r
384         GF_DOM_EVENT_SVG = 1<<7,\r
385         /*SMIL events*/\r
386         GF_DOM_EVENT_SMIL = 1<<8,\r
387         /*LASeR events*/\r
388         GF_DOM_EVENT_LASER = 1<<9,\r
389         /*MediaAccess events*/\r
390         GF_DOM_EVENT_MEDIA_ACCESS = 1<<10,\r
391 \r
392         /*fake events - these events are NEVER fired*/\r
393         GF_DOM_EVENT_FAKE = 1<<31,\r
394 };\r
395 u32 gf_dom_event_get_category(u32 type);\r
396 u32 gf_sg_get_dom_event_filter(GF_SceneGraph *sg);\r
397 u32 gf_node_get_dom_event_filter(GF_Node *node);\r
398 \r
399 void gf_sg_register_event_type(GF_SceneGraph *sg, u32 type);\r
400 void gf_sg_unregister_event_type(GF_SceneGraph *sg, u32 type);\r
401 \r
402 /*adds a listener to the node.\r
403 The listener node is NOT registered with the node (it may very well not be a direct child of the node)\r
404 @listener is a listenerElement (XML event)\r
405 */\r
406 GF_Err gf_node_dom_listener_add(GF_Node *node, GF_Node *listener);\r
407 u32 gf_dom_listener_count(GF_Node *node);\r
408 GF_Node *gf_dom_listener_get(GF_Node *node, u32 i);\r
409 \r
410 /*creates a default listener/handler for the given event on the given node, and return the \r
411 handler element to allow for handler function override\r
412 Listener/handler are stored at the node level*/\r
413 GF_DOMHandler *gf_dom_listener_build(GF_Node *observer, u32 event_type, u32 event_param);\r
414 \r
415 \r
416 void gf_node_register_iri(GF_SceneGraph *sg, XMLRI *iri);\r
417 void gf_node_unregister_iri(GF_SceneGraph *sg, XMLRI *iri);\r
418 u32 gf_node_animation_count(GF_Node *node);\r
419 \r
420 GF_Err gf_node_store_embedded_data(XMLRI *iri, const char *cache_dir, const char *base_filename);\r
421 \r
422 \r
423 /**************************************************\r
424  *  SVG's styling properties (see 6.1 in REC 1.1) *\r
425  *************************************************/\r
426 \r
427 typedef struct {\r
428         /* Tiny 1.2 properties*/\r
429         SVG_Paint                                       *color;\r
430         SVG_Paint                                       *fill; \r
431         SVG_Paint                                       *stroke;\r
432         SVG_Paint                                       *solid_color;\r
433         SVG_Paint                                       *stop_color;\r
434         SVG_Paint                                       *viewport_fill;\r
435 \r
436         SVG_Number                                      *fill_opacity;\r
437         SVG_Number                                      *solid_opacity;\r
438         SVG_Number                                      *stop_opacity;\r
439         SVG_Number                                      *stroke_opacity;\r
440         SVG_Number                                      *viewport_fill_opacity;\r
441         SVG_Number                                      *opacity; /* Restricted property in Tiny 1.2 */\r
442 \r
443         SVG_Number                                      *audio_level;\r
444         Fixed                                           computed_audio_level;\r
445 \r
446         SVG_RenderingHint                       *color_rendering;\r
447         SVG_RenderingHint                       *image_rendering;\r
448         SVG_RenderingHint                       *shape_rendering;\r
449         SVG_RenderingHint                       *text_rendering;\r
450 \r
451         SVG_Display                                     *display; \r
452         SVG_Visibility                          *visibility;\r
453         SVG_Overflow                            *overflow; /* Restricted property in Tiny 1.2 */\r
454         \r
455         SVG_FontFamily                          *font_family;\r
456         SVG_FontSize                            *font_size;\r
457         SVG_FontStyle                           *font_style; \r
458         SVG_FontWeight                          *font_weight; \r
459         SVG_FontVariant                         *font_variant; \r
460         SVG_Number                                      *line_increment;        \r
461         SVG_TextAnchor                          *text_anchor;\r
462         SVG_DisplayAlign                        *display_align;\r
463         SVG_TextAlign                           *text_align;\r
464 \r
465         SVG_PointerEvents                       *pointer_events;\r
466         \r
467         SVG_FillRule                            *fill_rule; \r
468         \r
469         SVG_StrokeDashArray                     *stroke_dasharray;\r
470         SVG_Length                                      *stroke_dashoffset;\r
471         SVG_StrokeLineCap                       *stroke_linecap; \r
472         SVG_StrokeLineJoin                      *stroke_linejoin; \r
473         SVG_Number                                      *stroke_miterlimit; \r
474         SVG_Length                                      *stroke_width;\r
475         SVG_VectorEffect                        *vector_effect;\r
476         \r
477         /* Full 1.1 props, i.e. not implemented */\r
478 /*\r
479         SVG_String *font;\r
480         SVG_String *font_size_adjust;\r
481         SVG_String *font_stretch;\r
482         SVG_String *direction;\r
483         SVG_String *letter_spacing;\r
484         SVG_String *text_decoration;\r
485         SVG_String *unicode_bidi;\r
486         SVG_String *word_spacing;\r
487         SVG_String *clip; \r
488         SVG_String *cursor;\r
489         SVG_String *clip_path;\r
490         SVG_String *clip_rule;\r
491         SVG_String *mask;\r
492         SVG_String *enable_background;\r
493         SVG_String *filter;\r
494         SVG_String *flood_color;\r
495         SVG_String *flood_opacity;\r
496         SVG_String *lighting_color;\r
497         SVG_String *color_interpolation;\r
498         SVG_String *color_interpolation_filters;\r
499         SVG_String *color_profile;\r
500         SVG_String *marker;\r
501         SVG_String *marker_end;\r
502         SVG_String *marker_mid;\r
503         SVG_String *marker_start;\r
504         SVG_String *alignment_baseline;\r
505         SVG_String *baseline_shift;\r
506         SVG_String *dominant_baseline;\r
507         SVG_String *glyph_orientation_horizontal;\r
508         SVG_String *glyph_orientation_vertical;\r
509         SVG_String *kerning;\r
510         SVG_String *writing_mode;\r
511 */\r
512 } SVGPropertiesPointers;\r
513 \r
514 /*************************************\r
515  * Generic SVG element functions     *\r
516  *************************************/\r
517 \r
518 void gf_svg_properties_init_pointers(SVGPropertiesPointers *svg_props);\r
519 void gf_svg_properties_reset_pointers(SVGPropertiesPointers *svg_props);\r
520 \r
521 void gf_svg_apply_animations(GF_Node *node, SVGPropertiesPointers *render_svg_props);\r
522 Bool gf_svg_has_appearance_flag_dirty(u32 flags);\r
523 \r
524 Bool gf_svg_is_element_transformable(u32 tag);\r
525 \r
526 void *gf_svg_create_attribute_value(u32 attribute_type);\r
527 void gf_svg_delete_attribute_value(u32 type, void *value, GF_SceneGraph *sg);\r
528 /* a == b */\r
529 Bool gf_svg_attributes_equal(GF_FieldInfo *a, GF_FieldInfo *b);\r
530 /* a = b */\r
531 GF_Err gf_svg_attributes_copy(GF_FieldInfo *a, GF_FieldInfo *b, Bool clamp);\r
532 /* c = a + b */\r
533 GF_Err gf_svg_attributes_add(GF_FieldInfo *a, GF_FieldInfo *b, GF_FieldInfo *c, Bool clamp);\r
534 Bool gf_svg_attribute_is_interpolatable(u32 type) ;\r
535 /* c = coef * a + (1 - coef) * b */\r
536 GF_Err gf_svg_attributes_interpolate(GF_FieldInfo *a, GF_FieldInfo *b, GF_FieldInfo *c, Fixed coef, Bool clamp);\r
537 /* c = alpha * a + beta * b */\r
538 GF_Err gf_svg_attributes_muladd(Fixed alpha, GF_FieldInfo *a, Fixed beta, GF_FieldInfo *b, GF_FieldInfo *c, Bool clamp);\r
539 \r
540 GF_Err gf_node_get_attribute_by_tag(GF_Node *node, u32 attribute_tag, Bool create_if_not_found, Bool set_default, GF_FieldInfo *field);\r
541 \r
542 char *gf_svg_attribute_type_to_string(u32 att_type);\r
543 GF_Err gf_svg_parse_attribute(GF_Node *n, GF_FieldInfo *info, char *attribute_content, u8 anim_value_type);\r
544 void gf_svg_parse_style(GF_Node *n, char *style);\r
545 \r
546 GF_Err gf_svg_dump_attribute(GF_Node *elt, GF_FieldInfo *info, char *attValue);\r
547 GF_Err gf_svg_dump_attribute_indexed(GF_Node *elt, GF_FieldInfo *info, char *attValue);\r
548 \r
549 void gf_svg_path_build(GF_Path *path, GF_List *commands, GF_List *points);\r
550 \r
551 GF_Err gf_svg_parse_element_id(GF_Node *n, const char *nodename, Bool warning_if_defined);\r
552 \r
553 const char *gf_svg_get_system_paint_server_name(u32 paint_type);\r
554 u32 gf_svg_get_system_paint_server_type(const char *name);\r
555 \r
556 \r
557 Bool gf_smil_notify_timed_elements(GF_SceneGraph *sg);\r
558 void gf_smil_timing_insert_clock(GF_Node *elt, Bool is_end, Double clock);\r
559 \r
560 void gf_svg_parse_transformlist(GF_Matrix2D *mat, char *attribute_content);\r
561 \r
562 typedef struct _smil_timing_rti SMIL_Timing_RTI;\r
563 \r
564 enum\r
565 {\r
566         SMIL_TIMING_EVAL_NONE = 0,\r
567         SMIL_TIMING_EVAL_UPDATE,\r
568         SMIL_TIMING_EVAL_FREEZE,\r
569         SMIL_TIMING_EVAL_REMOVE,\r
570         SMIL_TIMING_EVAL_REPEAT,\r
571         SMIL_TIMING_EVAL_FRACTION,\r
572         SMIL_TIMING_EVAL_DISCARD,\r
573         /*signaled the animation element has been inserted in the DOM tree*/\r
574         SMIL_TIMING_EVAL_ACTIVATE,\r
575         /*signaled the animation element has been removed from the DOM tree*/\r
576         SMIL_TIMING_EVAL_DEACTIVATE,\r
577 };\r
578 \r
579 void gf_smil_set_evaluation_callback(GF_Node *smil_time, \r
580                                                                          void (*smil_evaluate)(struct _smil_timing_rti *rti, Fixed normalized_simple_time, u32 state));\r
581 \r
582 void gf_smil_set_media_duration(SMIL_Timing_RTI *rti, Double media_duration);\r
583 Double gf_smil_get_media_duration(SMIL_Timing_RTI *rti);\r
584 GF_Node *gf_smil_get_element(SMIL_Timing_RTI *rti);\r
585 \r
586 Bool gf_smil_timing_is_active(GF_Node *node);\r
587 void gf_smil_timing_modified(GF_Node *node, GF_FieldInfo *field);\r
588 \r
589 /*******************************************************************************\r
590  * \r
591  *          SVG Scene Graph for dynamic allocation of attributes                   *\r
592  *\r
593  *******************************************************************************/\r
594 \r
595 /*SVG attributes are just DOM ones*/\r
596 typedef struct __dom_base_attribute SVGAttribute;\r
597 typedef struct __dom_full_attribute SVGExtendedAttribute;\r
598 typedef struct __dom_base_node SVG_Element;\r
599 \r
600 typedef struct __xml_ev_handler SVG_handlerElement;\r
601 \r
602 \r
603 typedef struct _all_atts SVGAllAttributes;\r
604 \r
605 void gf_svg_flatten_attributes(SVG_Element *e, SVGAllAttributes *all_atts);\r
606 const char *gf_svg_get_attribute_name(GF_Node *elt, u32 tag);\r
607 u32 gf_svg_apply_inheritance(SVGAllAttributes *all_atts, SVGPropertiesPointers *render_svg_props) ;\r
608 \r
609 GF_DOMAttribute *gf_xml_create_attribute(GF_Node *node, u32 tag);\r
610 u32 gf_xml_get_attribute_type(u32 tag);\r
611 u32 gf_xml_get_attribute_tag(GF_Node *node, char *attribute_name, u32 ns);\r
612 \r
613 u32 gf_xml_get_element_tag(const char *element_name, u32 xmlns);\r
614 \r
615 \r
616 #ifdef __cplusplus\r
617 }\r
618 #endif\r
619 \r
620 #endif  //_GF_SG_SVG_H_\r