kuuko pushed a commit to branch master. http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=ba9f7290944beb2ccfcabf9664e5bc0c2362a335
commit ba9f7290944beb2ccfcabf9664e5bc0c2362a335 Author: Kai Huuhko <kai.huu...@gmail.com> Date: Sat Nov 16 09:00:29 2013 +0200 Ecore: Add AnimatorTimeline. --- efl/ecore/efl.ecore_animator.pxi | 27 +++++++++++++++++++++++++++ include/efl.ecore.pxd | 2 ++ 2 files changed, 29 insertions(+) diff --git a/efl/ecore/efl.ecore_animator.pxi b/efl/ecore/efl.ecore_animator.pxi index 0888ae0..b2decfa 100644 --- a/efl/ecore/efl.ecore_animator.pxi +++ b/efl/ecore/efl.ecore_animator.pxi @@ -72,6 +72,33 @@ cdef class Animator(Eo): "Alias for delete()." self.delete() +cdef Eina_Bool _ecore_timeline_cb(void *data, double pos) with gil: + assert data != NULL + cdef: + AnimatorTimeline obj = <AnimatorTimeline>data + bint ret = False + + try: + ret = obj.func(pos, *obj.args, **obj.kargs) + except: + traceback.print_exc() + + if not ret: + obj.delete() + + return ret + +cdef class AnimatorTimeline(Animator): + def __init__(self, func, double runtime, *args, **kargs): + if not callable(func): + raise TypeError("Parameter 'func' must be callable") + self.func = func + self.args = args + self.kargs = kargs + self._set_obj(ecore_animator_timeline_add(runtime, _ecore_timeline_cb, <void *>self)) + + cpdef bint _task_exec(self) except *: + return self.func(*self.args, **self.kargs) def animator_add(func, *args, **kargs): """ diff --git a/include/efl.ecore.pxd b/include/efl.ecore.pxd index 0cacd4c..cf76a02 100644 --- a/include/efl.ecore.pxd +++ b/include/efl.ecore.pxd @@ -84,6 +84,7 @@ cdef extern from "Ecore.h": ctypedef Eina_Bool (*Ecore_Event_Handler_Cb)(void *data, int type, void *event) ctypedef void (*Ecore_End_Cb)(void *user_data, void *func_data) ctypedef void (*Ecore_Exe_Cb)(void *data, const_Ecore_Exe *exe) + ctypedef Eina_Bool (*Ecore_Timeline_Cb)(void *data, double pos) #################################################################### # Functions @@ -102,6 +103,7 @@ cdef extern from "Ecore.h": double ecore_loop_time_get() Ecore_Animator *ecore_animator_add(Ecore_Task_Cb func, void *data) + Ecore_Animator *ecore_animator_timeline_add(double runtime, Ecore_Timeline_Cb func, void *data) void *ecore_animator_del(Ecore_Animator *animator) void ecore_animator_frametime_set(double frametime) double ecore_animator_frametime_get() --