GF_EXPORT void gf_svg_properties_reset_pointers(SVGPropertiesPointers *svg_props) { if (!svg_props) return; if(svg_props->audio_level) gf_free(svg_props->audio_level); gf_svg_delete_paint(NULL, svg_props->color); if(svg_props->color_rendering) gf_free(svg_props->color_rendering); if(svg_props->display) gf_free(svg_props->display); if(svg_props->display_align) gf_free(svg_props->display_align); gf_svg_delete_paint(NULL, svg_props->fill); if(svg_props->fill_opacity) gf_free(svg_props->fill_opacity); if(svg_props->fill_rule) gf_free(svg_props->fill_rule); if(svg_props->font_family) { if (svg_props->font_family->value) gf_free(svg_props->font_family->value); gf_free(svg_props->font_family); } if(svg_props->font_size) gf_free(svg_props->font_size); if(svg_props->font_style) gf_free(svg_props->font_style); if(svg_props->font_variant) gf_free(svg_props->font_variant); if(svg_props->font_weight) gf_free(svg_props->font_weight); if(svg_props->image_rendering) gf_free(svg_props->image_rendering); if(svg_props->line_increment) gf_free(svg_props->line_increment); if(svg_props->opacity) gf_free(svg_props->opacity); if(svg_props->pointer_events) gf_free(svg_props->pointer_events); if(svg_props->shape_rendering) gf_free(svg_props->shape_rendering); gf_svg_delete_paint(NULL, svg_props->solid_color); if(svg_props->solid_opacity) gf_free(svg_props->solid_opacity); gf_svg_delete_paint(NULL, svg_props->stop_color); if(svg_props->stop_opacity) gf_free(svg_props->stop_opacity); gf_svg_delete_paint(NULL, svg_props->stroke); if(svg_props->stroke_dasharray) { if (svg_props->stroke_dasharray->array.count) gf_free(svg_props->stroke_dasharray->array.vals); gf_free(svg_props->stroke_dasharray); } if(svg_props->stroke_dashoffset) gf_free(svg_props->stroke_dashoffset); if(svg_props->stroke_linecap) gf_free(svg_props->stroke_linecap); if(svg_props->stroke_linejoin) gf_free(svg_props->stroke_linejoin); if(svg_props->stroke_miterlimit) gf_free(svg_props->stroke_miterlimit); if(svg_props->stroke_opacity) gf_free(svg_props->stroke_opacity); if(svg_props->stroke_width) gf_free(svg_props->stroke_width); if(svg_props->text_align) gf_free(svg_props->text_align); if(svg_props->text_anchor) gf_free(svg_props->text_anchor); if(svg_props->text_rendering) gf_free(svg_props->text_rendering); if(svg_props->vector_effect) gf_free(svg_props->vector_effect); gf_svg_delete_paint(NULL, svg_props->viewport_fill); if(svg_props->viewport_fill_opacity) gf_free(svg_props->viewport_fill_opacity); if(svg_props->visibility) gf_free(svg_props->visibility); memset(svg_props, 0, sizeof(SVGPropertiesPointers)); }
void gf_svg_delete_attribute_value(u32 type, void *value, GF_SceneGraph *sg) { GF_List *l; switch (type) { case SVG_Paint_datatype: gf_svg_delete_paint(sg, (SVG_Paint *)value); break; case XMLRI_datatype: case XML_IDREF_datatype: gf_svg_reset_iri(sg, (XMLRI *)value); gf_free(value); break; case SVG_Focus_datatype: gf_svg_reset_iri(sg, & ((SVG_Focus*)value)->target); gf_free(value); break; case SVG_PathData_datatype: #if USE_GF_PATH gf_path_del((GF_Path *)value); #else gf_free(value); #endif break; case SVG_ID_datatype: case DOM_String_datatype: case SVG_ContentType_datatype: case SVG_LanguageID_datatype: if (*(SVG_String *)value) gf_free(*(SVG_String *)value); gf_free(value); break; case SVG_StrokeDashArray_datatype: if (((SVG_StrokeDashArray*)value)->array.vals) gf_free(((SVG_StrokeDashArray*)value)->array.vals); gf_free(value); break; case SVG_Numbers_datatype: case SVG_Coordinates_datatype: case SVG_Points_datatype: l = *(GF_List**)value; while (gf_list_count(l)) { void *n = gf_list_last(l); gf_list_rem_last(l); gf_free(n); } gf_list_del(l); gf_free(value); break; case SVG_FontFamily_datatype: { SVG_FontFamily *ff = (SVG_FontFamily *)value; if (ff->value) gf_free(ff->value); gf_free(value); } break; case SMIL_AttributeName_datatype: { SMIL_AttributeName *an = (SMIL_AttributeName *)value; if (an->name) gf_free(an->name); gf_free(value); } break; case SMIL_Times_datatype: gf_smil_delete_times(*(SMIL_Times *)value); gf_free(value); break; case SMIL_AnimateValue_datatype: svg_delete_one_anim_value(((SMIL_AnimateValue *)value)->type, ((SMIL_AnimateValue *)value)->value, sg); gf_free(value); break; case SMIL_AnimateValues_datatype: gf_svg_reset_animate_values(*((SMIL_AnimateValues *)value), sg); gf_free(value); break; case DOM_StringList_datatype: l = *(GF_List**)value; while (gf_list_count(l)) { char *n = gf_list_last(l); gf_list_rem_last(l); gf_free(n); } gf_list_del(l); gf_free(value); break; case XMLRI_List_datatype: l = *(GF_List**)value; while (gf_list_count(l)) { XMLRI *r = gf_list_last(l); gf_list_rem_last(l); if (r->string) gf_free(r->string); gf_free(r); } gf_list_del(l); gf_free(value); break; case SMIL_KeyTimes_datatype: case SMIL_KeySplines_datatype: l = *(GF_List**)value; while (gf_list_count(l)) { Fixed *f = gf_list_last(l); gf_list_rem_last(l); gf_free(f); } gf_list_del(l); gf_free(value); break; case SMIL_RepeatCount_datatype: case SMIL_Duration_datatype: case SVG_Length_datatype: case SVG_Coordinate_datatype: case SVG_Visibility_datatype: case SVG_Display_datatype: default: gf_free(value); } }