OSDN Git Service

add tstools.
[rec10/rec10-git.git] / tstools / DtsEdit / src / gpac / scenegraph_svg.h
diff --git a/tstools/DtsEdit/src/gpac/scenegraph_svg.h b/tstools/DtsEdit/src/gpac/scenegraph_svg.h
new file mode 100644 (file)
index 0000000..c153120
--- /dev/null
@@ -0,0 +1,620 @@
+/*\r
+ *                     GPAC - Multimedia Framework C SDK\r
+ *\r
+ *                     Copyright (c) Cyril Concolato 2004\r
+ *                                     All rights reserved\r
+ *\r
+ *  This file is part of GPAC / SVG Scene Graph sub-project\r
+ *\r
+ *  GPAC is free software; you can redistribute it and/or modify\r
+ *  it under the terms of the GNU Lesser General Public License as published by\r
+ *  the Free Software Foundation; either version 2, or (at your option)\r
+ *  any later version.\r
+ *   \r
+ *  GPAC is distributed in the hope that it will be useful,\r
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *  GNU Lesser General Public License for more details.\r
+ *   \r
+ *  You should have received a copy of the GNU Lesser General Public\r
+ *  License along with this library; see the file COPYING.  If not, write to\r
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
+ *\r
+ */\r
+\r
+#ifndef _GF_SG_SVG_H_\r
+#define _GF_SG_SVG_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include <gpac/scenegraph.h>\r
+#include <gpac/svg_types.h>\r
+\r
+/*******************************************************************************\r
+ * \r
+ *          DOM base scene graph\r
+ *\r
+ *******************************************************************************/\r
+\r
+enum\r
+{\r
+       /*should never be used, this is only a parsing error*/\r
+       TAG_DOM_ATTRIBUTE_NULL,\r
+       /*this tag is set for a full dom attribute only - attribute name is then available*/\r
+       TAG_DOM_ATT_any,\r
+\r
+       TAG_XML_ATT_RANGE_FIRST,\r
+       TAG_XML_ATT_id = TAG_XML_ATT_RANGE_FIRST,\r
+       TAG_XML_ATT_base,\r
+       TAG_XML_ATT_lang,\r
+       TAG_XML_ATT_space,\r
+       TAG_XML_ATT_RANGE_LAST,\r
+       TAG_XLINK_ATT_RANGE_FIRST,\r
+\r
+       TAG_XLINK_ATT_type = TAG_XLINK_ATT_RANGE_FIRST,\r
+       TAG_XLINK_ATT_role,\r
+       TAG_XLINK_ATT_arcrole,\r
+       TAG_XLINK_ATT_title,\r
+       TAG_XLINK_ATT_href,\r
+       TAG_XLINK_ATT_show,\r
+       TAG_XLINK_ATT_actuate,\r
+       TAG_XLINK_ATT_RANGE_LAST,\r
+\r
+       TAG_XMLEV_ATT_RANGE_FIRST,\r
+       TAG_XMLEV_ATT_event,\r
+       TAG_XMLEV_ATT_phase,\r
+       TAG_XMLEV_ATT_propagate,\r
+       TAG_XMLEV_ATT_defaultAction,\r
+       TAG_XMLEV_ATT_observer,\r
+       TAG_XMLEV_ATT_target,\r
+       TAG_XMLEV_ATT_handler,\r
+       TAG_XMLEV_ATT_RANGE_LAST,\r
+\r
+       TAG_LSR_ATT_RANGE_FIRST,\r
+       TAG_LSR_ATT_enabled,\r
+       TAG_LSR_ATT_RANGE_LAST,\r
+       /*these attribute types are only use for binary purpose*/\r
+       TAG_LSR_ATT_children,\r
+       TAG_LSR_ATT_overflow,\r
+       TAG_LSR_ATT_rotation,\r
+       TAG_LSR_ATT_scale,\r
+       TAG_LSR_ATT_translation,\r
+       TAG_LSR_ATT_svg_width,\r
+       TAG_LSR_ATT_svg_height,\r
+       TAG_LSR_ATT_textContent,\r
+       /*WHAT THE HECK IS THIS THING IN THE SDL BUT NOWHERE IN THE SPEC ?*/\r
+       TAG_LSR_ATT_text_display,\r
+\r
+       TAG_SVG_ATT_RANGE_FIRST,\r
+\r
+       TAG_XBL_ATT_RANGE_FIRST = TAG_SVG_ATT_RANGE_FIRST + 256,\r
+       TAG_XBL_ATT_id = TAG_XBL_ATT_RANGE_FIRST,\r
+       TAG_XBL_ATT_extends,\r
+       TAG_XBL_ATT_display,\r
+       TAG_XBL_ATT_inheritstyle,\r
+       TAG_XBL_ATT_includes,\r
+       TAG_XBL_ATT_name,\r
+       TAG_XBL_ATT_implements,\r
+       TAG_XBL_ATT_type,\r
+       TAG_XBL_ATT_readonly,\r
+       TAG_XBL_ATT_onget,\r
+       TAG_XBL_ATT_onset,\r
+       TAG_XBL_ATT_event,\r
+       TAG_XBL_ATT_action,\r
+       TAG_XBL_ATT_phase,\r
+       TAG_XBL_ATT_button,\r
+       TAG_XBL_ATT_modifiers,\r
+       TAG_XBL_ATT_keycode,\r
+       TAG_XBL_ATT_key,\r
+       TAG_XBL_ATT_charcode,\r
+       TAG_XBL_ATT_clickcount,\r
+       TAG_XBL_ATT_command,\r
+       TAG_XBL_ATT_preventdefault,\r
+       TAG_XBL_ATT_src,\r
+};\r
+\r
+\r
+#define GF_DOM_BASE_ATTRIBUTE  \\r
+       u16 tag;        /*attribute identifier*/        \\r
+       u16 data_type; /*attribute datatype*/     \\r
+       void *data; /*data pointer*/                            \\r
+       struct __dom_base_attribute *next; /*next attribute*/\r
+\r
+#define GF_DOM_FULL_ATTRIBUTE  \\r
+       GF_DOM_ATTRIBUTE        \\r
+\r
+typedef struct __dom_base_attribute\r
+{\r
+       GF_DOM_BASE_ATTRIBUTE\r
+} GF_DOMAttribute;\r
+\r
+typedef struct __dom_full_attribute\r
+{\r
+       GF_DOM_BASE_ATTRIBUTE\r
+       u32 xmlns;\r
+       char *name; /*attribute name - in this case, the data field is the attribute literal value*/\r
+} GF_DOMFullAttribute;\r
+\r
+#define GF_DOM_BASE_NODE        \\r
+       BASE_NODE                               \\r
+       CHILDREN                                \\r
+       GF_DOMAttribute *attributes;\r
+\r
+typedef struct __dom_base_node\r
+{\r
+       GF_DOM_BASE_NODE\r
+} GF_DOMNode;\r
+\r
+typedef struct __dom_full_node\r
+{\r
+       GF_DOM_BASE_NODE\r
+       char *name;\r
+       u32 ns;\r
+} GF_DOMFullNode;\r
+\r
+\r
+\r
+enum\r
+{\r
+       /*no NS specified, it will be evaluated from attribute/node name*/\r
+       GF_XMLNS_NONE,\r
+\r
+       GF_XMLNS_XML,\r
+       GF_XMLNS_XLINK,\r
+       GF_XMLNS_XMLEV,\r
+       GF_XMLNS_LASER,\r
+       GF_XMLNS_SVG,\r
+       GF_XMLNS_XBL,\r
+\r
+       /*any other namespace uses the CRC32 of the namespace as an identifier*/\r
+};\r
+\r
+GF_Err gf_sg_add_namespace(GF_SceneGraph *sg, char *name, char *qname);\r
+GF_Err gf_sg_remove_namespace(GF_SceneGraph *sg, char *name, char *qname);\r
+u32 gf_sg_get_namespace_code(GF_SceneGraph *sg, char *qname);\r
+u32 gf_sg_get_namespace_code_from_name(GF_SceneGraph *sg, char *name);\r
+const char *gf_sg_get_namespace_qname(GF_SceneGraph *sg, u32 xmlns_id);\r
+\r
+u32 gf_xml_get_element_namespace(GF_Node *n);\r
+const char *gf_sg_get_namespace(GF_SceneGraph *sg, u32 xmlns_id);\r
+\r
+void gf_xml_push_namespaces(GF_DOMNode *elt);\r
+void gf_xml_pop_namespaces(GF_DOMNode *elt);\r
+\r
+\r
+\r
+\r
+enum\r
+{\r
+       GF_DOM_TEXT_REGULAR = 0,\r
+       GF_DOM_TEXT_CDATA,\r
+       /*inserted text node (typically external script)*/\r
+       GF_DOM_TEXT_INSERTED\r
+};\r
+\r
+typedef struct\r
+{\r
+       BASE_NODE\r
+       CHILDREN\r
+       char *textContent;\r
+       u32 type;\r
+} GF_DOMText;\r
+\r
+/*creates a new text node, assign string (does NOT duplicate it) and register node with parent if desired*/\r
+GF_DOMText *gf_dom_add_text_node(GF_Node *parent, char *text_data);\r
+\r
+/*creates a new text node - this DOES NOT register the node at all*/\r
+GF_DOMText *gf_dom_new_text_node(GF_SceneGraph *sg);\r
+\r
+typedef struct\r
+{\r
+       BASE_NODE\r
+       CHILDREN\r
+       char *data;\r
+       u32 data_size;\r
+       GF_List *updates;\r
+} GF_DOMUpdates;\r
+\r
+/*creates a new updates node and register node with parent*/\r
+GF_DOMUpdates *gf_dom_add_updates_node(GF_Node *parent);\r
+\r
+typedef struct\r
+{\r
+       Bool bufferValid;\r
+       u32 level;\r
+       Fixed remaining_time;\r
+       u16 status;\r
+       const char *session_name;\r
+       u32 nb_streams;\r
+       struct mae_item {u32 streamType; u32 mediaType; u32 transport; } streams[20];\r
+} GF_DOMMediaAccessEvent;\r
+\r
+/* \r
+       DOM event handling\r
+*/\r
+enum\r
+{\r
+       GF_DOM_EVENT_PHASE_CAPTURE = 1,\r
+       GF_DOM_EVENT_PHASE_AT_TARGET = 2,\r
+       GF_DOM_EVENT_PHASE_BUBBLE = 3,\r
+\r
+       /*special phase indicating the event has been canceled*/\r
+       GF_DOM_EVENT_PHASE_CANCEL = 1<<5,\r
+       /*special phase indicating the event has been canceled immediately*/\r
+       GF_DOM_EVENT_PHASE_CANCEL_ALL = 1<<6,\r
+       /*special phase indicating the default action of the event is prevented*/\r
+       GF_DOM_EVENT_PHASE_PREVENT = 1<<7,\r
+};\r
+\r
+/*possible event targets*/\r
+enum\r
+{\r
+       GF_DOM_EVENT_NODE,\r
+       GF_DOM_EVENT_DOCUMENT,\r
+       GF_DOM_EVENT_XHR,\r
+       GF_DOM_EVENT_TIMER,\r
+       GF_DOM_EVENT_CONNECTION,\r
+};\r
+\r
+typedef struct \r
+{\r
+       GF_List *evt_list;\r
+       void *ptr;\r
+       u32 ptr_type;\r
+} GF_DOMEventTarget;\r
+\r
+GF_Err gf_dom_listener_add(GF_Node *listener, GF_DOMEventTarget *evt_target);\r
+\r
+\r
+typedef struct\r
+{\r
+       /*event type, as defined in <gpac/events.h>*/\r
+       u32 type;\r
+       /*event phase type, READ-ONLY\r
+       0: at target, 1: bubbling, 2: capturing , 3: canceled\r
+       */\r
+       u8 event_phase;\r
+       u8 bubbles;\r
+       u8 cancelable;\r
+       /*output only - indicates UI events (mouse) have been detected*/\r
+       u8 has_ui_events;\r
+       \r
+       /*we don't use a GF_DOMEventTarget here since the structure is only created when events are attached */\r
+       void *target;\r
+       u32 target_type;\r
+\r
+       GF_DOMEventTarget *currentTarget;\r
+       Double timestamp;\r
+       /*UIEvent extension.    \r
+               For mouse extensions: number of clicks \r
+               For key event: the key code\r
+               For SMIL event: number of iteration (repeat)\r
+       */\r
+       u32 detail;\r
+\r
+       /*MouseEvent extension*/\r
+       s32 screenX, screenY;\r
+       s32 clientX, clientY;\r
+       u32 button;\r
+       /*key flags*/\r
+       u32 key_flags;\r
+       /*key hardware code*/\r
+       u32 key_hw_code;\r
+       GF_Node *relatedTarget;\r
+       /*Zoom event*/\r
+       GF_Rect screen_rect;\r
+       GF_Point2D prev_translate, new_translate;\r
+       Fixed prev_scale, new_scale;\r
+       /* CPU */\r
+       u32 cpu_percentage;\r
+       /* Battery */\r
+       Bool onBattery;\r
+       u32 batteryState, batteryLevel;\r
+       /*smil event time*/\r
+       Double smil_event_time;\r
+       /* mutation event */\r
+       GF_Node *relatedNode;\r
+\r
+       /*DOM event used in VRML (GPAC's internal)*/\r
+       Bool is_vrml;\r
+       GF_DOMMediaAccessEvent *mae;\r
+\r
+       /*number of listeners triggered by the event*/\r
+       u32 consumed;\r
+} GF_DOM_Event;\r
+\r
+/*fires event on the specified node\r
+BE CAREFULL: event execution may very well destroy ANY node, especially the event target node !!\r
+*/\r
+Bool gf_dom_event_fire(GF_Node *node, GF_DOM_Event *event);\r
+\r
+/*fires event on the specified node\r
+BE CAREFULL: event execution may very well destroy ANY node, especially the event target node !!\r
+use_stack: a list of parent node/use node pairs for bubbling phase - may be NULL\r
+*/\r
+Bool gf_dom_event_fire_ex(GF_Node *node, GF_DOM_Event *event, GF_List *use_stack);\r
+\r
+u32 gf_dom_event_type_by_name(const char *name);\r
+const char *gf_dom_event_get_name(u32 type);\r
+\r
+const char *gf_dom_get_key_name(u32 key_identifier);\r
+u32 gf_dom_get_key_type(char *key_name);\r
+\r
+\r
+/*listener is simply a node added to the node events list. \r
+Only one observer can be attached to a listener. The listener will remove itself from the observer\r
+event list when destructed.*/\r
+\r
+typedef struct __xml_ev_handler \r
+{\r
+       GF_DOM_BASE_NODE\r
+       void (*handle_event)(GF_Node *hdl, GF_DOM_Event *event, GF_Node *observer);\r
+       /*if handler targets a VRML script, point to the script here*/\r
+       void *js_context;\r
+       /*target EventListener object (this) */\r
+       void *evt_listen_obj;\r
+       /*function value for spidermonkey - we cannot use JS_CallFunction since it does not work on closures\r
+       we use 64 bits to store the value for portability safety*/\r
+       u64 js_fun_val;\r
+       /*compiled function for the case were CallFunction is needed*/\r
+       void *js_fun;\r
+} GF_DOMHandler;\r
+\r
+\r
+\r
+enum\r
+{\r
+       /*basic DOM events*/\r
+       GF_DOM_EVENT_DOM = 1,\r
+       /*DOM mutation events*/\r
+       GF_DOM_EVENT_MUTATION = 1<<1,\r
+       /*DOM mouse events*/\r
+       GF_DOM_EVENT_MOUSE = 1<<2,\r
+       /*DOM focus events*/\r
+       GF_DOM_EVENT_FOCUS = 1<<3,\r
+       /*DOM key events*/\r
+       GF_DOM_EVENT_KEY = 1<<4,\r
+       /*DOM/SVG/HTML UI events (resize, scroll, ...)*/\r
+       GF_DOM_EVENT_UI = 1<<5,\r
+       /*text events*/\r
+       GF_DOM_EVENT_TEXT = 1<<6,\r
+       /*SVG events*/\r
+       GF_DOM_EVENT_SVG = 1<<7,\r
+       /*SMIL events*/\r
+       GF_DOM_EVENT_SMIL = 1<<8,\r
+       /*LASeR events*/\r
+       GF_DOM_EVENT_LASER = 1<<9,\r
+       /*MediaAccess events*/\r
+       GF_DOM_EVENT_MEDIA_ACCESS = 1<<10,\r
+\r
+       /*fake events - these events are NEVER fired*/\r
+       GF_DOM_EVENT_FAKE = 1<<31,\r
+};\r
+u32 gf_dom_event_get_category(u32 type);\r
+u32 gf_sg_get_dom_event_filter(GF_SceneGraph *sg);\r
+u32 gf_node_get_dom_event_filter(GF_Node *node);\r
+\r
+void gf_sg_register_event_type(GF_SceneGraph *sg, u32 type);\r
+void gf_sg_unregister_event_type(GF_SceneGraph *sg, u32 type);\r
+\r
+/*adds a listener to the node.\r
+The listener node is NOT registered with the node (it may very well not be a direct child of the node)\r
+@listener is a listenerElement (XML event)\r
+*/\r
+GF_Err gf_node_dom_listener_add(GF_Node *node, GF_Node *listener);\r
+u32 gf_dom_listener_count(GF_Node *node);\r
+GF_Node *gf_dom_listener_get(GF_Node *node, u32 i);\r
+\r
+/*creates a default listener/handler for the given event on the given node, and return the \r
+handler element to allow for handler function override\r
+Listener/handler are stored at the node level*/\r
+GF_DOMHandler *gf_dom_listener_build(GF_Node *observer, u32 event_type, u32 event_param);\r
+\r
+\r
+void gf_node_register_iri(GF_SceneGraph *sg, XMLRI *iri);\r
+void gf_node_unregister_iri(GF_SceneGraph *sg, XMLRI *iri);\r
+u32 gf_node_animation_count(GF_Node *node);\r
+\r
+GF_Err gf_node_store_embedded_data(XMLRI *iri, const char *cache_dir, const char *base_filename);\r
+\r
+\r
+/**************************************************\r
+ *  SVG's styling properties (see 6.1 in REC 1.1) *\r
+ *************************************************/\r
+\r
+typedef struct {\r
+       /* Tiny 1.2 properties*/\r
+       SVG_Paint                                       *color;\r
+       SVG_Paint                                       *fill; \r
+       SVG_Paint                                       *stroke;\r
+       SVG_Paint                                       *solid_color;\r
+       SVG_Paint                                       *stop_color;\r
+       SVG_Paint                                       *viewport_fill;\r
+\r
+       SVG_Number                                      *fill_opacity;\r
+       SVG_Number                                      *solid_opacity;\r
+       SVG_Number                                      *stop_opacity;\r
+       SVG_Number                                      *stroke_opacity;\r
+       SVG_Number                                      *viewport_fill_opacity;\r
+       SVG_Number                                      *opacity; /* Restricted property in Tiny 1.2 */\r
+\r
+       SVG_Number                                      *audio_level;\r
+       Fixed                                           computed_audio_level;\r
+\r
+       SVG_RenderingHint                       *color_rendering;\r
+       SVG_RenderingHint                       *image_rendering;\r
+       SVG_RenderingHint                       *shape_rendering;\r
+       SVG_RenderingHint                       *text_rendering;\r
+\r
+       SVG_Display                                     *display; \r
+       SVG_Visibility                          *visibility;\r
+       SVG_Overflow                            *overflow; /* Restricted property in Tiny 1.2 */\r
+       \r
+       SVG_FontFamily                          *font_family;\r
+       SVG_FontSize                            *font_size;\r
+       SVG_FontStyle                           *font_style; \r
+       SVG_FontWeight                          *font_weight; \r
+       SVG_FontVariant                         *font_variant; \r
+       SVG_Number                                      *line_increment;        \r
+       SVG_TextAnchor                          *text_anchor;\r
+       SVG_DisplayAlign                        *display_align;\r
+       SVG_TextAlign                           *text_align;\r
+\r
+       SVG_PointerEvents                       *pointer_events;\r
+       \r
+       SVG_FillRule                            *fill_rule; \r
+       \r
+       SVG_StrokeDashArray                     *stroke_dasharray;\r
+       SVG_Length                                      *stroke_dashoffset;\r
+       SVG_StrokeLineCap                       *stroke_linecap; \r
+       SVG_StrokeLineJoin                      *stroke_linejoin; \r
+       SVG_Number                                      *stroke_miterlimit; \r
+       SVG_Length                                      *stroke_width;\r
+       SVG_VectorEffect                        *vector_effect;\r
+       \r
+       /* Full 1.1 props, i.e. not implemented */\r
+/*\r
+       SVG_String *font;\r
+       SVG_String *font_size_adjust;\r
+       SVG_String *font_stretch;\r
+       SVG_String *direction;\r
+       SVG_String *letter_spacing;\r
+       SVG_String *text_decoration;\r
+       SVG_String *unicode_bidi;\r
+       SVG_String *word_spacing;\r
+       SVG_String *clip; \r
+       SVG_String *cursor;\r
+       SVG_String *clip_path;\r
+       SVG_String *clip_rule;\r
+       SVG_String *mask;\r
+       SVG_String *enable_background;\r
+       SVG_String *filter;\r
+       SVG_String *flood_color;\r
+       SVG_String *flood_opacity;\r
+       SVG_String *lighting_color;\r
+       SVG_String *color_interpolation;\r
+       SVG_String *color_interpolation_filters;\r
+       SVG_String *color_profile;\r
+       SVG_String *marker;\r
+       SVG_String *marker_end;\r
+       SVG_String *marker_mid;\r
+       SVG_String *marker_start;\r
+       SVG_String *alignment_baseline;\r
+       SVG_String *baseline_shift;\r
+       SVG_String *dominant_baseline;\r
+       SVG_String *glyph_orientation_horizontal;\r
+       SVG_String *glyph_orientation_vertical;\r
+       SVG_String *kerning;\r
+       SVG_String *writing_mode;\r
+*/\r
+} SVGPropertiesPointers;\r
+\r
+/*************************************\r
+ * Generic SVG element functions     *\r
+ *************************************/\r
+\r
+void gf_svg_properties_init_pointers(SVGPropertiesPointers *svg_props);\r
+void gf_svg_properties_reset_pointers(SVGPropertiesPointers *svg_props);\r
+\r
+void gf_svg_apply_animations(GF_Node *node, SVGPropertiesPointers *render_svg_props);\r
+Bool gf_svg_has_appearance_flag_dirty(u32 flags);\r
+\r
+Bool gf_svg_is_element_transformable(u32 tag);\r
+\r
+void *gf_svg_create_attribute_value(u32 attribute_type);\r
+void gf_svg_delete_attribute_value(u32 type, void *value, GF_SceneGraph *sg);\r
+/* a == b */\r
+Bool gf_svg_attributes_equal(GF_FieldInfo *a, GF_FieldInfo *b);\r
+/* a = b */\r
+GF_Err gf_svg_attributes_copy(GF_FieldInfo *a, GF_FieldInfo *b, Bool clamp);\r
+/* c = a + b */\r
+GF_Err gf_svg_attributes_add(GF_FieldInfo *a, GF_FieldInfo *b, GF_FieldInfo *c, Bool clamp);\r
+Bool gf_svg_attribute_is_interpolatable(u32 type) ;\r
+/* c = coef * a + (1 - coef) * b */\r
+GF_Err gf_svg_attributes_interpolate(GF_FieldInfo *a, GF_FieldInfo *b, GF_FieldInfo *c, Fixed coef, Bool clamp);\r
+/* c = alpha * a + beta * b */\r
+GF_Err gf_svg_attributes_muladd(Fixed alpha, GF_FieldInfo *a, Fixed beta, GF_FieldInfo *b, GF_FieldInfo *c, Bool clamp);\r
+\r
+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
+\r
+char *gf_svg_attribute_type_to_string(u32 att_type);\r
+GF_Err gf_svg_parse_attribute(GF_Node *n, GF_FieldInfo *info, char *attribute_content, u8 anim_value_type);\r
+void gf_svg_parse_style(GF_Node *n, char *style);\r
+\r
+GF_Err gf_svg_dump_attribute(GF_Node *elt, GF_FieldInfo *info, char *attValue);\r
+GF_Err gf_svg_dump_attribute_indexed(GF_Node *elt, GF_FieldInfo *info, char *attValue);\r
+\r
+void gf_svg_path_build(GF_Path *path, GF_List *commands, GF_List *points);\r
+\r
+GF_Err gf_svg_parse_element_id(GF_Node *n, const char *nodename, Bool warning_if_defined);\r
+\r
+const char *gf_svg_get_system_paint_server_name(u32 paint_type);\r
+u32 gf_svg_get_system_paint_server_type(const char *name);\r
+\r
+\r
+Bool gf_smil_notify_timed_elements(GF_SceneGraph *sg);\r
+void gf_smil_timing_insert_clock(GF_Node *elt, Bool is_end, Double clock);\r
+\r
+void gf_svg_parse_transformlist(GF_Matrix2D *mat, char *attribute_content);\r
+\r
+typedef struct _smil_timing_rti SMIL_Timing_RTI;\r
+\r
+enum\r
+{\r
+       SMIL_TIMING_EVAL_NONE = 0,\r
+       SMIL_TIMING_EVAL_UPDATE,\r
+       SMIL_TIMING_EVAL_FREEZE,\r
+       SMIL_TIMING_EVAL_REMOVE,\r
+       SMIL_TIMING_EVAL_REPEAT,\r
+       SMIL_TIMING_EVAL_FRACTION,\r
+       SMIL_TIMING_EVAL_DISCARD,\r
+       /*signaled the animation element has been inserted in the DOM tree*/\r
+       SMIL_TIMING_EVAL_ACTIVATE,\r
+       /*signaled the animation element has been removed from the DOM tree*/\r
+       SMIL_TIMING_EVAL_DEACTIVATE,\r
+};\r
+\r
+void gf_smil_set_evaluation_callback(GF_Node *smil_time, \r
+                                                                        void (*smil_evaluate)(struct _smil_timing_rti *rti, Fixed normalized_simple_time, u32 state));\r
+\r
+void gf_smil_set_media_duration(SMIL_Timing_RTI *rti, Double media_duration);\r
+Double gf_smil_get_media_duration(SMIL_Timing_RTI *rti);\r
+GF_Node *gf_smil_get_element(SMIL_Timing_RTI *rti);\r
+\r
+Bool gf_smil_timing_is_active(GF_Node *node);\r
+void gf_smil_timing_modified(GF_Node *node, GF_FieldInfo *field);\r
+\r
+/*******************************************************************************\r
+ * \r
+ *          SVG Scene Graph for dynamic allocation of attributes                  *\r
+ *\r
+ *******************************************************************************/\r
+\r
+/*SVG attributes are just DOM ones*/\r
+typedef struct __dom_base_attribute SVGAttribute;\r
+typedef struct __dom_full_attribute SVGExtendedAttribute;\r
+typedef struct __dom_base_node SVG_Element;\r
+\r
+typedef struct __xml_ev_handler SVG_handlerElement;\r
+\r
+\r
+typedef struct _all_atts SVGAllAttributes;\r
+\r
+void gf_svg_flatten_attributes(SVG_Element *e, SVGAllAttributes *all_atts);\r
+const char *gf_svg_get_attribute_name(GF_Node *elt, u32 tag);\r
+u32 gf_svg_apply_inheritance(SVGAllAttributes *all_atts, SVGPropertiesPointers *render_svg_props) ;\r
+\r
+GF_DOMAttribute *gf_xml_create_attribute(GF_Node *node, u32 tag);\r
+u32 gf_xml_get_attribute_type(u32 tag);\r
+u32 gf_xml_get_attribute_tag(GF_Node *node, char *attribute_name, u32 ns);\r
+\r
+u32 gf_xml_get_element_tag(const char *element_name, u32 xmlns);\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif //_GF_SG_SVG_H_\r