Eolian: WIP
This commit is contained in:
parent
0c930094cb
commit
c18d8880a0
|
@ -131,7 +131,7 @@
|
|||
#./elm_app_server.eo
|
||||
#./elm_progressbar.eo
|
||||
#./elm_atspi_app_object.eo
|
||||
#./elm_bg.eo
|
||||
./elm_bg.eo
|
||||
#./elm_photo.eo
|
||||
#./elm_bubble.eo
|
||||
#./elm_interface_scrollable.eo
|
||||
|
@ -141,10 +141,10 @@
|
|||
#./elm_flip.eo
|
||||
#./elm_video.eo
|
||||
#./elm_gengrid_pan.eo
|
||||
#./elm_image.eo
|
||||
./elm_image.eo
|
||||
#./elm_calendar.eo
|
||||
#./elm_naviframe.eo
|
||||
#./elm_layout.eo
|
||||
./elm_layout.eo
|
||||
#./elm_map_pan.eo
|
||||
#./elm_genlist_pan.eo
|
||||
#./elm_interface_atspi_component.eo
|
||||
|
|
|
@ -208,7 +208,7 @@ cdef Eina_Bool _py_efl_eo_event_cb(
|
|||
bint ret
|
||||
_Eo o
|
||||
EventDesc py_ev_desc
|
||||
#EventInfo py_ev_info_obj
|
||||
# EventStruct py_ev_info_obj
|
||||
|
||||
func = <object>data
|
||||
o = object_from_instance(obj)
|
||||
|
@ -216,21 +216,22 @@ cdef Eina_Bool _py_efl_eo_event_cb(
|
|||
py_ev_desc = EventDesc.__new__(EventDesc)
|
||||
py_ev_desc.desc = desc
|
||||
|
||||
#tmp1 = eina_hash_find(o.event_conv_to_py_mapping, desc)
|
||||
#tmp2 = eina_hash_find(o.event_conv_to_c_mapping, desc)
|
||||
#if tmp1 == NULL:
|
||||
# py_ev_info_obj = None
|
||||
#else:
|
||||
#py_ev_info_cls = <object>tmp
|
||||
# use a generic class and set some conv func??
|
||||
#py_ev_info_obj = py_ev_info_cls.__new__(py_ev_info_cls)
|
||||
#py_ev_info_obj = EventInfo.__new__(EventInfo)
|
||||
#py_ev_info_obj.event_info = event_info
|
||||
#py_ev_info_obj.conv_to_python = tmp1
|
||||
#py_ev_info_obj.conv_to_c = tmp2
|
||||
# tmp1 = eina_hash_find(o.event_conv_mapping, desc)
|
||||
# tmp2 = eina_hash_find(o.event_conv_to_c_mapping, desc)
|
||||
# if tmp1 == NULL:
|
||||
# py_ev_info_obj = None
|
||||
# else:
|
||||
# py_ev_info_cls = <object>tmp1
|
||||
# use a generic class and set some conv func??
|
||||
# py_ev_info_obj = py_ev_info_cls.__new__(py_ev_info_cls)
|
||||
# py_ev_info_obj = EventStruct.__new__(EventStruct)
|
||||
# py_ev_info_obj.event_info = event_info
|
||||
# py_ev_info_obj.conv_to_python_func = tmp1
|
||||
# py_ev_info_obj.conv_to_c = tmp2
|
||||
|
||||
#ret = func(py_ev_desc, py_ev_info_obj) # o as first param?
|
||||
#return ret
|
||||
# ret = func(py_ev_desc, py_ev_info_obj) # o as first param?
|
||||
ret = func(py_ev_desc, None)
|
||||
return ret
|
||||
|
||||
|
||||
cdef class EventDesc(object):
|
||||
|
@ -253,18 +254,18 @@ cdef class EventDesc(object):
|
|||
return bool(self.desc.unfreezable)
|
||||
|
||||
|
||||
#cdef class EventStruct(object):
|
||||
# cdef class EventStruct(object):
|
||||
|
||||
# cdef:
|
||||
# void *event_info
|
||||
|
||||
# void *conv_to_python_func
|
||||
|
||||
# property value:
|
||||
# def __get__(self):
|
||||
# return self.conv_to_python(self.event_info)
|
||||
# return self.conv_to_python_func(self.event_info)
|
||||
|
||||
# def __set__(self, val):
|
||||
# self.event_info = self.conv_to_c(val)
|
||||
# def __set__(self, val):
|
||||
# self.event_info = self.conv_to_c(val)
|
||||
|
||||
|
||||
cdef class _Eo(object):
|
||||
|
@ -390,10 +391,13 @@ cdef class _Eo(object):
|
|||
if desc is NULL:
|
||||
raise RuntimeError("Unknown Eo event name: %s" % (event_name))
|
||||
|
||||
eo_event_callback_add(
|
||||
<Eo_Event_Description *>desc,
|
||||
_py_efl_eo_event_cb,
|
||||
<const void *>func
|
||||
eo_do(
|
||||
self.obj,
|
||||
eo_event_callback_add(
|
||||
<Eo_Event_Description *>desc,
|
||||
_py_efl_eo_event_cb,
|
||||
<const void *>func
|
||||
)
|
||||
)
|
||||
Py_INCREF(func)
|
||||
|
||||
|
@ -411,9 +415,12 @@ cdef class _Eo(object):
|
|||
if desc is NULL:
|
||||
raise RuntimeError("Unknown Eo event name: %s" % (event_name))
|
||||
|
||||
eo_event_callback_del(
|
||||
<Eo_Event_Description *>desc,
|
||||
_py_efl_eo_event_cb,
|
||||
<const void *>func
|
||||
eo_do(
|
||||
self.obj,
|
||||
eo_event_callback_del(
|
||||
<Eo_Event_Description *>desc,
|
||||
_py_efl_eo_event_cb,
|
||||
<const void *>func
|
||||
)
|
||||
)
|
||||
Py_DECREF(func)
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/python
|
||||
import logging
|
||||
efllog = logging.getLogger("efl")
|
||||
efllog.addHandler(logging.StreamHandler())
|
||||
|
||||
import sys
|
||||
if len(sys.argv) < 2:
|
||||
sys.exit("Usage: %s <file1> [file2] ... [fileN]".format(sys.argv[0]))
|
||||
|
||||
w, h = 600, 600
|
||||
|
||||
from efl import elementary as elm
|
||||
elm.init()
|
||||
|
||||
win = elm.Win("pydemo", 1)
|
||||
win.title = "Python demo"
|
||||
win.autodel = False
|
||||
win.size = (w, h)
|
||||
win.event_callback_add("delete,request", lambda x, y: elm.exit())
|
||||
|
||||
bg = elm.Bg(win)
|
||||
bg.size_hint_weight = (1.0, 1.0)
|
||||
win.resize_object_add(bg)
|
||||
bg.show()
|
||||
|
||||
img = elm.Image(win)
|
||||
img.size_hint_weight = (1.0, 1.0)
|
||||
img.smooth = True
|
||||
img.aspect_fixed = True
|
||||
img.file = sys.argv[1], ""
|
||||
img.position = (0, 0)
|
||||
img.size = (w, h)
|
||||
|
||||
file_idx = 1
|
||||
def _mouse_down_cb(*args):
|
||||
global file_idx
|
||||
file_idx += 1
|
||||
if file_idx > len(sys.argv):
|
||||
file_idx = 1
|
||||
global img
|
||||
img.file = sys.argv[file_idx], ""
|
||||
return True
|
||||
|
||||
img.event_callback_add("mouse,down", _mouse_down_cb)
|
||||
img.show()
|
||||
|
||||
win.show()
|
||||
elm.run()
|
||||
elm.shutdown()
|
|
@ -57,7 +57,8 @@ builtin_types = ( # automatically converted by cython
|
|||
#"bool",
|
||||
#"void",
|
||||
"Evas_Coord",
|
||||
"Evas_Real"
|
||||
"Evas_Real",
|
||||
"Elm_Win_Type"
|
||||
)
|
||||
|
||||
complex_types = (
|
||||
|
@ -67,9 +68,9 @@ complex_types = (
|
|||
mapping_in = {
|
||||
# c_type: pyx_type
|
||||
"bool": "bint",
|
||||
#"char": "",
|
||||
"Evas_Object": "_Eo_Base",
|
||||
"Eo": "_Eo_Base",
|
||||
"char": None,
|
||||
"Evas_Object": "_Eo",
|
||||
"Eo": "_Eo",
|
||||
}
|
||||
|
||||
conversions_in_python = {
|
||||
|
@ -88,8 +89,8 @@ mapping_out = {
|
|||
"bool": "bint",
|
||||
"char": "unicode",
|
||||
#"Elm_Object_Item": "_ObjectItem",
|
||||
"Evas_Object": "_Eo_Base",
|
||||
"Eo": "_Eo_Base",
|
||||
"Evas_Object": "_Eo",
|
||||
"Eo": "_Eo",
|
||||
}
|
||||
|
||||
conversions_out = {
|
||||
|
@ -161,7 +162,7 @@ def convert_in_param(tp, param_name, is_nonull=None):
|
|||
conv_t = mapping_in[key]
|
||||
if conv_t is None:
|
||||
# conv_t = ""
|
||||
conv_t = c_type
|
||||
conv_t = ""
|
||||
|
||||
if not is_nonull:
|
||||
key = "<{0}>{1} if {1} is not None else NULL".format(c_type, param_name)
|
||||
|
|
|
@ -12,7 +12,7 @@ formatter = logging.Formatter("%(name)s %(levelname)s: %(message)s")
|
|||
handler.setFormatter(formatter)
|
||||
log = logging.getLogger("eolian")
|
||||
log.addHandler(handler)
|
||||
log_level = logging.ERROR
|
||||
log_level = logging.WARN
|
||||
log.setLevel(log_level)
|
||||
|
||||
import eolian
|
||||
|
@ -380,7 +380,7 @@ class Function(object):
|
|||
gen.write("cdef:")
|
||||
gen.indent()
|
||||
for i, (t, n) in enumerate(expand_params):
|
||||
gen.write("%s %s = tmp_prm%d" % (t, n, i))
|
||||
gen.write("%s = tmp_prm%d" % (" ".join((t, n)).strip(), i))
|
||||
|
||||
gen.dedent()
|
||||
|
||||
|
@ -491,7 +491,7 @@ class Constructor(object):
|
|||
def generate(self, gen):
|
||||
cls_get = self.clsgetter
|
||||
|
||||
header_params = [("_Eo", "parent=None")]
|
||||
header_params = []
|
||||
c_ctors = []
|
||||
|
||||
for ctor in self.ctors:
|
||||
|
@ -522,6 +522,8 @@ class Constructor(object):
|
|||
c_call_params = ", ".join(c_call_params)
|
||||
c_ctors.append((c_name, c_call_params))
|
||||
|
||||
header_params.append(("_Eo", "parent=None"))
|
||||
|
||||
gen.write("def __init__(self, %s):" % (", ".join([" ".join((t, n)).strip() for t, n in header_params])))
|
||||
gen.indent()
|
||||
|
||||
|
@ -698,9 +700,10 @@ class Class(object):
|
|||
try:
|
||||
o.generate(gen)
|
||||
except EolianTypeError:
|
||||
log.info("Skipping %r because of unknown type", o)
|
||||
raise
|
||||
#log.error("Skipping %s constructor because of unknown type", self.full_c_name)
|
||||
except Exception:
|
||||
log.exception("Error while generating %r", o)
|
||||
log.exception("Error while generating %s constructor", self.full_c_name)
|
||||
|
||||
for o in (
|
||||
list(self.methods) +
|
||||
|
@ -738,7 +741,8 @@ class Class(object):
|
|||
imports.append((lib_name, "_" + name))
|
||||
|
||||
for l, n in imports:
|
||||
l2 = PY_EFL_TOP_LEVEL_PACKAGE + "." + l.lower()
|
||||
#l2 = PY_EFL_TOP_LEVEL_PACKAGE + "." + l.lower()
|
||||
l2 = l.lower()
|
||||
gen.write("from %s import %s as %s" % (l2, n, l.replace(".", "_") + n))
|
||||
|
||||
gen.write()
|
||||
|
@ -747,10 +751,10 @@ class Class(object):
|
|||
gen.write("class %s(%s):" % (self.name, ", ".join(inherits)))
|
||||
gen.indent()
|
||||
|
||||
gen.write("def __init__(self, parent=None, *args, **kwargs):")
|
||||
gen.write("def __init__(self, *args, **kwargs):")
|
||||
gen.indent()
|
||||
gen.write(
|
||||
"_%s.__init__(self, parent=None, *args, **kwargs)" % (
|
||||
"_%s.__init__(self, *args, **kwargs)" % (
|
||||
self.name
|
||||
)
|
||||
)
|
||||
|
|
|
@ -101,6 +101,7 @@ cdef extern from "Eina.h":
|
|||
ctypedef _Eina_Inlist Eina_Inlist
|
||||
|
||||
ctypedef struct Eina_Accessor
|
||||
ctypedef struct Eina_File
|
||||
|
||||
####################################################################
|
||||
# Other typedefs
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
from libc.stdint cimport uintptr_t
|
||||
|
||||
from efl.evas cimport Eina_List, Eina_Bool
|
||||
from efl.eina cimport Eina_File, Eina_List, Eina_Bool
|
||||
from efl.evas cimport Evas_Object, Evas_Font_Size, Evas_Coord
|
||||
from efl.evas cimport Evas_Event_Flags, Evas_Display_Mode
|
||||
from efl.evas.enums cimport Evas_Callback_Type
|
||||
|
@ -27,7 +27,7 @@ from efl.elementary.enums cimport Elm_Sys_Notify_Closed_Reason, \
|
|||
Elm_Illume_Command, Elm_Win_Keyboard_Mode, \
|
||||
Elm_Win_Indicator_Opacity_Mode, Elm_Win_Indicator_Mode, \
|
||||
Elm_Scroller_Movement_Block, Elm_Scroller_Policy, \
|
||||
Elm_Scroller_Single_Direction
|
||||
Elm_Scroller_Single_Direction, Elm_Bg_Option, Elm_Image_Orient
|
||||
|
||||
cdef extern from "time.h":
|
||||
struct tm:
|
||||
|
@ -179,4 +179,6 @@ cdef extern from "Elementary.h":
|
|||
ctypedef void (*Elm_Interface_Scrollable_Min_Limit_Cb)(Evas_Object *obj, Eina_Bool w, Eina_Bool h)
|
||||
ctypedef void (*Elm_Interface_Scrollable_Resize_Cb)(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
|
||||
|
||||
ctypedef struct Elm_Layout_Part_Alias_Description
|
||||
|
||||
cdef int PY_EFL_ELM_LOG_DOMAIN
|
||||
|
|
|
@ -31,6 +31,8 @@ cdef:
|
|||
#_add_obj(self, Eo_Class *klass, cEo *parent)
|
||||
|
||||
|
||||
object (*conv_to_python)(void *c_ei)
|
||||
|
||||
int PY_REFCOUNT(object o)
|
||||
|
||||
void _object_mapping_register(char *name, object cls) except *
|
||||
|
|
2
setup.py
2
setup.py
|
@ -323,7 +323,7 @@ if set(("build", "build_ext", "install", "bdist", "sdist")) & set(sys.argv):
|
|||
output_path = "/".join((PY_EFL_TOP_LEVEL_PACKAGE, library_name))
|
||||
generate_pxis(library_name, header_name, output_path)
|
||||
efl_ext = Extension(
|
||||
".".join((library_name, "__init__")), ["/".join((output_path, "__init__" + module_suffix))],
|
||||
"efl", ["/".join((output_path, "efl.efl" + module_suffix))],
|
||||
define_macros=[
|
||||
('EFL_BETA_API_SUPPORT', 1),
|
||||
('EFL_EO_API_SUPPORT', 1),
|
||||
|
|
Loading…
Reference in New Issue