rreilink / pylvgl

Python bindings for the LittlevGL graphics library
BSD 2-Clause "Simplified" License
26 stars 13 forks source link

Support for all methods of all objects #6

Open rreilink opened 5 years ago

rreilink commented 5 years ago

Currently, some methods of objects are not instantiated because the data type is not yet supported; full support for all methods is desired.

AGlass0fMilk commented 5 years ago

@rreilink Can you give specific data types/methods that aren't supported? It's not very clear from the code/output.

From my searching, the "unimplemented" data types are:

const void*
lv_spinbox_value_changed_cb_t
lv_color_t
const lv_btnm_ctrl_t*
char*
void cb(lv_obj_t *)*
lv_point_t*
lv_chart_series_t*
lv_signal_cb_t
lv_area_t*
const lv_point_t*
const char**
lv_point_t
const lv_color_t*
lv_design_cb_t
lv_event_cb_t
void*
lv_event_t
lv_fit_t
lv_disp_t*

And the unimplemented functions are:

$ grep -e "not implemented" lvglmodule.c | awk '{ print $4}'
lv_obj_set_event_cb:
lv_obj_send_event:
lv_obj_set_signal_cb:
lv_obj_send_signal:
lv_obj_set_design_cb:
lv_obj_animate:
lv_obj_get_disp:
lv_obj_get_coords:
lv_obj_get_signal_func:
lv_obj_get_design_func:
lv_obj_get_group:
lv_cont_set_fit4:
lv_cont_set_fit2:
lv_cont_set_fit:
lv_cont_get_fit_left:
lv_cont_get_fit_right:
lv_cont_get_fit_top:
lv_cont_get_fit_bottom:
lv_imgbtn_set_src:
lv_imgbtn_get_src:
lv_img_set_src:
lv_img_get_src:
lv_line_set_points:
lv_page_set_scrl_fit4:
lv_page_set_scrl_fit2:
lv_page_set_scrl_fit:
lv_page_get_scrl_fit_left:
lv_page_get_scrl_fit_right:
lv_page_get_scrl_get_fit_top:
lv_page_get_scrl_fit_bottom:
lv_chart_add_series:
lv_chart_clear_serie:
lv_chart_init_points:
lv_chart_set_points:
lv_chart_set_next:
lv_btnm_set_map:
lv_btnm_set_ctrl_map:
lv_btnm_get_map:
lv_ddlist_set_fit:
lv_ddlist_get_selected_str:
lv_roller_set_hor_fit:
lv_canvas_set_buffer:
lv_canvas_set_px:
lv_canvas_get_px:
lv_canvas_copy_buf:
lv_canvas_mult_buf:
lv_canvas_draw_circle:
lv_canvas_draw_line:
lv_canvas_draw_triangle:
lv_canvas_draw_rect:
lv_canvas_draw_polygon:
lv_canvas_fill_polygon:
lv_canvas_boundary_fill4:
lv_canvas_flood_fill:
lv_win_add_btn:
lv_win_close_event:
lv_tileview_set_valid_positions:
lv_mbox_add_btns:
lv_gauge_set_needle_count:
lv_spinbox_set_value_changed_cb:
AGlass0fMilk commented 5 years ago

@rreilink I just pulled the changes you made over the weekend into master. So the list above is obviously outdated. Thanks for supporting this!

rreilink commented 5 years ago

Yes, currently arrays and similar and callbacks are the main (if not only) missing data types

AGlass0fMilk commented 5 years ago

Can you point me to some resources that explain the process for developing python bindings like this?

From the code I have bit of an understanding but I haven’t done this before so I’m not sure where to start.

rreilink commented 5 years ago

I am afraid the way how the code works in general is still to be documented (shame). I've created issue #8 , and I think it makes sense to work on that first (unless you are currently facing roadblocks for the GUI, just let me know in that case). Anyway, these are some points to get started:

The basics of creating Python modules are given here: Python/C API and Extending and Embedding the Python Interpreter

The code is generated from the template lvglmodule_template.c. However, to skip the binding generation step, I usually work by developing a specific feature in the generated code lvglmodule.c, and then generalizing it to the general case and implementing it in the template (obviously taking care not to regenerate the modified file).