edje: switch to use per window animator.
This commit is contained in:
parent
0812fc8f6c
commit
a13752dcc7
|
@ -374,78 +374,65 @@ _edje_mouse_wheel_signal_cb(void *data, Eo *obj, const Eo_Event_Description *des
|
|||
}
|
||||
|
||||
Eina_Bool
|
||||
_edje_timer_cb(void *data EINA_UNUSED)
|
||||
_edje_timer_cb(void *data,
|
||||
Eo *obj EINA_UNUSED,
|
||||
const Eo_Event_Description *desc EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED) // FIXME: figure out how to use event_info
|
||||
{
|
||||
double t;
|
||||
Eina_List *l;
|
||||
Eina_List *animl = NULL;
|
||||
Edje *ed;
|
||||
Eina_List *newl = NULL;
|
||||
Edje *ed = data;
|
||||
|
||||
t = ecore_loop_time_get();
|
||||
EINA_LIST_FOREACH(_edje_animators, l, ed)
|
||||
{
|
||||
_edje_ref(ed);
|
||||
animl = eina_list_append(animl, ed);
|
||||
}
|
||||
while (animl)
|
||||
{
|
||||
Eina_List *newl = NULL;
|
||||
_edje_ref(ed);
|
||||
|
||||
ed = eina_list_data_get(animl);
|
||||
_edje_block(ed);
|
||||
_edje_util_freeze(ed);
|
||||
animl = eina_list_remove(animl, eina_list_data_get(animl));
|
||||
if ((!ed->paused) && (!ed->delete_me))
|
||||
_edje_block(ed);
|
||||
_edje_util_freeze(ed);
|
||||
if ((!ed->paused) && (!ed->delete_me))
|
||||
{
|
||||
const void *tmp;
|
||||
|
||||
ed->walking_actions = EINA_TRUE;
|
||||
EINA_LIST_FOREACH(ed->actions, l, tmp)
|
||||
newl = eina_list_append(newl, tmp);
|
||||
while (newl)
|
||||
{
|
||||
const void *tmp;
|
||||
Edje_Running_Program *runp;
|
||||
|
||||
ed->walking_actions = EINA_TRUE;
|
||||
EINA_LIST_FOREACH(ed->actions, l, tmp)
|
||||
newl = eina_list_append(newl, tmp);
|
||||
while (newl)
|
||||
runp = eina_list_data_get(newl);
|
||||
newl = eina_list_remove(newl, eina_list_data_get(newl));
|
||||
if (!runp->delete_me)
|
||||
_edje_program_run_iterate(runp, t);
|
||||
if (_edje_block_break(ed))
|
||||
{
|
||||
Edje_Running_Program *runp;
|
||||
|
||||
runp = eina_list_data_get(newl);
|
||||
newl = eina_list_remove(newl, eina_list_data_get(newl));
|
||||
if (!runp->delete_me)
|
||||
_edje_program_run_iterate(runp, t);
|
||||
if (_edje_block_break(ed))
|
||||
{
|
||||
eina_list_free(newl);
|
||||
newl = NULL;
|
||||
goto break_prog;
|
||||
}
|
||||
eina_list_free(newl);
|
||||
newl = NULL;
|
||||
goto break_prog;
|
||||
}
|
||||
EINA_LIST_FOREACH(ed->actions, l, tmp)
|
||||
newl = eina_list_append(newl, tmp);
|
||||
while (newl)
|
||||
{
|
||||
Edje_Running_Program *runp;
|
||||
|
||||
runp = eina_list_data_get(newl);
|
||||
newl = eina_list_remove(newl, eina_list_data_get(newl));
|
||||
if (runp->delete_me)
|
||||
{
|
||||
_edje_anim_count--;
|
||||
runp->edje->actions =
|
||||
eina_list_remove(runp->edje->actions, runp);
|
||||
if (!runp->edje->actions)
|
||||
_edje_animators =
|
||||
eina_list_remove(_edje_animators, runp->edje);
|
||||
free(runp);
|
||||
}
|
||||
}
|
||||
ed->walking_actions = EINA_FALSE;
|
||||
}
|
||||
break_prog:
|
||||
_edje_unblock(ed);
|
||||
_edje_util_thaw(ed);
|
||||
_edje_unref(ed);
|
||||
EINA_LIST_FOREACH(ed->actions, l, tmp)
|
||||
newl = eina_list_append(newl, tmp);
|
||||
while (newl)
|
||||
{
|
||||
Edje_Running_Program *runp;
|
||||
|
||||
runp = eina_list_data_get(newl);
|
||||
newl = eina_list_remove(newl, eina_list_data_get(newl));
|
||||
if (runp->delete_me)
|
||||
{
|
||||
_edje_program_run_cleanup(ed, runp);
|
||||
free(runp);
|
||||
}
|
||||
}
|
||||
ed->walking_actions = EINA_FALSE;
|
||||
}
|
||||
if (_edje_anim_count > 0) return ECORE_CALLBACK_RENEW;
|
||||
_edje_timer = NULL;
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
break_prog:
|
||||
_edje_unblock(ed);
|
||||
_edje_util_thaw(ed);
|
||||
_edje_unref(ed);
|
||||
|
||||
return EO_CALLBACK_CONTINUE;
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
|
|
|
@ -1641,17 +1641,18 @@ _edje_file_del(Edje *ed)
|
|||
_edje_cache_file_unref(ed->file);
|
||||
ed->file = NULL;
|
||||
}
|
||||
|
||||
// Cleanup all animator
|
||||
if (ed->actions)
|
||||
{
|
||||
Edje_Running_Program *runp;
|
||||
|
||||
EINA_LIST_FREE(ed->actions, runp)
|
||||
{
|
||||
_edje_anim_count--;
|
||||
free(runp);
|
||||
}
|
||||
free(runp);
|
||||
}
|
||||
_edje_animators = eina_list_remove(_edje_animators, ed);
|
||||
eo_do(ed->obj, eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _edje_timer_cb, ed));
|
||||
|
||||
if (ed->pending_actions)
|
||||
{
|
||||
Edje_Pending_Program *pp;
|
||||
|
|
|
@ -233,12 +233,6 @@ edje_shutdown(void)
|
|||
if (--_edje_init_count != 0)
|
||||
return _edje_init_count;
|
||||
|
||||
if (_edje_timer)
|
||||
{
|
||||
ecore_animator_del(_edje_timer);
|
||||
_edje_timer = NULL;
|
||||
}
|
||||
|
||||
_edje_shutdown_core();
|
||||
|
||||
return _edje_init_count;
|
||||
|
@ -248,8 +242,6 @@ edje_shutdown(void)
|
|||
void
|
||||
_edje_del(Edje *ed)
|
||||
{
|
||||
Edje_Running_Program *runp;
|
||||
Edje_Pending_Program *pp;
|
||||
Edje_Text_Insert_Filter_Callback *cb;
|
||||
|
||||
if (ed->processing_messages)
|
||||
|
@ -265,14 +257,6 @@ _edje_del(Edje *ed)
|
|||
if (ed->parent) eina_stringshare_del(ed->parent);
|
||||
ed->path = NULL;
|
||||
ed->group = NULL;
|
||||
if ((ed->actions) || (ed->pending_actions))
|
||||
{
|
||||
_edje_animators = eina_list_remove(_edje_animators, ed);
|
||||
}
|
||||
EINA_LIST_FREE(ed->actions, runp)
|
||||
free(runp);
|
||||
EINA_LIST_FREE(ed->pending_actions, pp)
|
||||
free(pp);
|
||||
eina_hash_free(ed->color_classes);
|
||||
eina_hash_free(ed->text_classes);
|
||||
eina_hash_free(ed->size_classes);
|
||||
|
|
|
@ -2220,8 +2220,6 @@ EAPI void _edje_edd_shutdown(void);
|
|||
EAPI extern Eet_Data_Descriptor *_edje_edd_edje_file;
|
||||
EAPI extern Eet_Data_Descriptor *_edje_edd_edje_part_collection;
|
||||
|
||||
extern int _edje_anim_count;
|
||||
extern Ecore_Animator *_edje_timer;
|
||||
extern Eina_List *_edje_animators;
|
||||
extern Eina_List *_edje_edjes;
|
||||
|
||||
|
@ -2279,7 +2277,7 @@ void _edje_recalc_do(Edje *ed);
|
|||
int _edje_part_dragable_calc(Edje *ed, Edje_Real_Part *ep, FLOAT_T *x, FLOAT_T *y);
|
||||
void _edje_dragable_pos_set(Edje *ed, Edje_Real_Part *ep, FLOAT_T x, FLOAT_T y);
|
||||
|
||||
Eina_Bool _edje_timer_cb(void *data);
|
||||
Eina_Bool _edje_timer_cb(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info);
|
||||
Eina_Bool _edje_pending_timer_cb(void *data);
|
||||
void _edje_callbacks_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp);
|
||||
void _edje_callbacks_focus_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp);
|
||||
|
@ -2322,6 +2320,7 @@ void _edje_clean_objects(Edje *ed);
|
|||
void _edje_ref(Edje *ed);
|
||||
void _edje_unref(Edje *ed);
|
||||
|
||||
void _edje_program_run_cleanup(Edje *ed, Edje_Running_Program *runp);
|
||||
Eina_Bool _edje_program_run_iterate(Edje_Running_Program *runp, double tim);
|
||||
void _edje_program_end(Edje *ed, Edje_Running_Program *runp);
|
||||
void _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig, const char *ssrc);
|
||||
|
|
|
@ -4,8 +4,6 @@ static void _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Messa
|
|||
static void _edje_param_copy(Edje *ed, Edje_Real_Part *src_part, const char *src_param, Edje_Real_Part *dst_part, const char *dst_param);
|
||||
static void _edje_param_set(Edje *ed, Edje_Real_Part *part, const char *param, const char *value);
|
||||
|
||||
int _edje_anim_count = 0;
|
||||
Ecore_Animator *_edje_timer = NULL;
|
||||
Eina_List *_edje_animators = NULL;
|
||||
static double _edje_transition_duration_scale = 0;
|
||||
|
||||
|
@ -421,6 +419,15 @@ _edje_object_animation_get(Eo *obj EINA_UNUSED, Edje *ed)
|
|||
}
|
||||
|
||||
/* Private Routines */
|
||||
void
|
||||
_edje_program_run_cleanup(Edje *ed, Edje_Running_Program *runp)
|
||||
{
|
||||
ed->actions = eina_list_remove(ed->actions, runp);
|
||||
if (!ed->actions)
|
||||
{
|
||||
eo_do(ed->obj, eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _edje_timer_cb, ed));
|
||||
}
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
_edje_program_run_iterate(Edje_Running_Program *runp, double tim)
|
||||
|
@ -486,12 +493,7 @@ _edje_program_run_iterate(Edje_Running_Program *runp, double tim)
|
|||
_edje_recalc(ed);
|
||||
runp->delete_me = EINA_TRUE;
|
||||
if (!ed->walking_actions)
|
||||
{
|
||||
_edje_anim_count--;
|
||||
ed->actions = eina_list_remove(ed->actions, runp);
|
||||
if (!ed->actions)
|
||||
_edje_animators = eina_list_remove(_edje_animators, ed);
|
||||
}
|
||||
_edje_program_run_cleanup(ed, runp);
|
||||
// _edje_emit(ed, "program,stop", runp->program->name);
|
||||
if (_edje_block_break(ed))
|
||||
{
|
||||
|
@ -568,13 +570,8 @@ _edje_program_end(Edje *ed, Edje_Running_Program *runp)
|
|||
// pname = runp->program->name;
|
||||
if (!ed->walking_actions)
|
||||
{
|
||||
_edje_anim_count--;
|
||||
ed->actions = eina_list_remove(ed->actions, runp);
|
||||
_edje_program_run_cleanup(ed, runp);
|
||||
free_runp = 1;
|
||||
if (!ed->actions)
|
||||
{
|
||||
_edje_animators = eina_list_remove(_edje_animators, ed);
|
||||
}
|
||||
}
|
||||
// _edje_emit(ed, "program,stop", pname);
|
||||
_edje_util_thaw(ed);
|
||||
|
@ -726,15 +723,16 @@ low_mem_current:
|
|||
ed->actions = eina_list_append(ed->actions, runp);
|
||||
goto break_prog;
|
||||
}
|
||||
|
||||
if (!ed->actions)
|
||||
_edje_animators = eina_list_append(_edje_animators, ed);
|
||||
{
|
||||
eo_do(ed->obj, eo_event_callback_add(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _edje_timer_cb, ed));
|
||||
}
|
||||
ed->actions = eina_list_append(ed->actions, runp);
|
||||
|
||||
runp->start_time = ecore_loop_time_get();
|
||||
runp->edje = ed;
|
||||
runp->program = pr;
|
||||
if (!_edje_timer)
|
||||
_edje_timer = ecore_animator_add(_edje_timer_cb, NULL);
|
||||
_edje_anim_count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue