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()

-- 


Reply via email to