forked from enlightenment/efl
ecore_evas: rely as much as possible on display source for animator to reduce spurious tick.
This commit is contained in:
parent
da22b6fc66
commit
b4381fd2d5
|
@ -2865,28 +2865,65 @@ ecore_evas_animator_tick(Ecore_Evas *ee, Eina_Rectangle *viewport, double loop_t
|
|||
DBG("Animator ticked on %p.", ee->evas);
|
||||
}
|
||||
|
||||
static void
|
||||
_ecore_evas_custom_tick_begin(void *data)
|
||||
{
|
||||
Ecore_Evas *ee = data;
|
||||
|
||||
if (ee->anim_count++ > 0) return;
|
||||
|
||||
ee->engine.func->fn_animator_register(ee);
|
||||
}
|
||||
|
||||
static void
|
||||
_ecore_evas_custom_tick_end(void *data)
|
||||
{
|
||||
Ecore_Evas *ee = data;
|
||||
|
||||
if ((--ee->anim_count) > 0) return;
|
||||
|
||||
ee->engine.func->fn_animator_unregister(ee);
|
||||
}
|
||||
|
||||
static void
|
||||
_ecore_evas_tick_source_find(void)
|
||||
{
|
||||
Ecore_Evas *ee;
|
||||
Ecore_Evas *standby = NULL;
|
||||
|
||||
_general_tick = NULL;
|
||||
EINA_INLIST_FOREACH(ecore_evases, ee)
|
||||
if (ee->anim_count &&
|
||||
ee->engine.func->fn_animator_register &&
|
||||
if (ee->engine.func->fn_animator_register &&
|
||||
ee->engine.func->fn_animator_unregister)
|
||||
{
|
||||
_general_tick = ee;
|
||||
break;
|
||||
if (ee->anim_count)
|
||||
{
|
||||
_general_tick = ee;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
standby = ee;
|
||||
}
|
||||
}
|
||||
|
||||
// If no general source is already ticking pick one.
|
||||
if (!_general_tick && standby)
|
||||
{
|
||||
_general_tick = standby;
|
||||
}
|
||||
|
||||
if (!_general_tick)
|
||||
{
|
||||
ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Source set will trigger the previous tick end registered and then the new begin.
|
||||
// As we don't what was in behind, better first begin and end after source is set.
|
||||
ecore_animator_custom_source_tick_begin_callback_set(_ecore_evas_custom_tick_begin, _general_tick);
|
||||
ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_CUSTOM);
|
||||
ecore_animator_custom_source_tick_end_callback_set(_ecore_evas_custom_tick_end, _general_tick);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue