edje/svg: added _edje_svg_node_free() function

Reviewers: cedric, jpeg

Reviewed By: jpeg

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4143
This commit is contained in:
Subhransu Mohanty 2016-07-07 16:29:21 +09:00 committed by Jean-Philippe Andre
parent 80413dda8c
commit 9be9da17bf
3 changed files with 75 additions and 0 deletions

View File

@ -1271,6 +1271,7 @@ data_write_vectors(Eet_File *ef, int *vector_num)
*vector_num += 1;
eina_file_close(f);
found = EINA_TRUE;
_edje_svg_node_free(root);
break;
}
if (!found)

View File

@ -2566,6 +2566,7 @@ _edje_ref_vector_data(Edje *ed, int svg_id)
}
vector->vg = root;
ed->vector_cache = eina_list_append(ed->vector_cache, vector);
_edje_svg_node_free(node);
return vector;
}
@ -2659,3 +2660,75 @@ edje_3d_object_add(Evas_Object *obj, Eo **root_node, Eo *scene)
return EINA_TRUE;
}
static void
_svg_style_gradient_free(Svg_Style_Gradient *grad)
{
Efl_Gfx_Gradient_Stop *stop;
if (!grad) return;
eina_stringshare_del(grad->id);
eina_stringshare_del(grad->ref);
free(grad->radial);
free(grad->linear);
EINA_LIST_FREE(grad->stops, stop)
{
free(stop);
}
free(grad);
}
static void
_node_style_free(Svg_Style_Property *style)
{
if (!style) return;
_svg_style_gradient_free(style->fill.paint.gradient);
eina_stringshare_del(style->fill.paint.url);
_svg_style_gradient_free(style->stroke.paint.gradient);
eina_stringshare_del(style->stroke.paint.url);
free(style);
}
EAPI void
_edje_svg_node_free(Svg_Node *node)
{
Svg_Node *child;
Svg_Style_Gradient *grad;
if (!node) return;
EINA_LIST_FREE(node->child, child)
{
_edje_svg_node_free(child);
}
eina_stringshare_del(node->id);
free(node->transform);
_node_style_free(node->style);
switch (node->type)
{
case SVG_NODE_PATH:
eina_stringshare_del(node->node.path.path);
break;
case SVG_NODE_POLYGON:
case SVG_NODE_POLYLINE:
free(node->node.polygon.points);
break;
case SVG_NODE_DOC:
_edje_svg_node_free(node->node.doc.defs);
break;
case SVG_NODE_DEFS:
EINA_LIST_FREE(node->node.defs.gradients, grad)
{
_svg_style_gradient_free(grad);
}
break;
default:
break;
}
free(node);
}

View File

@ -3273,6 +3273,7 @@ void _edje_dupe_vector_data(Edje *ed, int svg_id, double width, double height,
Edje_Vector_Data * _edje_ref_vector_data(Edje *ed, int svg_id);
EAPI void _edje_svg_node_free(Svg_Node *node);
#ifdef HAVE_LIBREMIX
#include <remix/remix.h>