genlist: switch to efl.core.animator tick.

This commit is contained in:
Cedric BAIL 2016-01-28 17:07:34 -08:00
parent 670a77c16a
commit 33d196af7a
2 changed files with 51 additions and 30 deletions

View File

@ -160,6 +160,9 @@ static void _decorate_item_set(Elm_Gen_Item *);
static void _internal_elm_genlist_clear(Evas_Object *obj);
static Eina_Bool _item_filtered_get(Elm_Gen_Item *it);
static void _elm_genlist_tree_effect_stop(Elm_Genlist_Data *sd);
static Eina_Bool _elm_genlist_tree_effect_setup(Elm_Genlist_Data *sd);
static const Elm_Action key_actions[] = {
{"move", _key_action_move},
{"select", _key_action_select},
@ -1142,7 +1145,7 @@ _item_tree_effect_finish(Elm_Genlist_Data *sd)
(ELM_GENLIST_EVENT_TREE_EFFECT_FINISHED, NULL));
evas_object_smart_changed(sd->pan_obj);
sd->tree_effect_animator = NULL;
_elm_genlist_tree_effect_stop(sd);
}
static void
@ -1974,7 +1977,10 @@ _item_realize(Elm_Gen_Item *it,
}
static Eina_Bool
_tree_effect_animator_cb(void *data)
_tree_effect_animator_cb(void *data,
Eo *obj EINA_UNUSED,
const Eo_Event_Description *desc EINA_UNUSED,
void *event_info EINA_UNUSED)
{
int in = 0;
const Eina_List *l;
@ -2127,10 +2133,10 @@ _tree_effect_animator_cb(void *data)
if (end)
{
_item_tree_effect_finish(sd);
return ECORE_CALLBACK_CANCEL;
_elm_genlist_tree_effect_stop(sd);
}
return ECORE_CALLBACK_RENEW;
return EO_CALLBACK_CONTINUE;
}
static void
@ -2386,6 +2392,37 @@ _item_block_realize(Item_Block *itb)
itb->want_unrealize = EINA_FALSE;
}
static Eina_Bool
_elm_genlist_tree_effect_setup(Elm_Genlist_Data *sd)
{
if (!sd->tree_effect_animator)
{
Eina_Bool r;
_item_tree_effect_before(sd->expanded_item);
evas_object_raise(sd->event_block_rect);
evas_object_stack_below(sd->event_block_rect, sd->stack[1]);
evas_object_show(sd->event_block_rect);
sd->start_time = ecore_time_get();
eo_do(sd->obj,
r = eo_event_callback_add(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _tree_effect_animator_cb, sd->obj));
sd->tree_effect_animator = 1;
return EINA_TRUE;
}
return EINA_FALSE;
}
static void
_elm_genlist_tree_effect_stop(Elm_Genlist_Data *sd)
{
if (sd->tree_effect_animator)
{
sd->tree_effect_animator = 0;
eo_do(sd->obj,
eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _tree_effect_animator_cb, sd->obj));
}
}
EOLIAN static void
_elm_genlist_pan_evas_object_smart_calculate(Eo *obj, Elm_Genlist_Pan_Data *psd)
{
@ -2414,16 +2451,7 @@ _elm_genlist_pan_evas_object_smart_calculate(Eo *obj, Elm_Genlist_Pan_Data *psd)
if (sd->tree_effect_enabled &&
(sd->move_effect_mode != ELM_GENLIST_TREE_EFFECT_NONE))
{
if (!sd->tree_effect_animator)
{
_item_tree_effect_before(sd->expanded_item);
evas_object_raise(sd->event_block_rect);
evas_object_stack_below(sd->event_block_rect, sd->stack[1]);
evas_object_show(sd->event_block_rect);
sd->start_time = ecore_time_get();
sd->tree_effect_animator =
ecore_animator_add(_tree_effect_animator_cb, sd->obj);
}
_elm_genlist_tree_effect_setup(sd);
}
EINA_INLIST_FOREACH(sd->blocks, itb)
@ -3693,7 +3721,7 @@ _item_del(Elm_Gen_Item *it)
if (sd->tree_effect_animator)
{
_item_tree_effect_finish(sd);
ELM_SAFE_FREE(sd->tree_effect_animator, ecore_animator_del);
_elm_genlist_tree_effect_stop(sd);
}
sd->expanded_item = NULL;
sd->move_effect_mode = ELM_GENLIST_TREE_EFFECT_NONE;
@ -5570,7 +5598,8 @@ _elm_genlist_evas_object_smart_del(Eo *obj, Elm_Genlist_Data *sd)
ecore_idler_del(sd->must_recalc_idler);
ecore_timer_del(sd->multi_timer);
eina_stringshare_del(sd->decorate_it_type);
ecore_animator_del(sd->tree_effect_animator);
_elm_genlist_tree_effect_stop(sd);
eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
}
@ -5713,11 +5742,12 @@ _internal_elm_genlist_clear(Evas_Object *obj)
elm_layout_sizing_eval(sd->obj);
eo_do(obj, elm_interface_scrollable_content_region_show(0, 0, 0, 0));
_elm_genlist_tree_effect_stop(sd);
ELM_SAFE_FREE(sd->multi_timer, ecore_timer_del);
ELM_SAFE_FREE(sd->update_job, ecore_job_del);
ELM_SAFE_FREE(sd->queue_idle_enterer, ecore_idle_enterer_del);
ELM_SAFE_FREE(sd->must_recalc_idler, ecore_idler_del);
ELM_SAFE_FREE(sd->tree_effect_animator, ecore_animator_del);
ELM_SAFE_FREE(sd->event_block_rect, evas_object_del);
ELM_SAFE_FREE(sd->scr_hold_timer, ecore_timer_del);
ELM_SAFE_FREE(sd->queue, eina_list_free);
@ -6643,17 +6673,7 @@ _elm_genlist_item_subitems_clear(Eo *eo_item EINA_UNUSED, Elm_Gen_Item *it)
_item_sub_items_clear(it);
else
{
if (!sd->tree_effect_animator)
{
sd->expanded_item = it;
_item_tree_effect_before(it);
evas_object_stack_below(sd->event_block_rect, sd->stack[1]);
evas_object_show(sd->event_block_rect);
sd->start_time = ecore_time_get();
sd->tree_effect_animator =
ecore_animator_add(_tree_effect_animator_cb, sd->obj);
}
else
if (!_elm_genlist_tree_effect_setup(sd))
_item_sub_items_clear(it);
}
}
@ -7769,7 +7789,7 @@ _elm_genlist_decorate_mode_set(Eo *obj, Elm_Genlist_Data *sd, Eina_Bool decorate
// and user can check whether decorate_all_mode_ is enabled.
sd->decorate_all_mode = decorated;
ELM_SAFE_FREE(sd->tree_effect_animator, ecore_animator_del);
_elm_genlist_tree_effect_stop(sd);
sd->move_effect_mode = ELM_GENLIST_TREE_EFFECT_NONE;
list = elm_genlist_realized_items_get(obj);

View File

@ -137,7 +137,6 @@ struct _Elm_Genlist_Data
Eina_List *move_items; /* items move for
* tree effect */
Elm_Gen_Item *expanded_next_item;
Ecore_Animator *tree_effect_animator;
Elm_Genlist_Item_Move_Effect_Mode move_effect_mode;
int reorder_fast;
@ -199,6 +198,8 @@ struct _Elm_Genlist_Data
/**< value whether item loop feature is enabled or not. */
Eina_Bool item_loop_enable : 1;
Eina_Bool item_looping_on : 1;
Eina_Bool tree_effect_animator : 1;
};
typedef struct _Item_Block Item_Block;