Ecore: Add AnimatorTimeline.

This commit is contained in:
Kai Huuhko 2013-11-16 09:00:29 +02:00
parent aa96c353c3
commit ba9f729094
2 changed files with 29 additions and 0 deletions

View File

@ -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):
"""

View File

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