Ecore.Animator is no more an Eo object in C :(

#TheWhiteRabbitIsDead
This commit is contained in:
Davide Andreoli 2016-08-01 16:50:57 +02:00
parent 5680c76a49
commit 8f23c26d89
3 changed files with 36 additions and 10 deletions

View File

@ -255,8 +255,9 @@ import atexit
cdef Eina_Bool _ecore_task_cb(void *data) with gil:
cdef Eo obj = <Eo>data
cdef Eina_Bool ret
cdef:
Eo obj = <Eo>data
Eina_Bool ret
try:
ret = obj._task_exec()

View File

@ -60,27 +60,44 @@ cdef class Animator(Eo):
self.func = func
self.args = args
self.kargs = kargs
self._set_obj(ecore_animator_add(_ecore_task_cb, <void *>self))
# From efl 1.18 animators are no more Eo objects in C, thus
# we cannot use Eo.obj and _set_obj() anymore :(
# self._set_obj(ecore_animator_add(_ecore_task_cb, <void *>self))
self.obj2 = ecore_animator_add(_ecore_task_cb, <void *>self)
Py_INCREF(self)
def __str__(self):
return "%s Animator(func=%s, args=%s, kargs=%s)" % (Eo.__repr__(self),
self.func, self.args, self.kargs)
return "Animator(obj=%#x, func=%s, args=%s, kargs=%s)" % (
<uintptr_t>self.obj2, self.func, self.args, self.kargs)
def __repr__(self):
return "%s Animator(func=%s, args=%s, kargs=%s)" % (Eo.__repr__(self),
self.func, self.args, self.kargs)
return "Animator(obj=%#x, func=%s, args=%s, kargs=%s)" % (
<uintptr_t>self.obj2, self.func, self.args, self.kargs)
cpdef bint _task_exec(self) except *:
return self.func(*self.args, **self.kargs)
def is_deleted(self):
"""Check if the object has been deleted thus leaving the object shallow.
:return: True if the object has been deleted yet, False otherwise.
:rtype: bool
"""
return bool(self.obj2 == NULL)
def delete(self):
"""Stop callback emission and free internal resources."""
ecore_animator_del(self.obj)
ecore_animator_del(self.obj2)
self.obj2 = NULL
Py_DECREF(self)
def stop(self):
"""Alias for delete()."""
self.delete()
cdef Eina_Bool _ecore_timeline_cb(void *data, double pos) with gil:
assert data != NULL
cdef:
@ -146,11 +163,17 @@ cdef class AnimatorTimeline(Animator):
self.func = func
self.args = args
self.kargs = kargs
self._set_obj(ecore_animator_timeline_add(runtime, _ecore_timeline_cb, <void *>self))
# From efl 1.18 animators are no more Eo objects in C, thus
# we cannot use Eo.obj and _set_obj() anymore :(
# self._set_obj(ecore_animator_timeline_add(runtime, _ecore_timeline_cb, <void *>self))
self.obj2 = ecore_animator_timeline_add(runtime, _ecore_timeline_cb, <void *>self)
Py_INCREF(self)
cpdef bint _task_exec(self) except *:
return self.func(*self.args, **self.kargs)
def animator_add(func, *args, **kargs):
"""Animator factory, for C-api compatibility.

View File

@ -107,7 +107,7 @@ cdef extern from "Ecore.h":
# Basic Types
#
ctypedef cEo Ecore_Timer
ctypedef cEo Ecore_Animator
ctypedef struct Ecore_Animator
ctypedef cEo Ecore_Poller
ctypedef cEo Ecore_Idler
ctypedef cEo Ecore_Idle_Enterer
@ -307,6 +307,8 @@ cdef class Animator(Eo):
cdef readonly tuple args
cdef readonly dict kargs
cpdef bint _task_exec(self) except *
# we cannot use Eo.obj here because animators are no more eo objects in C
cdef Ecore_Animator *obj2
cdef class Poller(Eo):