forked from enlightenment/efl
efl_canvas_object: get rid of event_animation set/get
the API is a little bit problematic. The API takes events as an parameter. However, only the hide and show events can be used, because move for example is not intercepted, which leads to a situation that you cannot attach a translation animation to the event. Further more, handling the animations directory instead of pipeing them through events seems to be a little bit easier as the case study of the previous events have shown. Further more, we should never ever overwrite the callback_call function of a eo base object, those methods are an incredible hotpath, by the time we would have 1-2 animations on a object, the event submission would be significetly slowned down. ref T7555 Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Differential Revision: https://phab.enlightenment.org/D8009
This commit is contained in:
parent
f1ad1559b7
commit
422ee8d323
|
@ -994,7 +994,6 @@ bin/elementary/test_efl_anim_scale.c \
|
|||
bin/elementary/test_efl_anim_translate.c \
|
||||
bin/elementary/test_efl_anim_group_parallel.c \
|
||||
bin/elementary/test_efl_anim_group_sequential.c \
|
||||
bin/elementary/test_efl_anim_event_anim.c \
|
||||
bin/elementary/test_efl_anim_pause.c \
|
||||
bin/elementary/test_efl_anim_repeat.c \
|
||||
bin/elementary/test_efl_anim_start_delay.c \
|
||||
|
|
|
@ -38,7 +38,6 @@ test_efl_anim_scale.c \
|
|||
test_efl_anim_translate.c \
|
||||
test_efl_anim_group_parallel.c \
|
||||
test_efl_anim_group_sequential.c \
|
||||
test_efl_anim_event_anim.c \
|
||||
test_efl_anim_pause.c \
|
||||
test_efl_anim_repeat.c \
|
||||
test_efl_anim_start_delay.c \
|
||||
|
|
|
@ -35,7 +35,6 @@ elementary_test_src = [
|
|||
'test_efl_anim_translate.c',
|
||||
'test_efl_anim_group_parallel.c',
|
||||
'test_efl_anim_group_sequential.c',
|
||||
'test_efl_anim_event_anim.c',
|
||||
'test_efl_anim_pause.c',
|
||||
'test_efl_anim_repeat.c',
|
||||
'test_efl_anim_start_delay.c',
|
||||
|
|
|
@ -365,7 +365,6 @@ void test_efl_anim_translate(void *data, Evas_Object *obj, void *event_info);
|
|||
void test_efl_anim_translate_absolute(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_efl_anim_group_parallel(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_efl_anim_group_sequential(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_efl_anim_event_anim(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_efl_anim_pause(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_efl_anim_repeat(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_efl_anim_start_delay(void *data, Evas_Object *obj, void *event_info);
|
||||
|
@ -923,7 +922,6 @@ add_tests:
|
|||
ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Translate Absolute", test_efl_anim_translate_absolute);
|
||||
ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Group Parallel", test_efl_anim_group_parallel);
|
||||
ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Group Sequential", test_efl_anim_group_sequential);
|
||||
ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Event Animation", test_efl_anim_event_anim);
|
||||
ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Pause", test_efl_anim_pause);
|
||||
ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Repeat", test_efl_anim_repeat);
|
||||
ADD_TEST_EO(NULL, "Effects", "Efl.Animation.Start Delay", test_efl_anim_start_delay);
|
||||
|
|
|
@ -1,91 +0,0 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include "elementary_config.h"
|
||||
#endif
|
||||
#include <Elementary.h>
|
||||
|
||||
typedef struct _App_Data
|
||||
{
|
||||
Efl_Canvas_Animation_Player *target;
|
||||
|
||||
Eina_Bool is_btn_visible;
|
||||
} App_Data;
|
||||
|
||||
static void
|
||||
_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
App_Data *ad = data;
|
||||
|
||||
ad->is_btn_visible = !(ad->is_btn_visible);
|
||||
|
||||
if (ad->is_btn_visible)
|
||||
{
|
||||
//Start animtion by showing button
|
||||
evas_object_show(ad->target);
|
||||
elm_object_text_set(obj, "Hide Button");
|
||||
}
|
||||
else
|
||||
{
|
||||
//Start animtion by hiding button
|
||||
evas_object_hide(ad->target);
|
||||
elm_object_text_set(obj, "Show Button");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
App_Data *ad = data;
|
||||
free(ad);
|
||||
}
|
||||
|
||||
void
|
||||
test_efl_anim_event_anim(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
App_Data *ad = calloc(1, sizeof(App_Data));
|
||||
if (!ad) return;
|
||||
|
||||
Evas_Object *win = elm_win_add(NULL, "Efl Animation Event Animation", ELM_WIN_BASIC);
|
||||
elm_win_title_set(win, "Efl Animation Event Animation");
|
||||
elm_win_autodel_set(win, EINA_TRUE);
|
||||
evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ad);
|
||||
|
||||
//Button to be animated
|
||||
Evas_Object *btn = elm_button_add(win);
|
||||
elm_object_text_set(btn, "Button");
|
||||
evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_resize(btn, 200, 200);
|
||||
evas_object_move(btn, 100, 50);
|
||||
|
||||
//Show Animation
|
||||
Efl_Canvas_Animation *show_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
|
||||
efl_animation_alpha_set(show_anim, 0.0, 1.0);
|
||||
efl_animation_duration_set(show_anim, 1.0);
|
||||
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
|
||||
efl_canvas_object_event_animation_set(btn, EFL_GFX_ENTITY_EVENT_SHOW, show_anim);
|
||||
|
||||
//Show button after setting event animation to show animation for show event
|
||||
evas_object_show(btn);
|
||||
|
||||
//Hide Animation
|
||||
Efl_Canvas_Animation *hide_anim = efl_add(EFL_CANVAS_ANIMATION_ALPHA_CLASS, win);
|
||||
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
|
||||
efl_animation_duration_set(hide_anim, 1.0);
|
||||
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
|
||||
efl_canvas_object_event_animation_set(btn, EFL_GFX_ENTITY_EVENT_HIDE, hide_anim);
|
||||
|
||||
//Initialize App Data
|
||||
ad->target = btn;
|
||||
ad->is_btn_visible = EINA_TRUE;
|
||||
|
||||
//Button to start animation
|
||||
Evas_Object *btn2 = elm_button_add(win);
|
||||
elm_object_text_set(btn2, "Hide Button");
|
||||
evas_object_smart_callback_add(btn2, "clicked", _btn_clicked_cb, ad);
|
||||
evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_resize(btn2, 200, 50);
|
||||
evas_object_move(btn2, 100, 300);
|
||||
evas_object_show(btn2);
|
||||
|
||||
evas_object_resize(win, 400, 400);
|
||||
evas_object_show(win);
|
||||
}
|
|
@ -570,20 +570,6 @@ abstract @beta Efl.Canvas.Object extends Efl.Loop_Consumer implements Efl.Gfx.En
|
|||
return: bool; [[$true if the coords are inside the object, $false otherwise]]
|
||||
}
|
||||
}
|
||||
@property event_animation {
|
||||
[[Set the $animation which starts when the given $desc happens to the object.]]
|
||||
get { legacy: null; }
|
||||
set { legacy: null; }
|
||||
keys {
|
||||
@cref desc: Efl.Event_Description;
|
||||
[[The event description for which the given $animation is set.]]
|
||||
}
|
||||
values {
|
||||
animation: Efl.Canvas.Animation;
|
||||
[[The animation which starts when the given $desc
|
||||
happens to the object.]]
|
||||
}
|
||||
}
|
||||
}
|
||||
implements {
|
||||
Efl.Object.constructor;
|
||||
|
@ -619,9 +605,6 @@ abstract @beta Efl.Canvas.Object extends Efl.Loop_Consumer implements Efl.Gfx.En
|
|||
Efl.Canvas.Pointer.pointer_inside { get; }
|
||||
}
|
||||
events {
|
||||
anim_started: Efl.Canvas.Object_Animation_Event; [[Animation is started.]]
|
||||
anim_running: Efl.Canvas.Object_Animation_Event; [[Animation is running.]]
|
||||
anim_ended: Efl.Canvas.Object_Animation_Event; [[Animation is ended.]]
|
||||
animator,tick: Efl.Event_Animator_Tick; [[Animator tick synchronized with screen vsync if possible.]]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -164,115 +164,6 @@ _evas_object_pointer_data_get(Evas_Pointer_Data *evas_pdata,
|
|||
return pdata;
|
||||
}
|
||||
|
||||
static void _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj);
|
||||
|
||||
static void
|
||||
_anim_started_cb(void *data, const Efl_Event *ev)
|
||||
{
|
||||
const Efl_Event_Description *desc = data;
|
||||
|
||||
Efl_Canvas_Object_Animation_Event event;
|
||||
event.event_desc = desc;
|
||||
|
||||
Eo *eo_obj = efl_animation_player_target_get(ev->object);
|
||||
|
||||
efl_event_callback_call(eo_obj, EFL_CANVAS_OBJECT_EVENT_ANIM_STARTED,
|
||||
&event);
|
||||
}
|
||||
|
||||
static void
|
||||
_anim_running_cb(void *data, const Efl_Event *ev)
|
||||
{
|
||||
const Efl_Event_Description *desc = data;
|
||||
|
||||
Efl_Canvas_Object_Animation_Event event;
|
||||
event.event_desc = desc;
|
||||
|
||||
Eo *eo_obj = efl_animation_player_target_get(ev->object);
|
||||
|
||||
efl_event_callback_call(eo_obj, EFL_CANVAS_OBJECT_EVENT_ANIM_RUNNING,
|
||||
&event);
|
||||
}
|
||||
|
||||
static void
|
||||
_anim_ended_cb(void *data, const Efl_Event *ev)
|
||||
{
|
||||
const Efl_Event_Description *desc = data;
|
||||
|
||||
efl_event_callback_del(ev->object, EFL_ANIMATION_PLAYER_EVENT_STARTED,
|
||||
_anim_started_cb, desc);
|
||||
efl_event_callback_del(ev->object, EFL_ANIMATION_PLAYER_EVENT_RUNNING,
|
||||
_anim_running_cb, desc);
|
||||
efl_event_callback_del(ev->object, EFL_ANIMATION_PLAYER_EVENT_ENDED,
|
||||
_anim_ended_cb, desc);
|
||||
|
||||
Efl_Canvas_Object_Animation_Event event;
|
||||
event.event_desc = desc;
|
||||
|
||||
Eo *eo_obj = efl_animation_player_target_get(ev->object);
|
||||
|
||||
efl_event_callback_call(eo_obj, EFL_CANVAS_OBJECT_EVENT_ANIM_ENDED,
|
||||
&event);
|
||||
|
||||
if (desc == EFL_GFX_ENTITY_EVENT_HIDE)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
|
||||
if (!obj) return;
|
||||
|
||||
_hide(eo_obj, obj);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_animation_intercept_hide(void *data, Evas_Object *eo_obj)
|
||||
{
|
||||
Event_Animation *event_anim = data;
|
||||
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
|
||||
if (!obj) return;
|
||||
|
||||
if (event_anim->anim && obj->anim_player &&
|
||||
(event_anim->anim != efl_animation_player_animation_get(obj->anim_player)))
|
||||
{
|
||||
efl_animation_player_animation_set(obj->anim_player, event_anim->anim);
|
||||
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_STARTED,
|
||||
_anim_started_cb, EFL_GFX_ENTITY_EVENT_HIDE);
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_RUNNING,
|
||||
_anim_running_cb, EFL_GFX_ENTITY_EVENT_HIDE);
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_ENDED,
|
||||
_anim_ended_cb, EFL_GFX_ENTITY_EVENT_HIDE);
|
||||
|
||||
//Start animation
|
||||
efl_player_start(obj->anim_player);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_event_anim_free(Event_Animation *event_anim, Evas_Object_Protected_Data *obj)
|
||||
{
|
||||
if (event_anim->anim)
|
||||
{
|
||||
//Unset callbacks for Hide event
|
||||
if (event_anim->desc == EFL_GFX_ENTITY_EVENT_HIDE)
|
||||
evas_object_intercept_hide_callback_del(obj->object,
|
||||
_animation_intercept_hide);
|
||||
|
||||
if (efl_player_play_get(obj->anim_player))
|
||||
{
|
||||
Efl_Animation *running_anim =
|
||||
efl_animation_player_animation_get(obj->anim_player);
|
||||
|
||||
if (running_anim == event_anim->anim)
|
||||
efl_player_stop(obj->anim_player);
|
||||
}
|
||||
}
|
||||
|
||||
free(event_anim);
|
||||
}
|
||||
|
||||
EOLIAN static Eo *
|
||||
_efl_canvas_object_efl_object_constructor(Eo *eo_obj, Evas_Object_Protected_Data *obj)
|
||||
{
|
||||
|
@ -301,7 +192,6 @@ _efl_canvas_object_efl_object_constructor(Eo *eo_obj, Evas_Object_Protected_Data
|
|||
obj->data_3d = eina_cow_alloc(evas_object_3d_cow);
|
||||
obj->mask = eina_cow_alloc(evas_object_mask_cow);
|
||||
obj->events = eina_cow_alloc(evas_object_events_cow);
|
||||
obj->event_anims = NULL;
|
||||
|
||||
evas_object_inject(eo_obj, obj, evas);
|
||||
evas_object_callback_init(eo_obj, obj);
|
||||
|
@ -1122,124 +1012,6 @@ _efl_canvas_object_efl_input_interface_seat_event_filter_set(Eo *eo_obj,
|
|||
}
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_is_event_blocked(Eo *eo_obj, const Efl_Event_Description *desc,
|
||||
void *event_info)
|
||||
{
|
||||
if ((desc == EFL_EVENT_FOCUS_IN) ||
|
||||
(desc == EFL_EVENT_FOCUS_OUT) ||
|
||||
(desc == EFL_EVENT_KEY_DOWN) ||
|
||||
(desc == EFL_EVENT_KEY_UP) ||
|
||||
(desc == EFL_EVENT_HOLD) ||
|
||||
(desc == EFL_EVENT_POINTER_IN) ||
|
||||
(desc == EFL_EVENT_POINTER_OUT) ||
|
||||
(desc == EFL_EVENT_POINTER_DOWN) ||
|
||||
(desc == EFL_EVENT_POINTER_UP) ||
|
||||
(desc == EFL_EVENT_POINTER_MOVE) ||
|
||||
(desc == EFL_EVENT_POINTER_WHEEL) ||
|
||||
(desc == EFL_EVENT_POINTER_CANCEL) ||
|
||||
(desc == EFL_EVENT_POINTER_AXIS) ||
|
||||
(desc == EFL_EVENT_FINGER_MOVE) ||
|
||||
(desc == EFL_EVENT_FINGER_DOWN) ||
|
||||
(desc == EFL_EVENT_FINGER_UP))
|
||||
{
|
||||
Efl_Input_Device *seat = efl_input_device_seat_get(efl_input_device_get(event_info));
|
||||
return !efl_input_seat_event_filter_get(eo_obj, seat);
|
||||
}
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static Event_Animation *
|
||||
_event_animation_find(Evas_Object_Protected_Data *obj,
|
||||
const Efl_Event_Description *desc)
|
||||
{
|
||||
Event_Animation *event_anim;
|
||||
EINA_INLIST_FOREACH(obj->event_anims, event_anim)
|
||||
{
|
||||
if (event_anim->desc == desc)
|
||||
return event_anim;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Bool
|
||||
_efl_canvas_object_efl_object_event_callback_call(Eo *eo_obj,
|
||||
Evas_Object_Protected_Data *obj,
|
||||
const Efl_Event_Description *desc,
|
||||
void *event_info)
|
||||
{
|
||||
if (_is_event_blocked(eo_obj, desc, event_info)) return EINA_FALSE;
|
||||
|
||||
//Start animation corresponding to the current event
|
||||
if (desc)
|
||||
{
|
||||
if ((desc != EFL_GFX_ENTITY_EVENT_HIDE) && desc != (EFL_GFX_ENTITY_EVENT_SHOW))
|
||||
{
|
||||
Event_Animation *event_anim = _event_animation_find(obj, desc);
|
||||
if (event_anim)
|
||||
{
|
||||
//Create animation object to start animation
|
||||
efl_animation_player_animation_set(obj->anim_player, event_anim->anim);
|
||||
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_STARTED,
|
||||
_anim_started_cb, desc);
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_RUNNING,
|
||||
_anim_running_cb, desc);
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_ENDED,
|
||||
_anim_ended_cb, desc);
|
||||
|
||||
//Start animation
|
||||
efl_player_start(obj->anim_player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return efl_event_callback_call(efl_super(eo_obj, MY_CLASS),
|
||||
desc, event_info);
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Bool
|
||||
_efl_canvas_object_efl_object_event_callback_legacy_call(Eo *eo_obj,
|
||||
Evas_Object_Protected_Data *obj,
|
||||
const Efl_Event_Description *desc,
|
||||
void *event_info)
|
||||
{
|
||||
if (_is_event_blocked(eo_obj, desc, event_info)) return EINA_FALSE;
|
||||
|
||||
//Start animation corresponding to the current event
|
||||
if (desc)
|
||||
{
|
||||
if ((desc != EFL_GFX_ENTITY_EVENT_HIDE) && desc != (EFL_GFX_ENTITY_EVENT_SHOW))
|
||||
{
|
||||
Event_Animation *event_anim = _event_animation_find(obj, desc);
|
||||
if (event_anim)
|
||||
{
|
||||
//Create animation object to start animation
|
||||
efl_animation_player_animation_set(obj->anim_player, event_anim->anim);
|
||||
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_STARTED,
|
||||
_anim_started_cb, desc);
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_RUNNING,
|
||||
_anim_running_cb, desc);
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_ENDED,
|
||||
_anim_ended_cb, desc);
|
||||
|
||||
//Start animation
|
||||
efl_player_start(obj->anim_player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return efl_event_callback_legacy_call(efl_super(eo_obj, MY_CLASS),
|
||||
desc, event_info);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_canvas_object_efl_object_invalidate(Eo *eo_obj, Evas_Object_Protected_Data *obj)
|
||||
{
|
||||
|
@ -1251,10 +1023,6 @@ _efl_canvas_object_efl_object_invalidate(Eo *eo_obj, Evas_Object_Protected_Data
|
|||
|
||||
evas_object_async_block(obj);
|
||||
|
||||
// Unset callbacks for Hide event before hiding
|
||||
evas_object_intercept_hide_callback_del((Eo *)eo_obj,
|
||||
_animation_intercept_hide);
|
||||
|
||||
efl_gfx_entity_visible_set((Eo *) eo_obj, EINA_FALSE);
|
||||
obj->efl_del_called = EINA_TRUE;
|
||||
|
||||
|
@ -1329,18 +1097,6 @@ _efl_canvas_object_efl_object_invalidate(Eo *eo_obj, Evas_Object_Protected_Data
|
|||
if (obj->cur && obj->cur->clipper) evas_object_clip_unset(eo_obj);
|
||||
if (obj->prev) _efl_canvas_object_clip_prev_reset(obj, EINA_FALSE);
|
||||
|
||||
//Free event animations
|
||||
while (obj->event_anims)
|
||||
{
|
||||
Event_Animation *event_anim =
|
||||
EINA_INLIST_CONTAINER_GET(obj->event_anims, Event_Animation);
|
||||
|
||||
obj->event_anims =
|
||||
eina_inlist_remove(obj->event_anims, obj->event_anims);
|
||||
|
||||
_event_anim_free(event_anim, obj);
|
||||
}
|
||||
|
||||
if (obj->map) evas_object_map_set(eo_obj, NULL);
|
||||
|
||||
if (obj->is_smart) evas_object_smart_del(eo_obj);
|
||||
|
@ -2019,26 +1775,6 @@ _show(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
|
|||
}
|
||||
evas_object_update_bounding_box(eo_obj, obj, NULL);
|
||||
evas_object_inform_call_show(eo_obj, obj);
|
||||
|
||||
Event_Animation *event_anim = _event_animation_find(obj, EFL_GFX_ENTITY_EVENT_SHOW);
|
||||
if (event_anim)
|
||||
{
|
||||
//Create animation object to start animation
|
||||
efl_animation_player_animation_set(obj->anim_player, event_anim->anim);
|
||||
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_STARTED,
|
||||
_anim_started_cb, EFL_GFX_ENTITY_EVENT_SHOW);
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_RUNNING,
|
||||
_anim_running_cb, EFL_GFX_ENTITY_EVENT_SHOW);
|
||||
efl_event_callback_add(obj->anim_player,
|
||||
EFL_ANIMATION_PLAYER_EVENT_ENDED,
|
||||
_anim_ended_cb, EFL_GFX_ENTITY_EVENT_SHOW);
|
||||
|
||||
//Start animation
|
||||
efl_player_start(obj->anim_player);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2646,63 +2382,6 @@ evas_find(const Eo *obj)
|
|||
return efl_provider_find(obj, EVAS_CANVAS_CLASS);
|
||||
}
|
||||
|
||||
EOLIAN void
|
||||
_efl_canvas_object_event_animation_set(Eo *eo_obj,
|
||||
Evas_Object_Protected_Data *pd,
|
||||
const Efl_Event_Description *desc,
|
||||
Efl_Canvas_Animation *animation)
|
||||
{
|
||||
Event_Animation *event_anim = _event_animation_find(pd, desc);
|
||||
|
||||
if (!pd->anim_player)
|
||||
{
|
||||
pd->anim_player = efl_add(EFL_CANVAS_ANIMATION_PLAYER_CLASS, eo_obj,
|
||||
efl_animation_player_target_set(efl_added, eo_obj));
|
||||
}
|
||||
|
||||
if (event_anim)
|
||||
{
|
||||
if (event_anim->anim == animation)
|
||||
return;
|
||||
|
||||
pd->event_anims =
|
||||
eina_inlist_remove(pd->event_anims, EINA_INLIST_GET(event_anim));
|
||||
|
||||
_event_anim_free(event_anim, pd);
|
||||
}
|
||||
|
||||
if (!animation) return;
|
||||
|
||||
event_anim = calloc(1, sizeof(Event_Animation));
|
||||
EINA_SAFETY_ON_NULL_RETURN(event_anim);
|
||||
|
||||
//Set callback for Hide event
|
||||
if (desc == EFL_GFX_ENTITY_EVENT_HIDE)
|
||||
{
|
||||
evas_object_intercept_hide_callback_add(eo_obj,
|
||||
_animation_intercept_hide,
|
||||
event_anim);
|
||||
}
|
||||
|
||||
event_anim->desc = desc;
|
||||
event_anim->anim = animation;
|
||||
|
||||
pd->event_anims =
|
||||
eina_inlist_append(pd->event_anims, EINA_INLIST_GET(event_anim));
|
||||
}
|
||||
|
||||
EOLIAN Efl_Canvas_Animation *
|
||||
_efl_canvas_object_event_animation_get(const Eo *eo_obj EINA_UNUSED,
|
||||
Evas_Object_Protected_Data *pd,
|
||||
const Efl_Event_Description *desc)
|
||||
{
|
||||
Event_Animation *event_anim = _event_animation_find(pd, desc);
|
||||
if (event_anim)
|
||||
return event_anim->anim;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
_efl_canvas_object_event_animation_cancel(Eo *eo_obj)
|
||||
{
|
||||
|
@ -2873,8 +2552,6 @@ EOAPI EFL_VOID_FUNC_BODYV(efl_canvas_object_type_set, EFL_FUNC_CALL(type), const
|
|||
|
||||
#define EFL_CANVAS_OBJECT_EXTRA_OPS \
|
||||
EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_canvas_object_efl_object_dbg_info_get), \
|
||||
EFL_OBJECT_OP_FUNC(efl_event_callback_legacy_call, _efl_canvas_object_efl_object_event_callback_legacy_call), \
|
||||
EFL_OBJECT_OP_FUNC(efl_event_callback_call, _efl_canvas_object_efl_object_event_callback_call), \
|
||||
EFL_OBJECT_OP_FUNC(efl_canvas_object_legacy_ctor, _efl_canvas_object_legacy_ctor), \
|
||||
EFL_OBJECT_OP_FUNC(efl_canvas_object_type_set, _efl_canvas_object_type_set)
|
||||
|
||||
|
|
|
@ -1147,8 +1147,6 @@ struct _Evas_Object_Protected_Data
|
|||
unsigned char no_change_render;
|
||||
unsigned char delete_me;
|
||||
|
||||
Eina_Inlist *event_anims; //List of Efl_Animation
|
||||
|
||||
Eina_Bool render_pre : 1;
|
||||
Eina_Bool rect_del : 1;
|
||||
|
||||
|
|
Loading…
Reference in New Issue