forked from enlightenment/efl
Elm_Transit: using evas_object_data{set, get, del}
Intead of doing a list to restore information about an object, now using evas_object_data{set, get, del} Using evas_object_pass_events instead elm_object_disabled_set This allows the event block to be setted in non widgets objects Author: Helen Fornazier <helen.fornazier@profusion.mobi> SVN revision: 54412
This commit is contained in:
parent
4e0df34976
commit
8860368785
|
@ -12,6 +12,9 @@
|
||||||
* Once effects are inserted into transit, transit will manage those effects.
|
* Once effects are inserted into transit, transit will manage those effects.
|
||||||
* (ex) deleting).
|
* (ex) deleting).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static const char _transit_key[] = "_elm_transit";
|
||||||
|
|
||||||
struct _Elm_Transit
|
struct _Elm_Transit
|
||||||
{
|
{
|
||||||
Eina_List *effect_list;
|
Eina_List *effect_list;
|
||||||
|
@ -20,7 +23,6 @@ struct _Elm_Transit
|
||||||
void *completion_arg;
|
void *completion_arg;
|
||||||
int walking;
|
int walking;
|
||||||
Eina_List *objs;
|
Eina_List *objs;
|
||||||
Eina_List *objs_state;
|
|
||||||
Ecore_Animator *animator;
|
Ecore_Animator *animator;
|
||||||
double begin_time;
|
double begin_time;
|
||||||
double cur_time;
|
double cur_time;
|
||||||
|
@ -52,7 +54,6 @@ static double _animator_curve_out(double progress);
|
||||||
static Eina_Bool _animator_animate_cb(void *data);
|
static Eina_Bool _animator_animate_cb(void *data);
|
||||||
static unsigned int _animator_compute_no_reverse_repeat_count(unsigned int cnt);
|
static unsigned int _animator_compute_no_reverse_repeat_count(unsigned int cnt);
|
||||||
static unsigned int _animator_compute_reverse_repeat_count(unsigned int cnt);
|
static unsigned int _animator_compute_reverse_repeat_count(unsigned int cnt);
|
||||||
static int _eina_list_obj_pos_get(Eina_List *list, void *obj);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_remove_dead_effects(Elm_Transit *transit)
|
_remove_dead_effects(Elm_Transit *transit)
|
||||||
|
@ -68,32 +69,6 @@ _remove_dead_effects(Elm_Transit *transit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the position of the object in the list
|
|
||||||
* -1 is returned if the object was not found.
|
|
||||||
*
|
|
||||||
* @param list Eina_list object
|
|
||||||
* @param obj Object
|
|
||||||
*
|
|
||||||
* @return The position of obj in the list, or -1 if obj not in the list
|
|
||||||
*
|
|
||||||
* @ingroup Transit
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
_eina_list_obj_pos_get(Eina_List *list, void *obj)
|
|
||||||
{
|
|
||||||
Eina_List *elist;
|
|
||||||
void *eobj;
|
|
||||||
int n = -1, count = -1;
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(list, elist, eobj)
|
|
||||||
{
|
|
||||||
count++;
|
|
||||||
if (eobj == obj) n = count;
|
|
||||||
}
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_transit_animate_op(Elm_Transit *transit, double progress)
|
_transit_animate_op(Elm_Transit *transit, double progress)
|
||||||
{
|
{
|
||||||
|
@ -216,7 +191,6 @@ elm_transit_event_block_set(Elm_Transit *transit, Eina_Bool disabled)
|
||||||
|
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
Eina_List *elist;
|
Eina_List *elist;
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
transit->block = disabled;
|
transit->block = disabled;
|
||||||
|
|
||||||
|
@ -224,15 +198,14 @@ elm_transit_event_block_set(Elm_Transit *transit, Eina_Bool disabled)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(transit->objs, elist, obj)
|
EINA_LIST_FOREACH(transit->objs, elist, obj)
|
||||||
{
|
{
|
||||||
Eina_Bool *state = eina_list_nth(transit->objs_state, count);
|
Eina_Bool *state = evas_object_data_get(obj, _transit_key);
|
||||||
elm_object_disabled_set(obj, *state);
|
evas_object_pass_events_set(obj, *state);
|
||||||
count++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(transit->objs, elist, obj)
|
EINA_LIST_FOREACH(transit->objs, elist, obj)
|
||||||
elm_object_disabled_set(obj, EINA_TRUE);
|
evas_object_pass_events_set(obj, EINA_TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,8 +269,6 @@ elm_transit_del(Elm_Transit *transit)
|
||||||
EINA_LIST_FOREACH(transit->effect_list, elist, effect)
|
EINA_LIST_FOREACH(transit->effect_list, elist, effect)
|
||||||
_elm_transit_effect_del(transit, effect);
|
_elm_transit_effect_del(transit, effect);
|
||||||
|
|
||||||
eina_list_free(transit->objs_state);
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(transit->objs, elist, obj)
|
EINA_LIST_FOREACH(transit->objs, elist, obj)
|
||||||
transit->objs = eina_list_remove(transit->objs, obj);
|
transit->objs = eina_list_remove(transit->objs, obj);
|
||||||
|
|
||||||
|
@ -449,11 +420,12 @@ elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj)
|
||||||
transit->objs = eina_list_append(transit->objs, obj);
|
transit->objs = eina_list_append(transit->objs, obj);
|
||||||
|
|
||||||
state = calloc(1, sizeof(Eina_Bool));
|
state = calloc(1, sizeof(Eina_Bool));
|
||||||
*state = elm_object_disabled_get(obj);
|
*state = evas_object_pass_events_get(obj);
|
||||||
transit->objs_state = eina_list_append(transit->objs_state, state);
|
|
||||||
|
evas_object_data_set(obj, _transit_key, state);
|
||||||
|
|
||||||
if (transit->block)
|
if (transit->block)
|
||||||
elm_object_disabled_set(obj, EINA_TRUE);
|
evas_object_pass_events_set(obj, EINA_TRUE);
|
||||||
|
|
||||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _elm_transit_object_remove, transit);
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _elm_transit_object_remove, transit);
|
||||||
}
|
}
|
||||||
|
@ -466,15 +438,11 @@ _elm_transit_object_remove(void *data, Evas *e __UNUSED__, Evas_Object *obj, voi
|
||||||
if (!transit) return;
|
if (!transit) return;
|
||||||
if (!obj) return;
|
if (!obj) return;
|
||||||
|
|
||||||
int n = _eina_list_obj_pos_get(transit->objs, obj);
|
state = evas_object_data_del(obj, _transit_key);
|
||||||
if (n == -1) return;
|
free(state);
|
||||||
|
|
||||||
transit->objs = eina_list_remove(transit->objs, obj);
|
transit->objs = eina_list_remove(transit->objs, obj);
|
||||||
|
|
||||||
state = eina_list_nth(transit->objs_state, n);
|
|
||||||
transit->objs_state = eina_list_remove(transit->objs_state, state);
|
|
||||||
free(state);
|
|
||||||
|
|
||||||
evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL,
|
evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL,
|
||||||
_elm_transit_object_remove);
|
_elm_transit_object_remove);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue