forked from enlightenment/efl
Win: Make animator,tick signal actually work.
This commit also updated one of the elementary test to show the new one of doing it. This lets users of the API just add a callback and automatically get animation ticks. It's done per window, because update rate may be different for different windows (think different screens).
This commit is contained in:
parent
7b74f29445
commit
9639418c59
|
@ -10,19 +10,9 @@ static const char *names[] =
|
|||
"bub3", "sh3",
|
||||
};
|
||||
|
||||
static void
|
||||
_del(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Evas_Object *win = data;
|
||||
Ecore_Animator *ani = evas_object_data_get(win, "animator");
|
||||
|
||||
ecore_animator_del(ani);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
anim(void *data)
|
||||
_anim_tick(void *data EINA_UNUSED, Eo *win, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Evas_Object *win = data;
|
||||
Evas_Object *bub, *sh;
|
||||
Evas_Coord x, y, w, h, vw, vh;
|
||||
double t, xx, yy, zz, r, fac;
|
||||
|
@ -66,7 +56,6 @@ void
|
|||
test_anim(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Evas_Object *win, *bg, *bub, *sh;
|
||||
Ecore_Animator *ani;
|
||||
char buf[PATH_MAX];
|
||||
unsigned int i;
|
||||
|
||||
|
@ -104,8 +93,5 @@ test_anim(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info
|
|||
evas_object_resize(win, 480, 800);
|
||||
evas_object_show(win);
|
||||
|
||||
ani = ecore_animator_add(anim, win);
|
||||
evas_object_data_set(win, "animator", ani);
|
||||
|
||||
evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _del, win);
|
||||
eo_do(win, eo_event_callback_add(ELM_WIN_EVENT_ANIMATOR_TICK, _anim_tick, NULL));
|
||||
}
|
||||
|
|
|
@ -196,6 +196,12 @@ struct _Elm_Win_Data
|
|||
|
||||
void *trap_data;
|
||||
|
||||
struct
|
||||
{
|
||||
Ecore_Animator *obj;
|
||||
unsigned short wants;
|
||||
} animator;
|
||||
|
||||
double aspect;
|
||||
int size_base_w, size_base_h;
|
||||
int size_step_w, size_step_h;
|
||||
|
@ -3059,6 +3065,59 @@ _accel_is_gl(void)
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_animator_tick_cb(void *_obj)
|
||||
{
|
||||
Elm_Win *obj = _obj;
|
||||
eo_do(obj, eo_event_callback_call(ELM_WIN_EVENT_ANIMATOR_TICK, NULL));
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_cb_added(void *_data,
|
||||
Eo *obj,
|
||||
const Eo_Event_Description *desc EINA_UNUSED,
|
||||
void *event_info)
|
||||
{
|
||||
const Eo_Callback_Array_Item *event = event_info;
|
||||
Elm_Win_Data *data = _data;
|
||||
|
||||
if (event->desc == ELM_WIN_EVENT_ANIMATOR_TICK)
|
||||
{
|
||||
data->animator.wants++;
|
||||
if (data->animator.wants == 1)
|
||||
{
|
||||
data->animator.obj = eo_add(ECORE_ANIMATOR_CLASS, obj,
|
||||
ecore_animator_constructor(_animator_tick_cb, obj));
|
||||
}
|
||||
}
|
||||
|
||||
return EO_CALLBACK_CONTINUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_cb_deled(void *_data,
|
||||
Eo *obj EINA_UNUSED,
|
||||
const Eo_Event_Description *desc EINA_UNUSED,
|
||||
void *event_info)
|
||||
{
|
||||
const Eo_Callback_Array_Item *event = event_info;
|
||||
Elm_Win_Data *data = _data;
|
||||
|
||||
if (event->desc == ELM_WIN_EVENT_ANIMATOR_TICK)
|
||||
{
|
||||
data->animator.wants--;
|
||||
if (data->animator.wants == 0)
|
||||
{
|
||||
eo_del(data->animator.obj);
|
||||
data->animator.obj = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return EO_CALLBACK_CONTINUE;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const char *name, Elm_Win_Type type)
|
||||
{
|
||||
|
@ -3635,6 +3694,9 @@ _elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const char *name, Elm_Win_Type t
|
|||
}
|
||||
|
||||
evas_object_show(sd->edje);
|
||||
|
||||
eo_do(obj, eo_event_callback_add(EO_EV_CALLBACK_ADD, _cb_added, sd),
|
||||
eo_event_callback_add(EO_EV_CALLBACK_DEL, _cb_deled, sd));
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
|
|
Loading…
Reference in New Issue