jackdanielz pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=387c3433947e21dc7f191f72ebcb8861588210c6
commit 387c3433947e21dc7f191f72ebcb8861588210c6 Author: Yossi Kantor <yossi.kan...@samsung.com> Date: Mon Mar 24 13:23:14 2014 +0200 Eolian: Integration of Ecore Animator --- src/Makefile_Ecore.am | 10 ++-- src/lib/ecore/Ecore_Eo.h | 4 +- src/lib/ecore/ecore_anim.c | 102 ++++++++++------------------------------ src/lib/ecore/ecore_animator.eo | 27 +++++++++++ src/lib/ecore/ecore_timer.eo | 1 + 5 files changed, 64 insertions(+), 80 deletions(-) diff --git a/src/Makefile_Ecore.am b/src/Makefile_Ecore.am index 8e10b39..857e8d1 100644 --- a/src/Makefile_Ecore.am +++ b/src/Makefile_Ecore.am @@ -13,7 +13,9 @@ BUILT_SOURCES += \ lib/ecore/ecore_idle_enterer.eo.c \ lib/ecore/ecore_idle_enterer.eo.h \ lib/ecore/ecore_idle_exiter.eo.c \ - lib/ecore/ecore_idle_exiter.eo.h + lib/ecore/ecore_idle_exiter.eo.h \ + lib/ecore/ecore_animator.eo.c \ + lib/ecore/ecore_animator.eo.h ecoreeolianfilesdir = $(datadir)/eolian/include/ecore-@VMAJ@ ecoreeolianfiles_DATA = \ @@ -22,7 +24,8 @@ ecoreeolianfiles_DATA = \ lib/ecore/ecore_job.eo \ lib/ecore/ecore_idler.eo \ lib/ecore/ecore_idle_enterer.eo \ - lib/ecore/ecore_idle_exiter.eo + lib/ecore/ecore_idle_exiter.eo \ + lib/ecore/ecore_animator.eo EXTRA_DIST += \ ${ecoreeolianfiles_DATA} @@ -43,7 +46,8 @@ nodist_installed_ecoremainheaders_DATA = \ lib/ecore/ecore_job.eo.h \ lib/ecore/ecore_idler.eo.h \ lib/ecore/ecore_idle_enterer.eo.h \ - lib/ecore/ecore_idle_exiter.eo.h + lib/ecore/ecore_idle_exiter.eo.h \ + lib/ecore/ecore_animator.eo.h lib_ecore_libecore_la_SOURCES = \ lib/ecore/ecore.c \ diff --git a/src/lib/ecore/Ecore_Eo.h b/src/lib/ecore/Ecore_Eo.h index fedacdf..38e8c93 100644 --- a/src/lib/ecore/Ecore_Eo.h +++ b/src/lib/ecore/Ecore_Eo.h @@ -75,6 +75,8 @@ enum * * @{ */ +#include "ecore_animator.eo.h" +#if 0 #define ECORE_ANIMATOR_CLASS ecore_animator_class_get() const Eo_Class *ecore_animator_class_get(void) EINA_CONST; @@ -114,7 +116,7 @@ enum * */ #define ecore_animator_timeline_constructor(runtime, func, data) ECORE_ANIMATOR_ID(ECORE_ANIMATOR_SUB_ID_TIMELINE_CONSTRUCTOR), EO_TYPECHECK(double, runtime), EO_TYPECHECK(Ecore_Timeline_Cb, func), EO_TYPECHECK(const void *, data) - +#endif /** * @} */ diff --git a/src/lib/ecore/ecore_anim.c b/src/lib/ecore/ecore_anim.c index 3a7323c..892359f 100644 --- a/src/lib/ecore/ecore_anim.c +++ b/src/lib/ecore/ecore_anim.c @@ -18,9 +18,7 @@ if (!eo_isa((obj), ECORE_ANIMATOR_CLASS)) \ return -EAPI Eo_Op ECORE_ANIMATOR_BASE_ID = EO_NOOP; - -struct _Ecore_Animator_Private_Data +struct _Ecore_Animator_Data { EINA_INLIST; Ecore_Animator *obj; @@ -37,13 +35,13 @@ struct _Ecore_Animator_Private_Data Eina_Bool just_added : 1; }; -typedef struct _Ecore_Animator_Private_Data Ecore_Animator_Private_Data; +typedef struct _Ecore_Animator_Data Ecore_Animator_Data; static Eina_Bool _ecore_animator_run(void *data); static Eina_Bool _ecore_animator(void *data); static int animators_delete_me = 0; -static Ecore_Animator_Private_Data *animators = NULL; +static Ecore_Animator_Data *animators = NULL; static double animators_frametime = 1.0 / 30.0; static Ecore_Animator_Source src = ECORE_ANIMATOR_SOURCE_TIMER; @@ -103,7 +101,7 @@ _end_tick(void) static Eina_Bool _do_tick(void) { - Ecore_Animator_Private_Data *animator; + Ecore_Animator_Data *animator; EINA_INLIST_FOREACH(animators, animator) { @@ -126,14 +124,14 @@ _do_tick(void) } if (animators_delete_me) { - Ecore_Animator_Private_Data *l; + Ecore_Animator_Data *l; for (l = animators; l; ) { animator = l; - l = (Ecore_Animator_Private_Data *)EINA_INLIST_GET(l)->next; + l = (Ecore_Animator_Data *)EINA_INLIST_GET(l)->next; if (animator->delete_me) { - animators = (Ecore_Animator_Private_Data *) + animators = (Ecore_Animator_Data *) eina_inlist_remove(EINA_INLIST_GET(animators), EINA_INLIST_GET(animator)); @@ -158,7 +156,7 @@ _do_tick(void) static Eina_Bool _ecore_animator_add(Ecore_Animator *obj, - Ecore_Animator_Private_Data *animator, + Ecore_Animator_Data *animator, Ecore_Task_Cb func, const void *data) { @@ -182,13 +180,13 @@ _ecore_animator_add(Ecore_Animator *obj, animator->func = func; animator->data = (void *)data; animator->just_added = EINA_TRUE; - animators = (Ecore_Animator_Private_Data *)eina_inlist_append(EINA_INLIST_GET(animators), EINA_INLIST_GET(animator)); + animators = (Ecore_Animator_Data *)eina_inlist_append(EINA_INLIST_GET(animators), EINA_INLIST_GET(animator)); _begin_tick(); return EINA_TRUE; } -static void -_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_ecore_animator_eo_base_constructor(Eo *obj, Ecore_Animator_Data *_pd EINA_UNUSED) { eo_error_set(obj); ERR("only custom constructor can be used with '%s' class", MY_CLASS_NAME); @@ -206,14 +204,10 @@ ecore_animator_add(Ecore_Task_Cb func, return animator; } -static void -_animator_constructor(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_ecore_animator_constructor(Eo *obj, Ecore_Animator_Data *animator, Ecore_Task_Cb func, const void *data) { - Ecore_Task_Cb func = va_arg(*list, Ecore_Task_Cb); - const void *data = va_arg(*list, const void *); - _ecore_lock(); - Ecore_Animator_Private_Data *animator = _pd; _ecore_animator_add(obj, animator, func, data); _ecore_unlock(); } @@ -230,16 +224,12 @@ ecore_animator_timeline_add(double runtime, return animator; } -static void -_animator_timeline_constructor(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_ecore_animator_timeline_constructor(Eo *obj, Ecore_Animator_Data *animator, double runtime, Ecore_Timeline_Cb func, const void *data) { _ecore_lock(); - double runtime = va_arg(*list, double); if (runtime <= 0.0) runtime = 0.0; - Ecore_Timeline_Cb func = va_arg(*list, Ecore_Timeline_Cb); - const void *data = va_arg(*list, const void *); - Ecore_Animator_Private_Data *animator = _pd; if (!_ecore_animator_add(obj, animator, _ecore_animator_run, NULL)) goto unlock; animator->data = obj; @@ -493,7 +483,7 @@ ecore_animator_del(Ecore_Animator *obj) if (!obj) return NULL; EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); - Ecore_Animator_Private_Data *animator = eo_data_scope_get(obj, MY_CLASS); + Ecore_Animator_Data *animator = eo_data_scope_get(obj, MY_CLASS); _ecore_lock(); if (!animator) goto unlock; @@ -513,11 +503,9 @@ unlock: return data; } -static void -_destructor(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_ecore_animator_eo_base_destructor(Eo *obj, Ecore_Animator_Data *pd) { - Ecore_Animator_Private_Data *pd = _pd; - pd->delete_me = EINA_TRUE; animators_delete_me++; @@ -552,13 +540,11 @@ ecore_animator_freeze(Ecore_Animator *animator) eo_do(animator, eo_event_freeze()); } -static void -_ecore_animator_freeze(Eo *obj EINA_UNUSED, void *_pd, - va_list *list EINA_UNUSED) +EOLIAN static void +_ecore_animator_eo_base_event_freeze(Eo *obj EINA_UNUSED, Ecore_Animator_Data *animator) { EINA_MAIN_LOOP_CHECK_RETURN; _ecore_lock(); - Ecore_Animator_Private_Data *animator = _pd; if (animator->delete_me) goto unlock; animator->suspended = EINA_TRUE; @@ -573,12 +559,10 @@ ecore_animator_thaw(Ecore_Animator *animator) eo_do(animator, eo_event_thaw()); } -static void -_ecore_animator_thaw(Eo *obj EINA_UNUSED, void *_pd, - va_list *list EINA_UNUSED) +EOLIAN static void +_ecore_animator_eo_base_event_thaw(Eo *obj EINA_UNUSED, Ecore_Animator_Data *animator) { EINA_MAIN_LOOP_CHECK_RETURN; - Ecore_Animator_Private_Data *animator = _pd; _ecore_lock(); if (animator->delete_me) goto unlock; @@ -646,10 +630,10 @@ _ecore_animator_shutdown(void) _end_tick(); while (animators) { - Ecore_Animator_Private_Data *animator; + Ecore_Animator_Data *animator; animator = animators; - animators = (Ecore_Animator_Private_Data *)eina_inlist_remove(EINA_INLIST_GET(animators), EINA_INLIST_GET(animators)); + animators = (Ecore_Animator_Data *)eina_inlist_remove(EINA_INLIST_GET(animators), EINA_INLIST_GET(animators)); eo_do(animator->obj, eo_parent_set(NULL)); if (eo_destructed_is(animator->obj)) @@ -675,7 +659,7 @@ static Eina_Bool _ecore_animator_run(void *data) { Ecore_Animator *obj = data; - Ecore_Animator_Private_Data *animator = eo_data_scope_get(obj, MY_CLASS); + Ecore_Animator_Data *animator = eo_data_scope_get(obj, MY_CLASS); double pos = 0.0, t; Eina_Bool run_ret; @@ -703,38 +687,4 @@ _ecore_animator(void *data EINA_UNUSED) return r; } -static void -_class_constructor(Eo_Class *klass) -{ - const Eo_Op_Func_Description func_desc[] = { - EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), - EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), - EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_EVENT_FREEZE), _ecore_animator_freeze), - EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_EVENT_THAW), _ecore_animator_thaw), - - EO_OP_FUNC(ECORE_ANIMATOR_ID(ECORE_ANIMATOR_SUB_ID_CONSTRUCTOR), _animator_constructor), - EO_OP_FUNC(ECORE_ANIMATOR_ID(ECORE_ANIMATOR_SUB_ID_TIMELINE_CONSTRUCTOR), _animator_timeline_constructor), - EO_OP_FUNC_SENTINEL - }; - - eo_class_funcs_set(klass, func_desc); -} - -static const Eo_Op_Description op_desc[] = { - EO_OP_DESCRIPTION(ECORE_ANIMATOR_SUB_ID_CONSTRUCTOR, "Add an animator to call func at every animation tick during main loop execution."), - EO_OP_DESCRIPTION(ECORE_ANIMATOR_SUB_ID_TIMELINE_CONSTRUCTOR, "Add an animator that runs for a limited time"), - EO_OP_DESCRIPTION_SENTINEL -}; - -static const Eo_Class_Description class_desc = { - EO_VERSION, - MY_CLASS_NAME, - EO_CLASS_TYPE_REGULAR, - EO_CLASS_DESCRIPTION_OPS(&ECORE_ANIMATOR_BASE_ID, op_desc, ECORE_ANIMATOR_SUB_ID_LAST), - NULL, - sizeof(Ecore_Animator_Private_Data), - _class_constructor, - NULL -}; - -EO_DEFINE_CLASS(ecore_animator_class_get, &class_desc, EO_BASE_CLASS, NULL) +#include "ecore_animator.eo.c" \ No newline at end of file diff --git a/src/lib/ecore/ecore_animator.eo b/src/lib/ecore/ecore_animator.eo new file mode 100644 index 0000000..37301f9 --- /dev/null +++ b/src/lib/ecore/ecore_animator.eo @@ -0,0 +1,27 @@ +class Ecore_Animator (Eo_Base) +{ + eo_prefix: ecore_animator; + constructors { + timeline_constructor { + /*@ Contructor. */ + params { + @in double runtime; + @in Ecore_Timeline_Cb func; + @in const void *data; + } + } + constructor { + /*@ Contructor. */ + params { + @in Ecore_Task_Cb func; + @in const void *data; + } + } + } + implements { + Eo_Base::constructor; + Eo_Base::destructor; + Eo_Base::event_freeze; + Eo_Base::event_thaw; + } +} \ No newline at end of file diff --git a/src/lib/ecore/ecore_timer.eo b/src/lib/ecore/ecore_timer.eo index 720867e..c0173b4 100644 --- a/src/lib/ecore/ecore_timer.eo +++ b/src/lib/ecore/ecore_timer.eo @@ -53,6 +53,7 @@ class Ecore_Timer (Eo_Base) Eo_Base::constructor; Eo_Base::destructor; Eo_Base::event_freeze; + Eo_Base::event_freeze::get; Eo_Base::event_thaw; } } \ No newline at end of file --