forked from enlightenment/efl
timers and animators are now supported from the embryo scripts - WOOO!
examples in e_logo.edc errr - the animators may have problems if somehow aan animator is deleted or object deleteded or file changed while running thru the list... SVN revision: 9567
This commit is contained in:
parent
3c73786007
commit
d22c821b4a
|
@ -34,8 +34,20 @@ native get_strlen(id);
|
|||
native get_str (id, dst[], maxlen);
|
||||
native set_str (id, str[]);
|
||||
|
||||
/********************/
|
||||
/* Edje timer calls */
|
||||
/********************/
|
||||
native timer (Float:in, fname[], val);
|
||||
native cancel_timer(id);
|
||||
|
||||
/*******************/
|
||||
/* Edje anim calls */
|
||||
/*******************/
|
||||
native anim (Float:len, fname[], val);
|
||||
native cancel_anim(id);
|
||||
|
||||
/***********************************************************/
|
||||
/* Edje utility calls for dealign with edjes/programs etc. */
|
||||
/* Edje utility calls for dealing with edjes/programs etc. */
|
||||
/***********************************************************/
|
||||
/* Example:
|
||||
*
|
||||
|
|
|
@ -147,6 +147,18 @@ collections {
|
|||
public global_int;
|
||||
public global_float;
|
||||
public global_str;
|
||||
|
||||
public timer_cb(val)
|
||||
{
|
||||
emit("PROGRAAAAAAAM", "TIMER@!@!@!@!@!@!@!");
|
||||
}
|
||||
public anim_cb(val, Float: pos)
|
||||
{
|
||||
new buf[100];
|
||||
|
||||
snprintf(buf, 100, "val = %i, pos = %f", val, pos);
|
||||
emit("PR AAAAAAAAANIM", buf);
|
||||
}
|
||||
}
|
||||
parts {
|
||||
part {
|
||||
|
@ -506,6 +518,8 @@ collections {
|
|||
set_state(PART:"logo", "clicked", 0.0);
|
||||
set_tween_state(PART:"logo", randf(), "default", 0.0, "clicked", 0.0);
|
||||
run_program(PROGRAM:"logo_click_d2");
|
||||
timer(2.5, "timer_cb", 777);
|
||||
anim(1.5, "anim_cb", 7777);
|
||||
}
|
||||
}
|
||||
program {
|
||||
|
|
|
@ -76,6 +76,13 @@ extern "C" {
|
|||
void edje_object_part_drag_page_get (Evas_Object *o, const char *part, double *dx, double *dy);
|
||||
void edje_object_part_drag_step (Evas_Object *o, const char *part, double dx, double dy);
|
||||
void edje_object_part_drag_page (Evas_Object *o, const char *part, double dx, double dy);
|
||||
int edje_object_variable_id_get (Evas_Object *o, char *name);
|
||||
int edje_object_variable_int_get (Evas_Object *o, int id);
|
||||
void edje_object_variable_int_set (Evas_Object *o, int id, int val);
|
||||
double edje_object_variable_float_get (Evas_Object *o, int id);
|
||||
void edje_object_variable_float_set (Evas_Object *o, int id, double val);
|
||||
char *edje_object_variable_str_get (Evas_Object *o, int id);
|
||||
void edje_object_variable_str_set (Evas_Object *o, int id, char *str);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -382,6 +382,8 @@ typedef struct _Edje_Var Edje_Var;
|
|||
typedef struct _Edje_Var_Int Edje_Var_Int;
|
||||
typedef struct _Edje_Var_Float Edje_Var_Float;
|
||||
typedef struct _Edje_Var_String Edje_Var_String;
|
||||
typedef struct _Edje_Var_Animator Edje_Var_Animator;
|
||||
typedef struct _Edje_Var_Timer Edje_Var_Timer;
|
||||
typedef struct _Edje_Var_Pool Edje_Var_Pool;
|
||||
|
||||
struct _Edje
|
||||
|
@ -424,6 +426,7 @@ struct _Edje
|
|||
Evas_List *emissions;
|
||||
int load_error;
|
||||
int freeze;
|
||||
/* variable pool for edje embryo scripts */
|
||||
Edje_Var_Pool *var_pool;
|
||||
/* for faster lookups to avoid nth list walks */
|
||||
int table_parts_size;
|
||||
|
@ -600,10 +603,33 @@ struct _Edje_Var_String
|
|||
char *v;
|
||||
};
|
||||
|
||||
struct _Edje_Var_Timer
|
||||
{
|
||||
Edje *edje;
|
||||
int id;
|
||||
Embryo_Function func;
|
||||
int val;
|
||||
Ecore_Timer *timer;
|
||||
};
|
||||
|
||||
struct _Edje_Var_Animator
|
||||
{
|
||||
Edje *edje;
|
||||
int id;
|
||||
Embryo_Function func;
|
||||
int val;
|
||||
double start, len;
|
||||
char delete_me;
|
||||
};
|
||||
|
||||
struct _Edje_Var_Pool
|
||||
{
|
||||
int size;
|
||||
Edje_Var *vars;
|
||||
int id_count;
|
||||
Evas_List *timers;
|
||||
Evas_List *animators;
|
||||
int size;
|
||||
Edje_Var *vars;
|
||||
int walking_list;
|
||||
};
|
||||
|
||||
struct _Edje_Var
|
||||
|
|
|
@ -169,17 +169,76 @@ _edje_embryo_fn_set_str(Embryo_Program *ep, Embryo_Cell *params)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* TIMERS... (tick off in N seconds from now)
|
||||
*
|
||||
* timer(Float:in, fname[], val)
|
||||
* cancel_timer(id)
|
||||
*/
|
||||
/* timer(Float:in, fname[], val) */
|
||||
static Embryo_Cell
|
||||
_edje_embryo_fn_timer(Embryo_Program *ep, Embryo_Cell *params)
|
||||
{
|
||||
Edje *ed;
|
||||
char *fname = NULL;
|
||||
float f;
|
||||
double in;
|
||||
int val;
|
||||
|
||||
CHKPARAM(3);
|
||||
ed = embryo_program_data_get(ep);
|
||||
GETSTR(fname, params[2]);
|
||||
if ((!fname)) return 0;
|
||||
f = EMBRYO_CELL_TO_FLOAT(params[1]);
|
||||
in = (double)f;
|
||||
val = params[3];
|
||||
return _edje_var_timer_add(ed, in, fname, val);
|
||||
}
|
||||
|
||||
/* cancel_timer(id) */
|
||||
static Embryo_Cell
|
||||
_edje_embryo_fn_cancel_timer(Embryo_Program *ep, Embryo_Cell *params)
|
||||
{
|
||||
Edje *ed;
|
||||
int id;
|
||||
|
||||
CHKPARAM(1);
|
||||
ed = embryo_program_data_get(ep);
|
||||
id = params[1];
|
||||
if (id <= 0) return 0;
|
||||
_edje_var_timer_del(ed, id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* anim(Float:len, fname[], val) */
|
||||
static Embryo_Cell
|
||||
_edje_embryo_fn_anim(Embryo_Program *ep, Embryo_Cell *params)
|
||||
{
|
||||
Edje *ed;
|
||||
char *fname = NULL;
|
||||
float f;
|
||||
double len;
|
||||
int val;
|
||||
|
||||
CHKPARAM(3);
|
||||
ed = embryo_program_data_get(ep);
|
||||
GETSTR(fname, params[2]);
|
||||
if ((!fname)) return 0;
|
||||
f = EMBRYO_CELL_TO_FLOAT(params[1]);
|
||||
len = (double)f;
|
||||
val = params[3];
|
||||
return _edje_var_anim_add(ed, len, fname, val);
|
||||
}
|
||||
|
||||
/* cancel_anim(id) */
|
||||
static Embryo_Cell
|
||||
_edje_embryo_fn_cancel_anim(Embryo_Program *ep, Embryo_Cell *params)
|
||||
{
|
||||
Edje *ed;
|
||||
int id;
|
||||
|
||||
CHKPARAM(1);
|
||||
ed = embryo_program_data_get(ep);
|
||||
id = params[1];
|
||||
if (id <= 0) return 0;
|
||||
_edje_var_anim_del(ed, id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ANIMATORS... (run for N seconds, passing in position)
|
||||
*
|
||||
* anim(Float:length, fname[], ...) (varargs = series of int's - no strings))
|
||||
* cancel_anim(id);
|
||||
*/
|
||||
|
||||
/* EDJE...
|
||||
*
|
||||
|
@ -385,6 +444,12 @@ _edje_embryo_script_init(Edje *ed)
|
|||
embryo_program_native_call_add(ep, "get_str", _edje_embryo_fn_get_str);
|
||||
embryo_program_native_call_add(ep, "get_strlen", _edje_embryo_fn_get_strlen);
|
||||
embryo_program_native_call_add(ep, "set_str", _edje_embryo_fn_set_str);
|
||||
|
||||
embryo_program_native_call_add(ep, "timer", _edje_embryo_fn_timer);
|
||||
embryo_program_native_call_add(ep, "cancel_timer", _edje_embryo_fn_cancel_timer);
|
||||
|
||||
embryo_program_native_call_add(ep, "anim", _edje_embryo_fn_anim);
|
||||
embryo_program_native_call_add(ep, "cancel_anim", _edje_embryo_fn_cancel_anim);
|
||||
|
||||
embryo_program_native_call_add(ep, "emit", _edje_embryo_fn_emit);
|
||||
embryo_program_native_call_add(ep, "set_state", _edje_embryo_fn_set_state);
|
||||
|
@ -418,6 +483,7 @@ _edje_embryo_script_reset(Edje *ed)
|
|||
_edje_embryo_globals_init(ed);
|
||||
}
|
||||
|
||||
/* this may change in future - thus "test_run" is its name */
|
||||
void
|
||||
_edje_embryo_test_run(Edje *ed, char *fname, char *sig, char *src)
|
||||
{
|
||||
|
|
|
@ -1,4 +1,77 @@
|
|||
#include "Edje.h"
|
||||
#include "edje_private.h"
|
||||
|
||||
/* nothing in here yet */
|
||||
int
|
||||
edje_object_variable_id_get(Evas_Object *obj, char *name)
|
||||
{
|
||||
Edje *ed;
|
||||
int id;
|
||||
|
||||
ed = _edje_fetch(obj);
|
||||
if ((!ed) || (!name)) return 0;
|
||||
return _edje_var_string_id_get(ed, name);
|
||||
}
|
||||
|
||||
int
|
||||
edje_object_variable_int_get(Evas_Object *obj, int id)
|
||||
{
|
||||
Edje *ed;
|
||||
|
||||
ed = _edje_fetch(obj);
|
||||
if ((!ed) || (id <= 0)) return 0;
|
||||
return _edje_var_int_get(ed, id);
|
||||
}
|
||||
|
||||
void
|
||||
edje_object_variable_int_set(Evas_Object *obj, int id, int val)
|
||||
{
|
||||
Edje *ed;
|
||||
|
||||
ed = _edje_fetch(obj);
|
||||
if ((!ed) || (id <= 0)) return;
|
||||
_edje_var_int_set(ed, id, val);
|
||||
}
|
||||
|
||||
double
|
||||
edje_object_variable_float_get(Evas_Object *obj, int id)
|
||||
{
|
||||
Edje *ed;
|
||||
|
||||
ed = _edje_fetch(obj);
|
||||
if ((!ed) || (id <= 0)) return 0;
|
||||
return _edje_var_float_get(ed, id);
|
||||
}
|
||||
|
||||
void
|
||||
edje_object_variable_float_set(Evas_Object *obj, int id, double val)
|
||||
{
|
||||
Edje *ed;
|
||||
|
||||
ed = _edje_fetch(obj);
|
||||
if ((!ed) || (id <= 0)) return;
|
||||
_edje_var_float_set(ed, id, val);
|
||||
}
|
||||
|
||||
char *
|
||||
edje_object_variable_str_get(Evas_Object *obj, int id)
|
||||
{
|
||||
Edje *ed;
|
||||
char *s;
|
||||
|
||||
ed = _edje_fetch(obj);
|
||||
if ((!ed) || (id <= 0)) return NULL;
|
||||
s = _edje_var_str_get(ed, id);
|
||||
if (!s) return NULL;
|
||||
return strdup(s);
|
||||
}
|
||||
|
||||
void
|
||||
edje_object_variable_str_set(Evas_Object *obj, int id, char *str)
|
||||
{
|
||||
Edje *ed;
|
||||
|
||||
ed = _edje_fetch(obj);
|
||||
if ((!ed) || (id <= 0)) return;
|
||||
if (!str) str = "";
|
||||
_edje_var_str_set(ed, id, str);
|
||||
}
|
||||
|
|
|
@ -60,18 +60,25 @@ extern Evas_List *_edje_animators;
|
|||
extern Edje_Text_Style _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
|
||||
extern Evas_List *_edje_edjes;
|
||||
|
||||
void _edje_embryo_script_init (Edje *ed);
|
||||
void _edje_embryo_script_shutdown (Edje *ed);
|
||||
void _edje_embryo_script_reset (Edje *ed);
|
||||
void _edje_embryo_test_run (Edje *ed, char *fname, char *sig, char *src);
|
||||
void _edje_var_init (Edje *ed);
|
||||
void _edje_var_shutdown (Edje *ed);
|
||||
int _edje_var_string_id_get (Edje *ed, char *string);
|
||||
int _edje_var_int_get (Edje *ed, int id);
|
||||
void _edje_var_int_set (Edje *ed, int id, int v);
|
||||
double _edje_var_float_get (Edje *ed, int id);
|
||||
void _edje_var_float_set (Edje *ed, int id, double v);
|
||||
const char *_edje_var_str_get (Edje *ed, int id);
|
||||
void _edje_var_str_set (Edje *ed, int id, char *str);
|
||||
void _edje_embryo_script_init (Edje *ed);
|
||||
void _edje_embryo_script_shutdown (Edje *ed);
|
||||
void _edje_embryo_script_reset (Edje *ed);
|
||||
void _edje_embryo_test_run (Edje *ed, char *fname, char *sig, char *src);
|
||||
void _edje_var_init (Edje *ed);
|
||||
void _edje_var_shutdown (Edje *ed);
|
||||
int _edje_var_string_id_get (Edje *ed, char *string);
|
||||
int _edje_var_int_get (Edje *ed, int id);
|
||||
void _edje_var_int_set (Edje *ed, int id, int v);
|
||||
double _edje_var_float_get (Edje *ed, int id);
|
||||
void _edje_var_float_set (Edje *ed, int id, double v);
|
||||
const char *_edje_var_str_get (Edje *ed, int id);
|
||||
void _edje_var_str_set (Edje *ed, int id, char *str);
|
||||
|
||||
int _edje_var_timer_add (Edje *ed, double in, char *fname, int val);
|
||||
void _edje_var_timer_del (Edje *ed, int id);
|
||||
|
||||
int _edje_var_anim_add (Edje *ed, double len, char *fname, int val);
|
||||
void _edje_var_anim_del (Edje *ed, int id);
|
||||
void _edje_var_anim_frametime_reset(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -20,6 +20,7 @@ edje_frametime_set(double t)
|
|||
ecore_timer_del(_edje_timer);
|
||||
_edje_timer = ecore_timer_add(_edje_frametime, _edje_timer_cb, NULL);
|
||||
}
|
||||
_edje_var_anim_frametime_reset();
|
||||
}
|
||||
|
||||
double
|
||||
|
|
|
@ -1,6 +1,118 @@
|
|||
#include "Edje.h"
|
||||
#include "edje_private.h"
|
||||
|
||||
static int _edje_var_timer_cb(void *data);
|
||||
static int _edje_var_anim_cb(void *data);
|
||||
|
||||
static Ecore_Timer *_edje_anim_timer = NULL;
|
||||
static Evas_List *_edje_anim_list = NULL;
|
||||
|
||||
static int
|
||||
_edje_var_timer_cb(void *data)
|
||||
{
|
||||
Edje_Var_Timer *et;
|
||||
Edje *ed;
|
||||
Embryo_Function fn;
|
||||
|
||||
et = data;
|
||||
if (!et) return 0;
|
||||
ed = et->edje;
|
||||
_edje_embryo_script_reset(ed);
|
||||
embryo_parameter_cell_push(ed->collection->script, (Embryo_Cell)et->val);
|
||||
ed->var_pool->timers = evas_list_remove(ed->var_pool->timers, et);
|
||||
fn = et->func;
|
||||
free(et);
|
||||
embryo_program_run(ed->collection->script, fn);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
_edje_var_anim_cb(void *data)
|
||||
{
|
||||
Evas_List *l, *tl = NULL;
|
||||
double t;
|
||||
|
||||
t = ecore_time_get();
|
||||
for (l = _edje_anim_list; l; l = l->next)
|
||||
tl = evas_list_append(tl, l->data);
|
||||
while (tl)
|
||||
{
|
||||
Edje *ed;
|
||||
Evas_List *tl2;
|
||||
int delete_me = 0;
|
||||
|
||||
ed = tl->data;
|
||||
_edje_ref(ed);
|
||||
_edje_block(ed);
|
||||
_edje_freeze(ed);
|
||||
tl = evas_list_remove(tl, ed);
|
||||
if (!ed->var_pool) continue;
|
||||
tl2 = NULL;
|
||||
for (l = ed->var_pool->animators; l; l = l->next)
|
||||
tl2 = evas_list_append(tl2, l->data);
|
||||
ed->var_pool->walking_list++;
|
||||
while (tl2)
|
||||
{
|
||||
Edje_Var_Animator *ea;
|
||||
|
||||
ea = tl2->data;
|
||||
if ((ed->var_pool) && (!ea->delete_me))
|
||||
{
|
||||
if ((!ed->paused) && (!ed->delete_me))
|
||||
{
|
||||
Embryo_Function fn;
|
||||
float v;
|
||||
|
||||
v = (t - ea->start) / ea->len;
|
||||
if (v > 1.0) v= 1.0;
|
||||
_edje_embryo_script_reset(ed);
|
||||
embryo_parameter_cell_push(ed->collection->script, (Embryo_Cell)ea->val);
|
||||
embryo_parameter_cell_push(ed->collection->script, EMBRYO_FLOAT_TO_CELL(v));
|
||||
fn = ea->func;
|
||||
embryo_program_run(ed->collection->script, fn);
|
||||
if (v == 1.0) ea->delete_me = 1;
|
||||
}
|
||||
}
|
||||
tl2 = evas_list_remove(tl2, ea);
|
||||
if (ed->block_break)
|
||||
{
|
||||
evas_list_free(tl2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
ed->var_pool->walking_list--;
|
||||
for (l = ed->var_pool->animators; l;)
|
||||
{
|
||||
Edje_Var_Animator *ea;
|
||||
|
||||
ea = l->data;
|
||||
if (ea->delete_me)
|
||||
{
|
||||
l = l->next;
|
||||
ed->var_pool->animators = evas_list_remove(ed->var_pool->animators, ea);
|
||||
free(ea);
|
||||
}
|
||||
else
|
||||
l = l->next;
|
||||
}
|
||||
if (!ed->var_pool->animators)
|
||||
_edje_anim_list = evas_list_remove(_edje_anim_list, ed);
|
||||
_edje_unblock(ed);
|
||||
_edje_thaw(ed);
|
||||
_edje_unref(ed);
|
||||
}
|
||||
if (!_edje_anim_list)
|
||||
{
|
||||
if (_edje_anim_timer)
|
||||
{
|
||||
ecore_timer_del(_edje_anim_timer);
|
||||
_edje_anim_timer = NULL;
|
||||
}
|
||||
}
|
||||
if (_edje_anim_timer) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
_edje_var_init(Edje *ed)
|
||||
{
|
||||
|
@ -34,6 +146,35 @@ _edje_var_shutdown(Edje *ed)
|
|||
}
|
||||
free(ed->var_pool->vars);
|
||||
}
|
||||
while (ed->var_pool->timers)
|
||||
{
|
||||
Edje_Var_Timer *et;
|
||||
|
||||
et = ed->var_pool->timers->data;
|
||||
ecore_timer_del(et->timer);
|
||||
free(et);
|
||||
ed->var_pool->timers = evas_list_remove(ed->var_pool->timers, et);
|
||||
}
|
||||
if (ed->var_pool->animators)
|
||||
{
|
||||
_edje_anim_list = evas_list_remove(_edje_anim_list, ed);
|
||||
if (!_edje_anim_list)
|
||||
{
|
||||
if (_edje_anim_timer)
|
||||
{
|
||||
ecore_timer_del(_edje_anim_timer);
|
||||
_edje_anim_timer = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (ed->var_pool->animators)
|
||||
{
|
||||
Edje_Var_Animator *ea;
|
||||
|
||||
ea = ed->var_pool->animators->data;
|
||||
free(ea);
|
||||
ed->var_pool->animators = evas_list_remove(ed->var_pool->animators, ea);
|
||||
}
|
||||
free(ed->var_pool);
|
||||
ed->var_pool = NULL;
|
||||
}
|
||||
|
@ -248,3 +389,126 @@ _edje_var_str_set(Edje *ed, int id, char *str)
|
|||
ed->var_pool->vars[id].data.s.v = strdup(str);
|
||||
}
|
||||
|
||||
int
|
||||
_edje_var_timer_add(Edje *ed, double in, char *fname, int val)
|
||||
{
|
||||
Edje_Var_Timer *et;
|
||||
Embryo_Function fn;
|
||||
|
||||
if (!ed->var_pool) return 0;
|
||||
fn = embryo_program_function_find(ed->collection->script, fname);
|
||||
if (fn == EMBRYO_FUNCTION_NONE) return 0;
|
||||
ed->var_pool->id_count++;
|
||||
et = calloc(1, sizeof(Edje_Var_Timer));
|
||||
if (!et) return 0;
|
||||
et->id = ed->var_pool->id_count;
|
||||
et->edje = ed;
|
||||
et->func = fn;
|
||||
et->val = val;
|
||||
et->timer = ecore_timer_add(in, _edje_var_timer_cb, et);
|
||||
if (!et->timer)
|
||||
{
|
||||
free(et);
|
||||
return 0;
|
||||
}
|
||||
ed->var_pool->timers = evas_list_prepend(ed->var_pool->timers, et);
|
||||
return et->id;
|
||||
}
|
||||
|
||||
void
|
||||
_edje_var_timer_del(Edje *ed, int id)
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
if (!ed->var_pool) return;
|
||||
for (l = ed->var_pool->timers; l; l = l->next)
|
||||
{
|
||||
Edje_Var_Timer *et;
|
||||
|
||||
et = l->data;
|
||||
if (et->id == id)
|
||||
{
|
||||
ed->var_pool->timers = evas_list_remove(ed->var_pool->timers, et);
|
||||
ecore_timer_del(et->timer);
|
||||
free(et);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
_edje_var_anim_add(Edje *ed, double len, char *fname, int val)
|
||||
{
|
||||
Edje_Var_Animator *ea;
|
||||
Embryo_Function fn;
|
||||
|
||||
if (!ed->var_pool) return 0;
|
||||
if (len <= 0.0) return 0;
|
||||
fn = embryo_program_function_find(ed->collection->script, fname);
|
||||
if (fn == EMBRYO_FUNCTION_NONE) return 0;
|
||||
ed->var_pool->id_count++;
|
||||
ea = calloc(1, sizeof(Edje_Var_Animator));
|
||||
if (!ea) return 0;
|
||||
ea->start = ecore_time_get();
|
||||
ea->len = len;
|
||||
ea->id = ed->var_pool->id_count;
|
||||
ea->edje = ed;
|
||||
ea->func = fn;
|
||||
ea->val = val;
|
||||
if (!_edje_anim_list)
|
||||
_edje_anim_list = evas_list_append(_edje_anim_list, ed);
|
||||
ed->var_pool->animators = evas_list_prepend(ed->var_pool->animators, ea);
|
||||
if (!_edje_anim_timer)
|
||||
_edje_anim_timer = ecore_timer_add(edje_frametime_get(), _edje_var_anim_cb, NULL);
|
||||
return ea->id;
|
||||
}
|
||||
|
||||
void
|
||||
_edje_var_anim_del(Edje *ed, int id)
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
if (!ed->var_pool) return;
|
||||
for (l = ed->var_pool->animators; l; l = l->next)
|
||||
{
|
||||
Edje_Var_Animator *ea;
|
||||
|
||||
ea = l->data;
|
||||
if (ea->id == id)
|
||||
{
|
||||
if (!ed->var_pool->walking_list)
|
||||
{
|
||||
ed->var_pool->animators = evas_list_remove(ed->var_pool->animators, ea);
|
||||
free(ea);
|
||||
if (!ed->var_pool->animators)
|
||||
{
|
||||
_edje_anim_list = evas_list_remove(_edje_anim_list, ed);
|
||||
if (!_edje_anim_list)
|
||||
{
|
||||
if (_edje_anim_timer)
|
||||
{
|
||||
ecore_timer_del(_edje_anim_timer);
|
||||
_edje_anim_timer = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
ea->delete_me = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_edje_var_anim_frametime_reset(void)
|
||||
{
|
||||
double ft;
|
||||
|
||||
if (_edje_anim_timer)
|
||||
{
|
||||
ft = edje_frametime_get();
|
||||
ecore_timer_del(_edje_anim_timer);
|
||||
_edje_anim_timer = ecore_timer_add(ft, _edje_var_anim_cb, NULL);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue