evas: actually we expect gradient to live as long as the part that is using them.

This commit is contained in:
Cedric Bail 2018-05-17 14:48:26 -07:00 committed by Cedric BAIL
parent 301340baf6
commit b671a2c34f
1 changed files with 11 additions and 11 deletions

View File

@ -547,7 +547,7 @@ vg_common_svg_node_free(Svg_Node *node)
} }
static Efl_VG * static Efl_VG *
_apply_gradient_property(Svg_Style_Gradient *g, Efl_VG *vg, Vg_File_Data *vg_data) _apply_gradient_property(Svg_Style_Gradient *g, Efl_VG *vg, Efl_VG *parent, Vg_File_Data *vg_data)
{ {
Efl_VG *grad_obj = NULL; Efl_VG *grad_obj = NULL;
Efl_Gfx_Gradient_Stop *stops, *stop; Efl_Gfx_Gradient_Stop *stops, *stop;
@ -570,7 +570,7 @@ _apply_gradient_property(Svg_Style_Gradient *g, Efl_VG *vg, Vg_File_Data *vg_dat
if (g->type == SVG_LINEAR_GRADIENT) if (g->type == SVG_LINEAR_GRADIENT)
{ {
grad_obj = evas_vg_gradient_linear_add(NULL); grad_obj = evas_vg_gradient_linear_add(parent);
evas_vg_gradient_linear_start_set(grad_obj, g->linear->x1 * r.w + r.x, g->linear->y1 * r.h + r.y); evas_vg_gradient_linear_start_set(grad_obj, g->linear->x1 * r.w + r.x, g->linear->y1 * r.h + r.y);
evas_vg_gradient_linear_end_set(grad_obj, g->linear->x2 * r.w + r.x, g->linear->y2 * r.h + r.y); evas_vg_gradient_linear_end_set(grad_obj, g->linear->x2 * r.w + r.x, g->linear->y2 * r.h + r.y);
} }
@ -587,7 +587,7 @@ _apply_gradient_property(Svg_Style_Gradient *g, Efl_VG *vg, Vg_File_Data *vg_dat
int min = (r.h > r.w) ? r.w : r.h; int min = (r.h > r.w) ? r.w : r.h;
radius = sqrt(pow(min, 2) + pow(min, 2)) / sqrt(2.0); radius = sqrt(pow(min, 2) + pow(min, 2)) / sqrt(2.0);
} }
grad_obj = evas_vg_gradient_radial_add(NULL); grad_obj = evas_vg_gradient_radial_add(parent);
evas_vg_gradient_radial_center_set(grad_obj, g->radial->cx * r.w + r.x, g->radial->cy * r.h + r.y); evas_vg_gradient_radial_center_set(grad_obj, g->radial->cx * r.w + r.x, g->radial->cy * r.h + r.y);
evas_vg_gradient_radial_radius_set(grad_obj, g->radial->r * radius); evas_vg_gradient_radial_radius_set(grad_obj, g->radial->r * radius);
evas_vg_gradient_radial_focal_set(grad_obj, g->radial->fx * r.w + r.x, g->radial->fy * r.h + r.y); evas_vg_gradient_radial_focal_set(grad_obj, g->radial->fx * r.w + r.x, g->radial->fy * r.h + r.y);
@ -663,7 +663,7 @@ _apply_gradient_property(Svg_Style_Gradient *g, Efl_VG *vg, Vg_File_Data *vg_dat
// vg tree creation // vg tree creation
static void static void
_apply_vg_property(Svg_Node *node, Efl_VG *vg, Vg_File_Data *vg_data) _apply_vg_property(Svg_Node *node, Efl_VG *vg, Efl_VG *parent, Vg_File_Data *vg_data)
{ {
Svg_Style_Property *style = node->style; Svg_Style_Property *style = node->style;
@ -687,7 +687,7 @@ _apply_vg_property(Svg_Node *node, Efl_VG *vg, Vg_File_Data *vg_data)
else if (style->fill.paint.gradient) else if (style->fill.paint.gradient)
{ {
// if the fill has gradient then apply. // if the fill has gradient then apply.
evas_vg_shape_fill_set(vg, _apply_gradient_property(style->fill.paint.gradient, vg, vg_data)); evas_vg_shape_fill_set(vg, _apply_gradient_property(style->fill.paint.gradient, vg, parent, vg_data));
} }
else if (style->fill.paint.cur_color) else if (style->fill.paint.cur_color)
{ {
@ -714,7 +714,7 @@ _apply_vg_property(Svg_Node *node, Efl_VG *vg, Vg_File_Data *vg_data)
else if (style->stroke.paint.gradient) else if (style->stroke.paint.gradient)
{ {
// if the fill has gradient then apply. // if the fill has gradient then apply.
evas_vg_shape_stroke_fill_set(vg, _apply_gradient_property(style->stroke.paint.gradient, vg, vg_data)); evas_vg_shape_stroke_fill_set(vg, _apply_gradient_property(style->stroke.paint.gradient, vg, parent, vg_data));
} }
else if (style->stroke.paint.url) else if (style->stroke.paint.url)
{ {
@ -766,7 +766,7 @@ vg_common_create_vg_node_helper(Svg_Node *node, Efl_VG *parent, Vg_File_Data *vg
vg = efl_add_ref(EFL_CANVAS_VG_CONTAINER_CLASS, NULL); vg = efl_add_ref(EFL_CANVAS_VG_CONTAINER_CLASS, NULL);
else else
vg = efl_add(EFL_CANVAS_VG_CONTAINER_CLASS, parent); vg = efl_add(EFL_CANVAS_VG_CONTAINER_CLASS, parent);
_apply_vg_property(node, vg, vg_data); _apply_vg_property(node, vg, parent, vg_data);
EINA_LIST_FOREACH(node->child, l, child) EINA_LIST_FOREACH(node->child, l, child)
{ {
vg_common_create_vg_node_helper(child, vg, vg_data); vg_common_create_vg_node_helper(child, vg, vg_data);
@ -815,7 +815,7 @@ vg_common_create_vg_node_helper(Svg_Node *node, Efl_VG *parent, Vg_File_Data *vg
break; break;
} }
if (vg) if (vg)
_apply_vg_property(node, vg, vg_data); _apply_vg_property(node, vg, parent, vg_data);
return vg; return vg;
} }
@ -884,13 +884,13 @@ _create_gradient_node(Efl_VG *vg)
{ {
const Efl_Gfx_Gradient_Stop *stops = NULL; const Efl_Gfx_Gradient_Stop *stops = NULL;
Efl_Gfx_Gradient_Stop *new_stop; Efl_Gfx_Gradient_Stop *new_stop;
unsigned int count, i; unsigned int count = 0, i;
Svg_Style_Gradient *grad = calloc(1, sizeof(Svg_Style_Gradient)); Svg_Style_Gradient *grad = calloc(1, sizeof(Svg_Style_Gradient));
grad->spread = evas_vg_gradient_spread_get(vg); grad->spread = evas_vg_gradient_spread_get(vg);
evas_vg_gradient_stop_get(vg, &stops, &count); evas_vg_gradient_stop_get(vg, &stops, &count);
for (i=0 ; i < count; i++) for (i = 0; i < count; i++)
{ {
new_stop = calloc(1, sizeof(Efl_Gfx_Gradient_Stop)); new_stop = calloc(1, sizeof(Efl_Gfx_Gradient_Stop));
memcpy(new_stop, stops, sizeof(Efl_Gfx_Gradient_Stop)); memcpy(new_stop, stops, sizeof(Efl_Gfx_Gradient_Stop));
@ -996,7 +996,7 @@ vg_common_create_svg_node_helper(Efl_VG *vg, Svg_Node *parent)
vg_common_create_svg_node_helper(child, svg_node); vg_common_create_svg_node_helper(child, svg_node);
} }
} }
else else if (efl_isa(vg, EFL_CANVAS_VG_SHAPE_CLASS))
{ {
svg_node = _create_node(parent, SVG_NODE_CUSTOME_COMMAND); svg_node = _create_node(parent, SVG_NODE_CUSTOME_COMMAND);
evas_vg_shape_path_get(vg, &commands, &points); evas_vg_shape_path_get(vg, &commands, &points);