forked from enlightenment/efl
Transit Effect: release data
Effects: Translation Resizable Flip Fade Blend The effects above retrives information about objects in the transit, they need to release these informations if the object dies. Author: Helen Fornazier <helen.fornazier@profusion.mobi> SVN revision: 54432
This commit is contained in:
parent
38e5245d20
commit
d2b274329b
|
@ -838,8 +838,26 @@ struct _Elm_Fx_Translation
|
||||||
Eina_List *nodes;
|
Eina_List *nodes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
_translation_object_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Elm_Fx_Translation *translation = data;
|
||||||
|
Eina_List *elist;
|
||||||
|
Elm_Fx_Translation_Node *translation_node;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(translation->nodes, elist, translation_node)
|
||||||
|
{
|
||||||
|
if (translation_node->obj != obj)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
translation->nodes = eina_list_remove_list(translation->nodes, elist);
|
||||||
|
free(translation_node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_List *
|
||||||
_translation_nodes_build(Elm_Transit *transit)
|
_translation_nodes_build(Elm_Transit *transit, Elm_Fx_Translation *translation)
|
||||||
{
|
{
|
||||||
Elm_Fx_Translation_Node *translation_node;
|
Elm_Fx_Translation_Node *translation_node;
|
||||||
const Eina_List *elist;
|
const Eina_List *elist;
|
||||||
|
@ -859,6 +877,8 @@ _translation_nodes_build(Elm_Transit *transit)
|
||||||
evas_object_geometry_get(obj, &(translation_node->x),
|
evas_object_geometry_get(obj, &(translation_node->x),
|
||||||
&(translation_node->y), NULL, NULL);
|
&(translation_node->y), NULL, NULL);
|
||||||
data_list = eina_list_append(data_list, translation_node);
|
data_list = eina_list_append(data_list, translation_node);
|
||||||
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
|
||||||
|
_translation_object_del_cb, translation);
|
||||||
}
|
}
|
||||||
|
|
||||||
return data_list;
|
return data_list;
|
||||||
|
@ -886,7 +906,17 @@ EAPI void
|
||||||
elm_transit_effect_translation_context_free(void *data, Elm_Transit *transit __UNUSED__)
|
elm_transit_effect_translation_context_free(void *data, Elm_Transit *transit __UNUSED__)
|
||||||
{
|
{
|
||||||
Elm_Fx_Translation *translation = data;
|
Elm_Fx_Translation *translation = data;
|
||||||
eina_list_free(translation->nodes);
|
Eina_List *elist, *elist_next;
|
||||||
|
Elm_Fx_Translation_Node *translation_node;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH_SAFE(translation->nodes,
|
||||||
|
elist, elist_next, translation_node)
|
||||||
|
{
|
||||||
|
evas_object_event_callback_del(translation_node->obj,
|
||||||
|
EVAS_CALLBACK_DEL, _translation_object_del_cb);
|
||||||
|
translation->nodes = eina_list_remove_list(translation->nodes, elist);
|
||||||
|
free(translation_node);
|
||||||
|
}
|
||||||
free(translation);
|
free(translation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -923,7 +953,7 @@ elm_transit_effect_translation_op(void *data, Elm_Transit *transit, double progr
|
||||||
Eina_List *elist;
|
Eina_List *elist;
|
||||||
|
|
||||||
if (!translation->nodes)
|
if (!translation->nodes)
|
||||||
translation->nodes = _translation_nodes_build(transit);
|
translation->nodes = _translation_nodes_build(transit, translation);
|
||||||
|
|
||||||
EINA_LIST_FOREACH(translation->nodes, elist, translation_node)
|
EINA_LIST_FOREACH(translation->nodes, elist, translation_node)
|
||||||
{
|
{
|
||||||
|
@ -1288,8 +1318,32 @@ struct _Elm_Fx_Resizable_Flip
|
||||||
Elm_Fx_Flip_Axis axis;
|
Elm_Fx_Flip_Axis axis;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
_resizable_flip_object_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Elm_Fx_ResizableFlip *resizable_flip = data;
|
||||||
|
Eina_List *elist;
|
||||||
|
Elm_Fx_ResizableFlip_Node *resizable_flip_node;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(resizable_flip->nodes, elist, resizable_flip_node)
|
||||||
|
{
|
||||||
|
if (resizable_flip_node->front == obj)
|
||||||
|
evas_object_event_callback_del(resizable_flip_node->back,
|
||||||
|
EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb);
|
||||||
|
else if (resizable_flip_node->back == obj)
|
||||||
|
evas_object_event_callback_del(resizable_flip_node->front,
|
||||||
|
EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb);
|
||||||
|
else continue;
|
||||||
|
|
||||||
|
resizable_flip->nodes = eina_list_remove_list(resizable_flip->nodes,
|
||||||
|
elist);
|
||||||
|
free(resizable_flip_node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_List *
|
||||||
_resizable_flip_nodes_build(Elm_Transit *transit)
|
_resizable_flip_nodes_build(Elm_Transit *transit, Elm_Fx_ResizableFlip *resizable_flip)
|
||||||
{
|
{
|
||||||
Elm_Fx_ResizableFlip_Node *resizable_flip_node;
|
Elm_Fx_ResizableFlip_Node *resizable_flip_node;
|
||||||
Eina_List *data_list = NULL;
|
Eina_List *data_list = NULL;
|
||||||
|
@ -1328,6 +1382,11 @@ _resizable_flip_nodes_build(Elm_Transit *transit)
|
||||||
resizable_flip_node->to_size.y = back_h - front_h;
|
resizable_flip_node->to_size.y = back_h - front_h;
|
||||||
|
|
||||||
data_list = eina_list_append(data_list, resizable_flip_node);
|
data_list = eina_list_append(data_list, resizable_flip_node);
|
||||||
|
|
||||||
|
evas_object_event_callback_add(resizable_flip_node->back,
|
||||||
|
EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb, resizable_flip);
|
||||||
|
evas_object_event_callback_add(resizable_flip_node->front,
|
||||||
|
EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb, resizable_flip);
|
||||||
}
|
}
|
||||||
|
|
||||||
return data_list;
|
return data_list;
|
||||||
|
@ -1414,8 +1473,14 @@ elm_transit_effect_resizable_flip_context_free(void *data, Elm_Transit *transit
|
||||||
{
|
{
|
||||||
evas_object_map_enable_set(resizable_flip_node->front, EINA_FALSE);
|
evas_object_map_enable_set(resizable_flip_node->front, EINA_FALSE);
|
||||||
evas_object_map_enable_set(resizable_flip_node->back, EINA_FALSE);
|
evas_object_map_enable_set(resizable_flip_node->back, EINA_FALSE);
|
||||||
|
|
||||||
resizable_flip->nodes = eina_list_remove_list(resizable_flip->nodes,
|
resizable_flip->nodes = eina_list_remove_list(resizable_flip->nodes,
|
||||||
elist);
|
elist);
|
||||||
|
|
||||||
|
evas_object_event_callback_del(resizable_flip_node->back,
|
||||||
|
EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb);
|
||||||
|
evas_object_event_callback_del(resizable_flip_node->front,
|
||||||
|
EVAS_CALLBACK_DEL, _resizable_flip_object_del_cb);
|
||||||
free(resizable_flip_node);
|
free(resizable_flip_node);
|
||||||
}
|
}
|
||||||
free(resizable_flip);
|
free(resizable_flip);
|
||||||
|
@ -1469,7 +1534,8 @@ elm_transit_effect_resizable_flip_op(void *data, Elm_Transit *transit __UNUSED__
|
||||||
degree = (float)(progress * -180);
|
degree = (float)(progress * -180);
|
||||||
|
|
||||||
if (!resizable_flip->nodes)
|
if (!resizable_flip->nodes)
|
||||||
resizable_flip->nodes = _resizable_flip_nodes_build(transit);
|
resizable_flip->nodes = _resizable_flip_nodes_build(transit,
|
||||||
|
resizable_flip);
|
||||||
|
|
||||||
EINA_LIST_FOREACH(resizable_flip->nodes, elist, resizable_flip_node)
|
EINA_LIST_FOREACH(resizable_flip->nodes, elist, resizable_flip_node)
|
||||||
{
|
{
|
||||||
|
@ -1960,8 +2026,31 @@ struct _Elm_Fx_Fade
|
||||||
Eina_List *nodes;
|
Eina_List *nodes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
_fade_object_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Elm_Fx_Fade *fade = data;
|
||||||
|
Eina_List *elist;
|
||||||
|
Elm_Fx_Fade_Node *fade_node;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(fade->nodes, elist, fade_node)
|
||||||
|
{
|
||||||
|
if (fade_node->before == obj)
|
||||||
|
evas_object_event_callback_del(fade_node->after,
|
||||||
|
EVAS_CALLBACK_DEL, _fade_object_del_cb);
|
||||||
|
else if (fade_node->after == obj)
|
||||||
|
evas_object_event_callback_del(fade_node->before,
|
||||||
|
EVAS_CALLBACK_DEL, _fade_object_del_cb);
|
||||||
|
else continue;
|
||||||
|
|
||||||
|
fade->nodes = eina_list_remove_list(fade->nodes, elist);
|
||||||
|
free(fade_node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_List *
|
||||||
_fade_nodes_build(Elm_Transit *transit)
|
_fade_nodes_build(Elm_Transit *transit, Elm_Fx_Fade *fade_data)
|
||||||
{
|
{
|
||||||
Elm_Fx_Fade_Node *fade;
|
Elm_Fx_Fade_Node *fade;
|
||||||
Eina_List *data_list = NULL;
|
Eina_List *data_list = NULL;
|
||||||
|
@ -1992,6 +2081,11 @@ _fade_nodes_build(Elm_Transit *transit)
|
||||||
fade->after_alpha = (255 - fade->after_color.a);
|
fade->after_alpha = (255 - fade->after_color.a);
|
||||||
|
|
||||||
data_list = eina_list_append(data_list, fade);
|
data_list = eina_list_append(data_list, fade);
|
||||||
|
|
||||||
|
evas_object_event_callback_add(fade->before,
|
||||||
|
EVAS_CALLBACK_DEL, _fade_object_del_cb, fade_data);
|
||||||
|
evas_object_event_callback_add(fade->after,
|
||||||
|
EVAS_CALLBACK_DEL, _fade_object_del_cb, fade_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
return data_list;
|
return data_list;
|
||||||
|
@ -2021,9 +2115,9 @@ elm_transit_effect_fade_context_free(void *data, Elm_Transit *transit __UNUSED__
|
||||||
{
|
{
|
||||||
Elm_Fx_Fade *fade = data;
|
Elm_Fx_Fade *fade = data;
|
||||||
Elm_Fx_Fade_Node *fade_node;
|
Elm_Fx_Fade_Node *fade_node;
|
||||||
Eina_List *elist;
|
Eina_List *elist, *elist_next;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(fade->nodes, elist, fade_node)
|
EINA_LIST_FOREACH_SAFE(fade->nodes, elist, elist_next, fade_node)
|
||||||
{
|
{
|
||||||
evas_object_color_set(fade_node->before, fade_node->before_color.r,
|
evas_object_color_set(fade_node->before, fade_node->before_color.r,
|
||||||
fade_node->before_color.g,
|
fade_node->before_color.g,
|
||||||
|
@ -2033,9 +2127,15 @@ elm_transit_effect_fade_context_free(void *data, Elm_Transit *transit __UNUSED__
|
||||||
fade_node->after_color.g,
|
fade_node->after_color.g,
|
||||||
fade_node->after_color.b,
|
fade_node->after_color.b,
|
||||||
fade_node->after_color.a);
|
fade_node->after_color.a);
|
||||||
|
|
||||||
|
fade->nodes = eina_list_remove_list(fade->nodes, elist);
|
||||||
|
evas_object_event_callback_del(fade_node->before,
|
||||||
|
EVAS_CALLBACK_DEL, _fade_object_del_cb);
|
||||||
|
evas_object_event_callback_del(fade_node->after,
|
||||||
|
EVAS_CALLBACK_DEL, _fade_object_del_cb);
|
||||||
|
free(fade_node);
|
||||||
}
|
}
|
||||||
|
|
||||||
eina_list_free(fade->nodes);
|
|
||||||
free(fade);
|
free(fade);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2075,7 +2175,7 @@ elm_transit_effect_fade_op(void *data, Elm_Transit *transit __UNUSED__, double p
|
||||||
float _progress;
|
float _progress;
|
||||||
|
|
||||||
if (!fade->nodes)
|
if (!fade->nodes)
|
||||||
fade->nodes = _fade_nodes_build(transit);
|
fade->nodes = _fade_nodes_build(transit, fade);
|
||||||
|
|
||||||
EINA_LIST_FOREACH(fade->nodes, elist, fade_node)
|
EINA_LIST_FOREACH(fade->nodes, elist, fade_node)
|
||||||
{
|
{
|
||||||
|
@ -2160,8 +2260,31 @@ struct _Elm_Fx_Blend
|
||||||
Eina_List *nodes;
|
Eina_List *nodes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
_blend_object_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Elm_Fx_Blend *blend = data;
|
||||||
|
Eina_List *elist;
|
||||||
|
Elm_Fx_Blend_Node *blend_node;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(blend->nodes, elist, blend_node)
|
||||||
|
{
|
||||||
|
if (blend_node->after == obj)
|
||||||
|
evas_object_event_callback_del(blend_node->before,
|
||||||
|
EVAS_CALLBACK_DEL, _blend_object_del_cb);
|
||||||
|
else if (blend_node->before == obj)
|
||||||
|
evas_object_event_callback_del(blend_node->after,
|
||||||
|
EVAS_CALLBACK_DEL, _blend_object_del_cb);
|
||||||
|
else continue;
|
||||||
|
|
||||||
|
blend->nodes = eina_list_remove_list(blend->nodes, elist);
|
||||||
|
free(blend_node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_List *
|
||||||
_blend_nodes_build(Elm_Transit *transit)
|
_blend_nodes_build(Elm_Transit *transit, Elm_Fx_Blend *blend)
|
||||||
{
|
{
|
||||||
Elm_Fx_Blend_Node *blend_node;
|
Elm_Fx_Blend_Node *blend_node;
|
||||||
Eina_List *data_list = NULL;
|
Eina_List *data_list = NULL;
|
||||||
|
@ -2191,6 +2314,11 @@ _blend_nodes_build(Elm_Transit *transit)
|
||||||
&blend_node->to.a);
|
&blend_node->to.a);
|
||||||
|
|
||||||
data_list = eina_list_append(data_list, blend_node);
|
data_list = eina_list_append(data_list, blend_node);
|
||||||
|
|
||||||
|
evas_object_event_callback_add(blend_node->before,
|
||||||
|
EVAS_CALLBACK_DEL, _blend_object_del_cb, blend);
|
||||||
|
evas_object_event_callback_add(blend_node->after,
|
||||||
|
EVAS_CALLBACK_DEL, _blend_object_del_cb, blend);
|
||||||
}
|
}
|
||||||
return data_list;
|
return data_list;
|
||||||
}
|
}
|
||||||
|
@ -2236,6 +2364,11 @@ elm_transit_effect_blend_context_free(void *data, Elm_Transit *transit __UNUSED_
|
||||||
evas_object_hide(blend_node->before);
|
evas_object_hide(blend_node->before);
|
||||||
|
|
||||||
blend->nodes = eina_list_remove_list(blend->nodes, elist);
|
blend->nodes = eina_list_remove_list(blend->nodes, elist);
|
||||||
|
|
||||||
|
evas_object_event_callback_del(blend_node->before,
|
||||||
|
EVAS_CALLBACK_DEL, _blend_object_del_cb);
|
||||||
|
evas_object_event_callback_del(blend_node->after,
|
||||||
|
EVAS_CALLBACK_DEL, _blend_object_del_cb);
|
||||||
free(blend_node);
|
free(blend_node);
|
||||||
}
|
}
|
||||||
free(data);
|
free(data);
|
||||||
|
@ -2274,7 +2407,7 @@ elm_transit_effect_blend_op(void *data, Elm_Transit *transit, double progress)
|
||||||
Eina_List *elist;
|
Eina_List *elist;
|
||||||
|
|
||||||
if (!blend->nodes)
|
if (!blend->nodes)
|
||||||
blend->nodes = _blend_nodes_build(transit);
|
blend->nodes = _blend_nodes_build(transit, blend);
|
||||||
|
|
||||||
EINA_LIST_FOREACH(blend->nodes, elist, blend_node)
|
EINA_LIST_FOREACH(blend->nodes, elist, blend_node)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue