From 9a82a3ec871a7d437706d93ad75ace73fbb903a9 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Sat, 23 Feb 2019 13:21:40 +0100 Subject: [PATCH] efl_canvas_object: get rid of event_animation set/get the API is a little bit problematic. The API takes events as an parameter. However, only the hide and show events can be used, because move for example is not intercepted, which leads to a situation that you cannot attach a translation animation to the event. Further more, handling the animations directory instead of pipeing them through events seems to be a little bit easier as the case study of the previous events have shown. Further more, we should never ever overwrite the callback_call function of a eo base object, those methods are an incredible hotpath, by the time we would have 1-2 animations on a object, the event submission would be significetly slowned down. ref T7555 Reviewed-by: Mike Blumenkrantz Differential Revision: https://phab.enlightenment.org/D8009 --- src/Makefile_Elementary.am | 1 - src/bin/elementary/Makefile.am | 1 - src/bin/elementary/meson.build | 1 - src/bin/elementary/test.c | 2 - src/bin/elementary/test_efl_anim_event_anim.c | 91 -------- src/lib/evas/canvas/efl_canvas_object.eo | 17 -- src/lib/evas/canvas/evas_object_main.c | 323 -------------------------- src/lib/evas/include/evas_private.h | 2 - 8 files changed, 438 deletions(-) delete mode 100644 src/bin/elementary/test_efl_anim_event_anim.c diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am index e224011..5ffd0f5 100644 --- a/src/Makefile_Elementary.am +++ b/src/Makefile_Elementary.am @@ -1020,7 +1020,6 @@ bin/elementary/test_efl_anim_scale.c \ bin/elementary/test_efl_anim_translate.c \ bin/elementary/test_efl_anim_group_parallel.c \ bin/elementary/test_efl_anim_group_sequential.c \ -bin/elementary/test_efl_anim_event_anim.c \ bin/elementary/test_efl_anim_pause.c \ bin/elementary/test_efl_anim_repeat.c \ bin/elementary/test_efl_anim_start_delay.c \ diff --git a/src/bin/elementary/Makefile.am b/src/bin/elementary/Makefile.am index b63861d..8100fb4 100644 --- a/src/bin/elementary/Makefile.am +++ b/src/bin/elementary/Makefile.am @@ -38,7 +38,6 @@ test_efl_anim_scale.c \ test_efl_anim_translate.c \ test_efl_anim_group_parallel.c \ test_efl_anim_group_sequential.c \ -test_efl_anim_event_anim.c \ test_efl_anim_pause.c \ test_efl_anim_repeat.c \ test_efl_anim_start_delay.c \ diff --git a/src/bin/elementary/meson.build b/src/bin/elementary/meson.build index a3a570a..1612e0b 100644 --- a/src/bin/elementary/meson.build +++ b/src/bin/elementary/meson.build @@ -35,7 +35,6 @@ elementary_test_src = [ 'test_efl_anim_translate.c', 'test_efl_anim_group_parallel.c', 'test_efl_anim_group_sequential.c', - 'test_efl_anim_event_anim.c', 'test_efl_anim_pause.c', 'test_efl_anim_repeat.c', 'test_efl_anim_start_delay.c', diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c index fa2bb74..65d6632 100644 --- a/src/bin/elementary/test.c +++ b/src/bin/elementary/test.c @@ -365,7 +365,6 @@ void test_efl_anim_translate(void *data, Evas_Object *obj, void *event_info); void test_efl_anim_translate_absolute(void *data, Evas_Object *obj, void *event_info); void test_efl_anim_group_parallel(void *data, Evas_Object *obj, void *event_info); void test_efl_anim_group_sequential(void *data, Evas_Object *obj, void *event_info); -void test_efl_anim_event_anim(void *data, Evas_Object *obj, void *event_info); void test_efl_anim_pause(void *data, Evas_Object *obj, void *event_info); void test_efl_anim_repeat(void *data, Evas_Object *obj, void *event_info); void test_efl_anim_start_delay(void *data, Evas_Object *obj, void *event_info); @@ -923,7 +922,6 @@ add_tests: ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Translate Absolute", test_efl_anim_translate_absolute); ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Group Parallel", test_efl_anim_group_parallel); ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Group Sequential", test_efl_anim_group_sequential); - ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Event Animation", test_efl_anim_event_anim); ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Pause", test_efl_anim_pause); ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Repeat", test_efl_anim_repeat); ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Start Delay", test_efl_anim_start_delay); diff --git a/src/bin/elementary/test_efl_anim_event_anim.c b/src/bin/elementary/test_efl_anim_event_anim.c deleted file mode 100644 index b4c3518..0000000 --- a/src/bin/elementary/test_efl_anim_event_anim.c +++ /dev/null @@ -1,91 +0,0 @@ -#ifdef HAVE_CONFIG_H -# include "elementary_config.h" -#endif -#include - -typedef struct _App_Data -{ - Efl_Canvas_Animation_Player *target; - - Eina_Bool is_btn_visible; -} App_Data; - -static void -_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - App_Data *ad = data; - - ad->is_btn_visible = !(ad->is_btn_visible); - - if (ad->is_btn_visible) - { - //Start animtion by showing button - evas_object_show(ad->target); - elm_object_text_set(obj, "Hide Button"); - } - else - { - //Start animtion by hiding button - evas_object_hide(ad->target); - elm_object_text_set(obj, "Show Button"); - } -} - -static void -_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - App_Data *ad = data; - free(ad); -} - -void -test_efl_anim_event_anim(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - App_Data *ad = calloc(1, sizeof(App_Data)); - if (!ad) return; - - Evas_Object *win = elm_win_add(NULL, "Efl Animation Event Animation", ELM_WIN_BASIC); - elm_win_title_set(win, "Efl Animation Event Animation"); - elm_win_autodel_set(win, EINA_TRUE); - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ad); - - //Button to be animated - Evas_Object *btn = elm_button_add(win); - elm_object_text_set(btn, "Button"); - evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_resize(btn, 200, 200); - evas_object_move(btn, 100, 50); - - //Show Animation - Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win); - efl_animation_alpha_set(show_anim, 0.0, 1.0); - efl_animation_duration_set(show_anim, 1.0); - efl_animation_final_state_keep_set(show_anim, EINA_TRUE); - efl_canvas_object_event_animation_set(btn, EFL_GFX_ENTITY_EVENT_SHOW, show_anim); - - //Show button after setting event animation to show animation for show event - evas_object_show(btn); - - //Hide Animation - Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win); - efl_animation_alpha_set(hide_anim, 1.0, 0.0); - efl_animation_duration_set(hide_anim, 1.0); - efl_animation_final_state_keep_set(hide_anim, EINA_TRUE); - efl_canvas_object_event_animation_set(btn, EFL_GFX_ENTITY_EVENT_HIDE, hide_anim); - - //Initialize App Data - ad->target = btn; - ad->is_btn_visible = EINA_TRUE; - - //Button to start animation - Evas_Object *btn2 = elm_button_add(win); - elm_object_text_set(btn2, "Hide Button"); - evas_object_smart_callback_add(btn2, "clicked", _btn_clicked_cb, ad); - evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_resize(btn2, 200, 50); - evas_object_move(btn2, 100, 300); - evas_object_show(btn2); - - evas_object_resize(win, 400, 400); - evas_object_show(win); -} diff --git a/src/lib/evas/canvas/efl_canvas_object.eo b/src/lib/evas/canvas/efl_canvas_object.eo index 75f304a..d29bafa 100644 --- a/src/lib/evas/canvas/efl_canvas_object.eo +++ b/src/lib/evas/canvas/efl_canvas_object.eo @@ -570,20 +570,6 @@ abstract @beta Efl.Canvas.Object extends Efl.Loop_Consumer implements Efl.Gfx.En return: bool; [[$true if the coords are inside the object, $false otherwise]] } } - @property event_animation { - [[Set the $animation which starts when the given $desc happens to the object.]] - get { legacy: null; } - set { legacy: null; } - keys { - @cref desc: Efl.Event_Description; - [[The event description for which the given $animation is set.]] - } - values { - animation: Efl.Canvas.Animation; - [[The animation which starts when the given $desc - happens to the object.]] - } - } } implements { Efl.Object.constructor; @@ -619,9 +605,6 @@ abstract @beta Efl.Canvas.Object extends Efl.Loop_Consumer implements Efl.Gfx.En Efl.Canvas.Pointer.pointer_inside { get; } } events { - anim_started: Efl.Canvas.Object_Animation_Event; [[Animation is started.]] - anim_running: Efl.Canvas.Object_Animation_Event; [[Animation is running.]] - anim_ended: Efl.Canvas.Object_Animation_Event; [[Animation is ended.]] animator,tick: Efl.Event_Animator_Tick; [[Animator tick synchronized with screen vsync if possible.]] } } diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index 38e81d5..e05e483 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -164,115 +164,6 @@ _evas_object_pointer_data_get(Evas_Pointer_Data *evas_pdata, return pdata; } -static void _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj); - -static void -_anim_started_cb(void *data, const Efl_Event *ev) -{ - const Efl_Event_Description *desc = data; - - Efl_Canvas_Object_Animation_Event event; - event.event_desc = desc; - - Eo *eo_obj = efl_animation_player_target_get(ev->object); - - efl_event_callback_call(eo_obj, EFL_CANVAS_OBJECT_EVENT_ANIM_STARTED, - &event); -} - -static void -_anim_running_cb(void *data, const Efl_Event *ev) -{ - const Efl_Event_Description *desc = data; - - Efl_Canvas_Object_Animation_Event event; - event.event_desc = desc; - - Eo *eo_obj = efl_animation_player_target_get(ev->object); - - efl_event_callback_call(eo_obj, EFL_CANVAS_OBJECT_EVENT_ANIM_RUNNING, - &event); -} - -static void -_anim_ended_cb(void *data, const Efl_Event *ev) -{ - const Efl_Event_Description *desc = data; - - efl_event_callback_del(ev->object, EFL_ANIMATION_PLAYER_EVENT_STARTED, - _anim_started_cb, desc); - efl_event_callback_del(ev->object, EFL_ANIMATION_PLAYER_EVENT_RUNNING, - _anim_running_cb, desc); - efl_event_callback_del(ev->object, EFL_ANIMATION_PLAYER_EVENT_ENDED, - _anim_ended_cb, desc); - - Efl_Canvas_Object_Animation_Event event; - event.event_desc = desc; - - Eo *eo_obj = efl_animation_player_target_get(ev->object); - - efl_event_callback_call(eo_obj, EFL_CANVAS_OBJECT_EVENT_ANIM_ENDED, - &event); - - if (desc == EFL_GFX_ENTITY_EVENT_HIDE) - { - Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj); - if (!obj) return; - - _hide(eo_obj, obj); - } -} - -static void -_animation_intercept_hide(void *data, Evas_Object *eo_obj) -{ - Event_Animation *event_anim = data; - Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj); - if (!obj) return; - - if (event_anim->anim && obj->anim_player && - (event_anim->anim != efl_animation_player_animation_get(obj->anim_player))) - { - efl_animation_player_animation_set(obj->anim_player, event_anim->anim); - - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_STARTED, - _anim_started_cb, EFL_GFX_ENTITY_EVENT_HIDE); - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_RUNNING, - _anim_running_cb, EFL_GFX_ENTITY_EVENT_HIDE); - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_ENDED, - _anim_ended_cb, EFL_GFX_ENTITY_EVENT_HIDE); - - //Start animation - efl_player_start(obj->anim_player); - } -} - -static void -_event_anim_free(Event_Animation *event_anim, Evas_Object_Protected_Data *obj) -{ - if (event_anim->anim) - { - //Unset callbacks for Hide event - if (event_anim->desc == EFL_GFX_ENTITY_EVENT_HIDE) - evas_object_intercept_hide_callback_del(obj->object, - _animation_intercept_hide); - - if (efl_player_play_get(obj->anim_player)) - { - Efl_Animation *running_anim = - efl_animation_player_animation_get(obj->anim_player); - - if (running_anim == event_anim->anim) - efl_player_stop(obj->anim_player); - } - } - - free(event_anim); -} - EOLIAN static Eo * _efl_canvas_object_efl_object_constructor(Eo *eo_obj, Evas_Object_Protected_Data *obj) { @@ -301,7 +192,6 @@ _efl_canvas_object_efl_object_constructor(Eo *eo_obj, Evas_Object_Protected_Data obj->data_3d = eina_cow_alloc(evas_object_3d_cow); obj->mask = eina_cow_alloc(evas_object_mask_cow); obj->events = eina_cow_alloc(evas_object_events_cow); - obj->event_anims = NULL; evas_object_inject(eo_obj, obj, evas); evas_object_callback_init(eo_obj, obj); @@ -1122,124 +1012,6 @@ _efl_canvas_object_efl_input_interface_seat_event_filter_set(Eo *eo_obj, } } -static Eina_Bool -_is_event_blocked(Eo *eo_obj, const Efl_Event_Description *desc, - void *event_info) -{ - if ((desc == EFL_EVENT_FOCUS_IN) || - (desc == EFL_EVENT_FOCUS_OUT) || - (desc == EFL_EVENT_KEY_DOWN) || - (desc == EFL_EVENT_KEY_UP) || - (desc == EFL_EVENT_HOLD) || - (desc == EFL_EVENT_POINTER_IN) || - (desc == EFL_EVENT_POINTER_OUT) || - (desc == EFL_EVENT_POINTER_DOWN) || - (desc == EFL_EVENT_POINTER_UP) || - (desc == EFL_EVENT_POINTER_MOVE) || - (desc == EFL_EVENT_POINTER_WHEEL) || - (desc == EFL_EVENT_POINTER_CANCEL) || - (desc == EFL_EVENT_POINTER_AXIS) || - (desc == EFL_EVENT_FINGER_MOVE) || - (desc == EFL_EVENT_FINGER_DOWN) || - (desc == EFL_EVENT_FINGER_UP)) - { - Efl_Input_Device *seat = efl_input_device_seat_get(efl_input_device_get(event_info)); - return !efl_input_seat_event_filter_get(eo_obj, seat); - } - return EINA_FALSE; -} - -static Event_Animation * -_event_animation_find(Evas_Object_Protected_Data *obj, - const Efl_Event_Description *desc) -{ - Event_Animation *event_anim; - EINA_INLIST_FOREACH(obj->event_anims, event_anim) - { - if (event_anim->desc == desc) - return event_anim; - } - return NULL; -} - -EOLIAN static Eina_Bool -_efl_canvas_object_efl_object_event_callback_call(Eo *eo_obj, - Evas_Object_Protected_Data *obj, - const Efl_Event_Description *desc, - void *event_info) -{ - if (_is_event_blocked(eo_obj, desc, event_info)) return EINA_FALSE; - - //Start animation corresponding to the current event - if (desc) - { - if ((desc != EFL_GFX_ENTITY_EVENT_HIDE) && desc != (EFL_GFX_ENTITY_EVENT_SHOW)) - { - Event_Animation *event_anim = _event_animation_find(obj, desc); - if (event_anim) - { - //Create animation object to start animation - efl_animation_player_animation_set(obj->anim_player, event_anim->anim); - - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_STARTED, - _anim_started_cb, desc); - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_RUNNING, - _anim_running_cb, desc); - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_ENDED, - _anim_ended_cb, desc); - - //Start animation - efl_player_start(obj->anim_player); - } - } - } - - return efl_event_callback_call(efl_super(eo_obj, MY_CLASS), - desc, event_info); -} - -EOLIAN static Eina_Bool -_efl_canvas_object_efl_object_event_callback_legacy_call(Eo *eo_obj, - Evas_Object_Protected_Data *obj, - const Efl_Event_Description *desc, - void *event_info) -{ - if (_is_event_blocked(eo_obj, desc, event_info)) return EINA_FALSE; - - //Start animation corresponding to the current event - if (desc) - { - if ((desc != EFL_GFX_ENTITY_EVENT_HIDE) && desc != (EFL_GFX_ENTITY_EVENT_SHOW)) - { - Event_Animation *event_anim = _event_animation_find(obj, desc); - if (event_anim) - { - //Create animation object to start animation - efl_animation_player_animation_set(obj->anim_player, event_anim->anim); - - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_STARTED, - _anim_started_cb, desc); - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_RUNNING, - _anim_running_cb, desc); - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_ENDED, - _anim_ended_cb, desc); - - //Start animation - efl_player_start(obj->anim_player); - } - } - } - - return efl_event_callback_legacy_call(efl_super(eo_obj, MY_CLASS), - desc, event_info); -} - EOLIAN static void _efl_canvas_object_efl_object_invalidate(Eo *eo_obj, Evas_Object_Protected_Data *obj) { @@ -1251,10 +1023,6 @@ _efl_canvas_object_efl_object_invalidate(Eo *eo_obj, Evas_Object_Protected_Data evas_object_async_block(obj); - // Unset callbacks for Hide event before hiding - evas_object_intercept_hide_callback_del((Eo *)eo_obj, - _animation_intercept_hide); - efl_gfx_entity_visible_set((Eo *) eo_obj, EINA_FALSE); obj->efl_del_called = EINA_TRUE; @@ -1329,18 +1097,6 @@ _efl_canvas_object_efl_object_invalidate(Eo *eo_obj, Evas_Object_Protected_Data if (obj->cur && obj->cur->clipper) evas_object_clip_unset(eo_obj); if (obj->prev) _efl_canvas_object_clip_prev_reset(obj, EINA_FALSE); - //Free event animations - while (obj->event_anims) - { - Event_Animation *event_anim = - EINA_INLIST_CONTAINER_GET(obj->event_anims, Event_Animation); - - obj->event_anims = - eina_inlist_remove(obj->event_anims, obj->event_anims); - - _event_anim_free(event_anim, obj); - } - if (obj->map) evas_object_map_set(eo_obj, NULL); if (obj->is_smart) evas_object_smart_del(eo_obj); @@ -2019,26 +1775,6 @@ _show(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) } evas_object_update_bounding_box(eo_obj, obj, NULL); evas_object_inform_call_show(eo_obj, obj); - - Event_Animation *event_anim = _event_animation_find(obj, EFL_GFX_ENTITY_EVENT_SHOW); - if (event_anim) - { - //Create animation object to start animation - efl_animation_player_animation_set(obj->anim_player, event_anim->anim); - - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_STARTED, - _anim_started_cb, EFL_GFX_ENTITY_EVENT_SHOW); - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_RUNNING, - _anim_running_cb, EFL_GFX_ENTITY_EVENT_SHOW); - efl_event_callback_add(obj->anim_player, - EFL_ANIMATION_PLAYER_EVENT_ENDED, - _anim_ended_cb, EFL_GFX_ENTITY_EVENT_SHOW); - - //Start animation - efl_player_start(obj->anim_player); - } } static void @@ -2646,63 +2382,6 @@ evas_find(const Eo *obj) return efl_provider_find(obj, EVAS_CANVAS_CLASS); } -EOLIAN void -_efl_canvas_object_event_animation_set(Eo *eo_obj, - Evas_Object_Protected_Data *pd, - const Efl_Event_Description *desc, - Efl_Canvas_Animation *animation) -{ - Event_Animation *event_anim = _event_animation_find(pd, desc); - - if (!pd->anim_player) - { - pd->anim_player = efl_add(EFL_CANVAS_ANIMATION_PLAYER_CLASS, eo_obj, - efl_animation_player_target_set(efl_added, eo_obj)); - } - - if (event_anim) - { - if (event_anim->anim == animation) - return; - - pd->event_anims = - eina_inlist_remove(pd->event_anims, EINA_INLIST_GET(event_anim)); - - _event_anim_free(event_anim, pd); - } - - if (!animation) return; - - event_anim = calloc(1, sizeof(Event_Animation)); - EINA_SAFETY_ON_NULL_RETURN(event_anim); - - //Set callback for Hide event - if (desc == EFL_GFX_ENTITY_EVENT_HIDE) - { - evas_object_intercept_hide_callback_add(eo_obj, - _animation_intercept_hide, - event_anim); - } - - event_anim->desc = desc; - event_anim->anim = animation; - - pd->event_anims = - eina_inlist_append(pd->event_anims, EINA_INLIST_GET(event_anim)); -} - -EOLIAN Efl_Canvas_Animation * -_efl_canvas_object_event_animation_get(const Eo *eo_obj EINA_UNUSED, - Evas_Object_Protected_Data *pd, - const Efl_Event_Description *desc) -{ - Event_Animation *event_anim = _event_animation_find(pd, desc); - if (event_anim) - return event_anim->anim; - - return NULL; -} - void _efl_canvas_object_event_animation_cancel(Eo *eo_obj) { @@ -2873,8 +2552,6 @@ EOAPI EFL_VOID_FUNC_BODYV(efl_canvas_object_type_set, EFL_FUNC_CALL(type), const #define EFL_CANVAS_OBJECT_EXTRA_OPS \ EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_canvas_object_efl_object_dbg_info_get), \ - EFL_OBJECT_OP_FUNC(efl_event_callback_legacy_call, _efl_canvas_object_efl_object_event_callback_legacy_call), \ - EFL_OBJECT_OP_FUNC(efl_event_callback_call, _efl_canvas_object_efl_object_event_callback_call), \ EFL_OBJECT_OP_FUNC(efl_canvas_object_legacy_ctor, _efl_canvas_object_legacy_ctor), \ EFL_OBJECT_OP_FUNC(efl_canvas_object_type_set, _efl_canvas_object_type_set) diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index c835950..3a8ccac 100755 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1151,8 +1151,6 @@ struct _Evas_Object_Protected_Data unsigned char no_change_render; unsigned char delete_me; - Eina_Inlist *event_anims; //List of Efl_Animation - Eina_Bool render_pre : 1; Eina_Bool rect_del : 1; -- 2.7.4