From 125b72f010bb879d4f0f0198160e0d19b4ba2a12 Mon Sep 17 00:00:00 2001 From: Lyon <88232613+pikasTech@users.noreply.github.com> Date: Mon, 29 Aug 2022 22:00:10 +0800 Subject: [PATCH] chore: add binding for PikaScript. (#3636) --- env_support/pikascript/README.md | 11 + env_support/pikascript/pika_lv_point_t.c | 10 + env_support/pikascript/pika_lv_timer_t.c | 38 ++ env_support/pikascript/pika_lv_wegit.c | 359 ++++++++++++++++++ env_support/pikascript/pika_lvgl.c | 194 ++++++++++ env_support/pikascript/pika_lvgl.pyi | 263 +++++++++++++ env_support/pikascript/pika_lvgl_indev_t.c | 12 + env_support/pikascript/pika_lvgl_lv_event.c | 18 + env_support/pikascript/pika_lvgl_lv_obj.c | 110 ++++++ env_support/pikascript/pika_lvgl_lv_style_t.c | 64 ++++ 10 files changed, 1079 insertions(+) create mode 100644 env_support/pikascript/README.md create mode 100644 env_support/pikascript/pika_lv_point_t.c create mode 100644 env_support/pikascript/pika_lv_timer_t.c create mode 100644 env_support/pikascript/pika_lv_wegit.c create mode 100644 env_support/pikascript/pika_lvgl.c create mode 100644 env_support/pikascript/pika_lvgl.pyi create mode 100644 env_support/pikascript/pika_lvgl_indev_t.c create mode 100644 env_support/pikascript/pika_lvgl_lv_event.c create mode 100644 env_support/pikascript/pika_lvgl_lv_obj.c create mode 100644 env_support/pikascript/pika_lvgl_lv_style_t.c diff --git a/env_support/pikascript/README.md b/env_support/pikascript/README.md new file mode 100644 index 000000000..ea8b31aa7 --- /dev/null +++ b/env_support/pikascript/README.md @@ -0,0 +1,11 @@ +# PikaScript Binding for LVGL + +[PikaScript](https://github.com/pikasTech/pikascript) is an ultralightweight python engine that can run with 4KB of RAM and 32KB of Flash (such as STM32G030C8 and STM32F103C8), and is very easy to deploy and expand. + +More details to see: [PikaScript and lvgl: Make Python Lighter, Easier and Smarter](https://blog.lvgl.io/2022-08-24/pikascript-and-lvgl) + +The available Python APIs are in the `pika_lvgl.pyi`, and you need copy the `pika_lvgl.pyi` to the root path of pikascript, then `import pika_lvgl` in `main.py`. + +The available simulation project on windows: https://github.com/pikasTech/lv_pikascript + +More document about PikaScript: https://pikadoc.readthedocs.io/en/latest/index.html \ No newline at end of file diff --git a/env_support/pikascript/pika_lv_point_t.c b/env_support/pikascript/pika_lv_point_t.c new file mode 100644 index 000000000..7b58831e0 --- /dev/null +++ b/env_support/pikascript/pika_lv_point_t.c @@ -0,0 +1,10 @@ +#include "lvgl.h" +#ifdef PIKASCRIPT +#include "pika_lvgl_point_t.h" + +void pika_lvgl_point_t___init__(PikaObj* self) { + lv_point_t lv_point = {0}; + args_setStruct(self->list, "lv_point_struct", lv_point); + obj_setPtr(self, "lv_point", args_getStruct(self->list, "lv_point_struct")); +} +#endif diff --git a/env_support/pikascript/pika_lv_timer_t.c b/env_support/pikascript/pika_lv_timer_t.c new file mode 100644 index 000000000..03e38f53c --- /dev/null +++ b/env_support/pikascript/pika_lv_timer_t.c @@ -0,0 +1,38 @@ +#include "lvgl.h" +#ifdef PIKASCRIPT +#include "pika_lvgl_lv_timer_t.h" + +PikaEventListener* g_pika_lv_timer_event_listener; + +void __pika_timer_cb(lv_timer_t* timer) { + PikaObj* eventHandleObj = pks_eventLisener_getEventHandleObj( + g_pika_lv_timer_event_listener, (uint32_t)timer); + obj_newDirectObj(eventHandleObj, "timer", New_pika_lvgl_lv_timer_t); + obj_setPtr(obj_getPtr(eventHandleObj, "timer"), "lv_timer", timer); + obj_run(eventHandleObj, "eventCallBack(timer)"); +} + +void pika_lvgl_lv_timer_t_set_period(PikaObj* self, int period) { + lv_timer_t* lv_timer = obj_getPtr(self, "lv_timer"); + lv_timer_set_period(lv_timer, period); +} + +void pika_lvgl_lv_timer_t_set_cb(PikaObj* self, Arg* cb) { + lv_timer_t* lv_timer = obj_getPtr(self, "lv_timer"); + lv_timer_set_cb(lv_timer, __pika_timer_cb); + + obj_setArg(self, "eventCallBack", cb); + /* init event_listener for the first time */ + if (NULL == g_pika_lv_timer_event_listener) { + pks_eventLisener_init(&g_pika_lv_timer_event_listener); + } + pks_eventLicener_registEvent(g_pika_lv_timer_event_listener, + (uint32_t)lv_timer, self); + +} + +void pika_lvgl_lv_timer_t__del(PikaObj* self) { + lv_timer_t* lv_timer = obj_getPtr(self, "lv_timer"); + lv_timer_del(lv_timer); +} +#endif diff --git a/env_support/pikascript/pika_lv_wegit.c b/env_support/pikascript/pika_lv_wegit.c new file mode 100644 index 000000000..d5380c64b --- /dev/null +++ b/env_support/pikascript/pika_lv_wegit.c @@ -0,0 +1,359 @@ +#include "lvgl.h" +#ifdef PIKASCRIPT +#include "BaseObj.h" +#include "pika_lvgl.h" +#include "pika_lvgl_arc.h" +#include "pika_lvgl_bar.h" +#include "pika_lvgl_btn.h" +#include "pika_lvgl_checkbox.h" +#include "pika_lvgl_dropdown.h" +#include "pika_lvgl_label.h" +#include "pika_lvgl_lv_obj.h" +#include "pika_lvgl_roller.h" +#include "pika_lvgl_slider.h" +#include "pika_lvgl_switch.h" +#include "pika_lvgl_table.h" +#include "pika_lvgl_textarea.h" + +void pika_lvgl_arc___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_arc_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); + obj_setInt(self, "MODE_NORMAL", LV_ARC_MODE_NORMAL); + obj_setInt(self, "MODE_SYMMETRICAL", LV_ARC_MODE_SYMMETRICAL); + obj_setInt(self, "MODE_REVERSE", LV_ARC_MODE_REVERSE); +} + +void pika_lvgl_arc_set_end_angle(PikaObj* self, int angle) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_end_angle(lv_obj, angle); +} + +void pika_lvgl_arc_set_bg_angles(PikaObj* self, int start, int end) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_bg_angles(lv_obj, start, end); +} + +void pika_lvgl_arc_set_angles(PikaObj* self, int start, int end) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_angles(lv_obj, start, end); +} + +int pika_lvgl_arc_get_angle_end(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_arc_get_angle_end(lv_obj); +} +int pika_lvgl_arc_get_angle_start(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_arc_get_angle_start(lv_obj); +} +int pika_lvgl_arc_get_bg_angle_end(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_arc_get_bg_angle_end(lv_obj); +} +int pika_lvgl_arc_get_bg_angle_start(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_arc_get_bg_angle_start(lv_obj); +} +int pika_lvgl_arc_get_max_value(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_arc_get_max_value(lv_obj); +} +int pika_lvgl_arc_get_min_value(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_arc_get_min_value(lv_obj); +} +int pika_lvgl_arc_get_mode(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_arc_get_mode(lv_obj); +} +// int pika_lvgl_arc_get_rotation(PikaObj *self){ +// lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); +// return lv_arc_get_rotation(lv_obj); +// } +int pika_lvgl_arc_get_value(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_arc_get_value(lv_obj); +} +void pika_lvgl_arc_set_mode(PikaObj *self, int mode){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_mode(lv_obj, mode); +} +void pika_lvgl_arc_set_range(PikaObj *self, int min, int max){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_range(lv_obj, min, max); +} +void pika_lvgl_arc_set_rotation(PikaObj *self, int rotation){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_rotation(lv_obj, rotation); +} +void pika_lvgl_arc_set_start_angle(PikaObj *self, int start){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_start_angle(lv_obj, start); +} +void pika_lvgl_arc_set_value(PikaObj *self, int value){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_value(lv_obj, value); +} +void pika_lvgl_arc_set_bg_end_angle(PikaObj *self, int angle){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_bg_end_angle(lv_obj, angle); +} +void pika_lvgl_arc_set_bg_start_angle(PikaObj *self, int start){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_bg_start_angle(lv_obj, start); +} + +void pika_lvgl_arc_set_change_rate(PikaObj *self, int rate){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_arc_set_change_rate(lv_obj, rate); +} + +void pika_lvgl_bar___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_bar_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_bar_set_value(PikaObj* self, int value, int anim) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_bar_set_value(lv_obj, value, value); +} + +int pika_lvgl_bar_get_max_value(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_bar_get_max_value(lv_obj); +} +int pika_lvgl_bar_get_min_value(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_bar_get_min_value(lv_obj); +} +int pika_lvgl_bar_get_mode(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_bar_get_mode(lv_obj); +} +int pika_lvgl_bar_get_start_value(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_bar_get_start_value(lv_obj); +} +int pika_lvgl_bar_get_value(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_bar_get_value(lv_obj); +} +void pika_lvgl_bar_set_mode(PikaObj *self, int mode){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_bar_set_mode(lv_obj, mode); +} +void pika_lvgl_bar_set_range(PikaObj *self, int min, int max){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_bar_set_range(lv_obj, min, max); +} +void pika_lvgl_bar_set_start_value(PikaObj *self, int start_value, int anim){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_bar_set_start_value(lv_obj, start_value, anim); +} + +void pika_lvgl_btn___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_btn_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_checkbox___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_checkbox_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_checkbox_set_text(PikaObj* self, char* txt) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_checkbox_set_text(lv_obj, txt); +} + +void pika_lvgl_checkbox_set_text_static(PikaObj *self, char* txt){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_checkbox_set_text_static(lv_obj, txt); +} + +char* pika_lvgl_checkbox_get_text(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_checkbox_get_text(lv_obj); +} + +void pika_lvgl_dropdown___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_dropdown_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_dropdown_set_options(PikaObj* self, char* options) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_set_options(lv_obj, options); +} + +void pika_lvgl_dropdown_add_option(PikaObj *self, char* options, int pos){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_add_option(lv_obj, options, pos); +} +void pika_lvgl_dropdown_clear_options(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_clear_options(lv_obj); +} +void pika_lvgl_dropdown_close(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_close(lv_obj); +} +int pika_lvgl_dropdown_get_dir(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_get_dir(lv_obj); +} +// PikaObj* pika_lvgl_dropdown_get_list(PikaObj *self){ +// lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); +// return obj_getObj(lv_dropdown_get_list(lv_obj)); +// } +int pika_lvgl_dropdown_get_option_cnt(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_get_option_cnt(lv_obj); +} +int pika_lvgl_dropdown_get_option_index(PikaObj *self, char* txt){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_get_option_index(lv_obj, txt); +} +char* pika_lvgl_dropdown_get_options(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_get_options(lv_obj); +} +int pika_lvgl_dropdown_get_selected(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_get_selected(lv_obj); +} +int pika_lvgl_dropdown_get_selected_highlight(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_get_selected_highlight(lv_obj); +} + +char* pika_lvgl_dropdown_get_selected_str(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + obj_setBytes(self, "_buff",NULL, 128); + char* _buff = obj_getBytes(self, "_buff"); + lv_dropdown_get_selected_str(lv_obj, _buff, 128); + return _buff; +} +int pika_lvgl_dropdown_get_symbol(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_get_symbol(lv_obj); +} +char* pika_lvgl_dropdown_get_text(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_get_text(lv_obj); +} +int pika_lvgl_dropdown_is_open(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_dropdown_is_open(lv_obj); +} +void pika_lvgl_dropdown_open(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_open(lv_obj); +} +void pika_lvgl_dropdown_set_dir(PikaObj *self, int dir){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_set_dir(lv_obj, dir); +} +void pika_lvgl_dropdown_set_selected(PikaObj *self, int sel_opt){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_set_selected(lv_obj, sel_opt); +} +void pika_lvgl_dropdown_set_selected_hightlight(PikaObj *self, int en){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_set_selected_highlight(lv_obj, en); +} +void pika_lvgl_dropdown_set_symbol(PikaObj *self, char* symbol){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_set_symbol(lv_obj, symbol); +} +void pika_lvgl_dropdown_set_text(PikaObj *self, char* txt){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_dropdown_set_text(lv_obj, txt); +} + +void pika_lvgl_label___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_label_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_label_set_long_mode(PikaObj* self, int mode) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_label_set_long_mode(lv_obj, mode); +} + +void pika_lvgl_label_set_recolor(PikaObj* self, int en) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_label_set_recolor(lv_obj, en); +} + +void pika_lvgl_label_set_text(PikaObj* self, char* txt) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_label_set_text(lv_obj, txt); +} + +void pika_lvgl_label_set_style_text_align(PikaObj* self, + int value, + int selector) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_set_style_text_align(lv_obj, value, selector); +} + +void pika_lvgl_roller___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_roller_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_roller_set_options(PikaObj* self, char* options, int mode) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_roller_set_options(lv_obj, options, mode); +} + +void pika_lvgl_roller_set_visible_row_count(PikaObj* self, int row_cnt) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_roller_set_visible_row_count(lv_obj, row_cnt); +} + +void pika_lvgl_slider___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_slider_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_switch___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_switch_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_table___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_table_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_table_set_cell_value(PikaObj* self, + int row, + int col, + char* txt) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_table_set_cell_value(lv_obj, row, col, txt); +} + +void pika_lvgl_textarea___init__(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_textarea_create(lv_parent); + obj_setPtr(self, "lv_obj", lv_obj); +} + +void pika_lvgl_textarea_set_one_line(PikaObj* self, int en) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_textarea_set_one_line(lv_obj, en); +} +#endif diff --git a/env_support/pikascript/pika_lvgl.c b/env_support/pikascript/pika_lvgl.c new file mode 100644 index 000000000..9be115117 --- /dev/null +++ b/env_support/pikascript/pika_lvgl.c @@ -0,0 +1,194 @@ +#include "lvgl.h" +#ifdef PIKASCRIPT +#include "pika_lvgl.h" +#include "BaseObj.h" +#include "pika_lvgl_ALIGN.h" +#include "pika_lvgl_ANIM.h" +#include "pika_lvgl_EVENT.h" +#include "pika_lvgl_OPA.h" +#include "pika_lvgl_PALETTE.h" +#include "pika_lvgl_STATE.h" +#include "pika_lvgl_arc.h" +#include "pika_lvgl_lv_color_t.h" +#include "pika_lvgl_lv_obj.h" +#include "pika_lvgl_indev_t.h" +#include "pika_lvgl_lv_timer_t.h" + +PikaObj* pika_lv_event_listener_g; + +void pika_lvgl_STATE___init__(PikaObj* self) { + obj_setInt(self, "DEFAULT", LV_STATE_DEFAULT); + obj_setInt(self, "CHECKED", LV_STATE_CHECKED); + obj_setInt(self, "FOCUSED", LV_STATE_FOCUSED); + obj_setInt(self, "FOCUS_KEY", LV_STATE_FOCUS_KEY); + obj_setInt(self, "EDITED", LV_STATE_EDITED); + obj_setInt(self, "HOVERED", LV_STATE_HOVERED); + obj_setInt(self, "PRESSED", LV_STATE_PRESSED); + obj_setInt(self, "SCROLLED", LV_STATE_SCROLLED); + obj_setInt(self, "DISABLED", LV_STATE_DISABLED); + obj_setInt(self, "USER_1", LV_STATE_USER_1); + obj_setInt(self, "USER_2", LV_STATE_USER_2); + obj_setInt(self, "USER_3", LV_STATE_USER_3); + obj_setInt(self, "USER_4", LV_STATE_USER_4); + obj_setInt(self, "ANY", LV_STATE_ANY); +} + +void pika_lvgl_ANIM___init__(PikaObj* self) { + obj_setInt(self, "ON", LV_ANIM_OFF); + obj_setInt(self, "OFF", LV_ANIM_ON); +} + +void pika_lvgl_ALIGN___init__(PikaObj* self) { + obj_setInt(self, "CENTER", LV_ALIGN_CENTER); + obj_setInt(self, "DEFAULT", LV_ALIGN_DEFAULT); + obj_setInt(self, "TOP_LEFT", LV_ALIGN_TOP_LEFT); + obj_setInt(self, "TOP_MID", LV_ALIGN_TOP_MID); + obj_setInt(self, "TOP_RIGHT", LV_ALIGN_TOP_RIGHT); + obj_setInt(self, "BOTTOM_LEFT", LV_ALIGN_BOTTOM_LEFT); + obj_setInt(self, "BOTTOM_MID", LV_ALIGN_BOTTOM_MID); + obj_setInt(self, "BOTTOM_RIGHT", LV_ALIGN_BOTTOM_RIGHT); + obj_setInt(self, "LEFT_MID", LV_ALIGN_LEFT_MID); + obj_setInt(self, "RIGHT_MID", LV_ALIGN_RIGHT_MID); + obj_setInt(self, "OUT_TOP_LEFT", LV_ALIGN_OUT_TOP_LEFT); + obj_setInt(self, "OUT_TOP_MID", LV_ALIGN_OUT_TOP_MID); + obj_setInt(self, "OUT_TOP_RIGHT", LV_ALIGN_OUT_TOP_RIGHT); + obj_setInt(self, "OUT_BOTTOM_LEFT", LV_ALIGN_OUT_BOTTOM_LEFT); + obj_setInt(self, "OUT_BOTTOM_MID", LV_ALIGN_OUT_BOTTOM_MID); + obj_setInt(self, "OUT_BOTTOM_RIGHT", LV_ALIGN_OUT_BOTTOM_RIGHT); + obj_setInt(self, "OUT_LEFT_TOP", LV_ALIGN_OUT_LEFT_TOP); + obj_setInt(self, "OUT_LEFT_MID", LV_ALIGN_OUT_LEFT_MID); + obj_setInt(self, "OUT_LEFT_BOTTOM", LV_ALIGN_OUT_LEFT_BOTTOM); + obj_setInt(self, "OUT_RIGHT_TOP", LV_ALIGN_OUT_RIGHT_TOP); + obj_setInt(self, "OUT_RIGHT_MID", LV_ALIGN_OUT_RIGHT_MID); + obj_setInt(self, "OUT_RIGHT_BOTTOM", LV_ALIGN_OUT_RIGHT_BOTTOM); +} + +void pika_lvgl_EVENT___init__(PikaObj* self) { + obj_setInt(self, "ALL", LV_EVENT_ALL); + obj_setInt(self, "PRESSED", LV_EVENT_PRESSED); + obj_setInt(self, "PRESSING", LV_EVENT_PRESSING); + obj_setInt(self, "PRESS_LOST", LV_EVENT_PRESS_LOST); + obj_setInt(self, "SHORT_CLICKED", LV_EVENT_SHORT_CLICKED); + obj_setInt(self, "LONG_PRESSED", LV_EVENT_LONG_PRESSED); + obj_setInt(self, "LONG_PRESSED_REPEAT", LV_EVENT_LONG_PRESSED_REPEAT); + obj_setInt(self, "CLICKED", LV_EVENT_CLICKED); + obj_setInt(self, "RELEASED", LV_EVENT_RELEASED); + obj_setInt(self, "SCROLL_BEGIN", LV_EVENT_SCROLL_BEGIN); + obj_setInt(self, "SCROLL_END", LV_EVENT_SCROLL_END); + obj_setInt(self, "SCROLL", LV_EVENT_SCROLL); + obj_setInt(self, "GESTURE", LV_EVENT_GESTURE); + obj_setInt(self, "KEY", LV_EVENT_KEY); + obj_setInt(self, "FOCUSED", LV_EVENT_FOCUSED); + obj_setInt(self, "DEFOCUSED", LV_EVENT_DEFOCUSED); + obj_setInt(self, "LEAVE", LV_EVENT_LEAVE); + obj_setInt(self, "HIT_TEST", LV_EVENT_HIT_TEST); + obj_setInt(self, "COVER_CHECK", LV_EVENT_COVER_CHECK); + obj_setInt(self, "REFR_EXT_DRAW_SIZE", LV_EVENT_REFR_EXT_DRAW_SIZE); + obj_setInt(self, "DRAW_MAIN_BEGIN", LV_EVENT_DRAW_MAIN_BEGIN); + obj_setInt(self, "DRAW_MAIN", LV_EVENT_DRAW_MAIN); + obj_setInt(self, "DRAW_MAIN_END", LV_EVENT_DRAW_MAIN_END); + obj_setInt(self, "DRAW_POST_BEGIN", LV_EVENT_DRAW_POST_BEGIN); + obj_setInt(self, "DRAW_POST", LV_EVENT_DRAW_POST); + obj_setInt(self, "DRAW_POST_END", LV_EVENT_DRAW_POST_END); + obj_setInt(self, "DRAW_PART_BEGIN", LV_EVENT_DRAW_PART_BEGIN); + obj_setInt(self, "DRAW_PART_END", LV_EVENT_DRAW_PART_END); + obj_setInt(self, "VALUE_CHANGED", LV_EVENT_VALUE_CHANGED); + obj_setInt(self, "INSERT", LV_EVENT_INSERT); + obj_setInt(self, "REFRESH", LV_EVENT_REFRESH); + obj_setInt(self, "READY", LV_EVENT_READY); + obj_setInt(self, "CANCEL", LV_EVENT_CANCEL); + obj_setInt(self, "DELETE", LV_EVENT_DELETE); + obj_setInt(self, "CHILD_CHANGED", LV_EVENT_CHILD_CHANGED); + obj_setInt(self, "CHILD_CREATED", LV_EVENT_CHILD_CREATED); + obj_setInt(self, "CHILD_DELETED", LV_EVENT_CHILD_DELETED); + obj_setInt(self, "SCREEN_UNLOAD_START", LV_EVENT_SCREEN_UNLOAD_START); + obj_setInt(self, "SCREEN_LOAD_START", LV_EVENT_SCREEN_LOAD_START); + obj_setInt(self, "SCREEN_LOADED", LV_EVENT_SCREEN_LOADED); + obj_setInt(self, "SCREEN_UNLOADED", LV_EVENT_SCREEN_UNLOADED); + obj_setInt(self, "SIZE_CHANGED", LV_EVENT_SIZE_CHANGED); + obj_setInt(self, "STYLE_CHANGED", LV_EVENT_STYLE_CHANGED); + obj_setInt(self, "LAYOUT_CHANGED", LV_EVENT_LAYOUT_CHANGED); + obj_setInt(self, "GET_SELF_SIZE", LV_EVENT_GET_SELF_SIZE); + obj_setInt(self, "PREPROCESS", LV_EVENT_PREPROCESS); +} + +void pika_lvgl_OPA___init__(PikaObj* self) { + obj_setInt(self, "TRANSP", LV_OPA_TRANSP); + obj_setInt(self, "COVER", LV_OPA_COVER); +} + +void pika_lvgl_PALETTE___init__(PikaObj* self) { + obj_setInt(self, "RED", LV_PALETTE_RED); + obj_setInt(self, "PINK", LV_PALETTE_PINK); + obj_setInt(self, "PURPLE", LV_PALETTE_PURPLE); + obj_setInt(self, "DEEP_PURPLE", LV_PALETTE_DEEP_PURPLE); + obj_setInt(self, "INDIGO", LV_PALETTE_INDIGO); + obj_setInt(self, "BLUE", LV_PALETTE_BLUE); + obj_setInt(self, "LIGHT_BLUE", LV_PALETTE_LIGHT_BLUE); + obj_setInt(self, "CYAN", LV_PALETTE_CYAN); + obj_setInt(self, "TEAL", LV_PALETTE_TEAL); + obj_setInt(self, "GREEN", LV_PALETTE_GREEN); + obj_setInt(self, "LIGHT_GREEN", LV_PALETTE_LIGHT_GREEN); + obj_setInt(self, "LIME", LV_PALETTE_LIME); + obj_setInt(self, "YELLOW", LV_PALETTE_YELLOW); + obj_setInt(self, "AMBER", LV_PALETTE_AMBER); + obj_setInt(self, "ORANGE", LV_PALETTE_ORANGE); + obj_setInt(self, "DEEP_ORANGE", LV_PALETTE_DEEP_ORANGE); + obj_setInt(self, "BROWN", LV_PALETTE_BROWN); + obj_setInt(self, "BLUE_GREY", LV_PALETTE_BLUE_GREY); + obj_setInt(self, "GREY", LV_PALETTE_GREY); + obj_setInt(self, "NONE", LV_PALETTE_NONE); +} + +PikaObj* pika_lvgl_scr_act(PikaObj* self) { + PikaObj* new_obj = newNormalObj(New_TinyObj); + lv_obj_t* lv_obj = lv_scr_act(); + obj_setPtr(new_obj, "lv_obj", lv_obj); + return new_obj; +} + +void pika_lvgl___init__(PikaObj* self) { + obj_newDirectObj(self, "lv_event_listener", New_TinyObj); + pika_lv_event_listener_g = obj_getObj(self, "lv_event_listener"); +} + +PikaObj* pika_lvgl_obj(PikaObj* self, PikaObj* parent) { + lv_obj_t* lv_parent = obj_getPtr(parent, "lv_obj"); + lv_obj_t* lv_obj = lv_obj_create(lv_parent); + PikaObj* new_obj = newNormalObj(New_pika_lvgl_lv_obj); + obj_setPtr(new_obj, "lv_obj", lv_obj); + return new_obj; +} + +PikaObj* pika_lvgl_palette_lighten(PikaObj *self, int p, int lvl){ + PikaObj* new_obj = newNormalObj(New_pika_lvgl_lv_color_t); + lv_color_t lv_color = lv_palette_lighten(p, lvl); + args_setStruct(new_obj->list, "lv_color_struct", lv_color); + lv_color_t* plv_color = args_getStruct(new_obj->list, "lv_color_struct"); + obj_setPtr(new_obj, "lv_color", plv_color); + return new_obj; +} + +PikaObj* pika_lvgl_palette_main(PikaObj* self, int p) { + PikaObj* new_obj = newNormalObj(New_pika_lvgl_lv_color_t); + lv_color_t lv_color = lv_palette_main(p); + args_setStruct(new_obj->list, "lv_color_struct", lv_color); + obj_setPtr(new_obj, "lv_color", + args_getStruct(new_obj->list, "lv_color_struct")); + return new_obj; +} + +PikaObj* pika_lvgl_indev_get_act(PikaObj *self){ + PikaObj* new_obj = newNormalObj(New_pika_lvgl_indev_t); + lv_indev_t *lv_indev = lv_indev_get_act(); + obj_setPtr(new_obj,"lv_indev", lv_indev); + return new_obj; +} + +PikaObj* pika_lvgl_timer_create_basic(PikaObj *self){ + PikaObj* new_obj = newNormalObj(New_pika_lvgl_lv_timer_t); + lv_timer_t *lv_timer = lv_timer_create_basic(); + obj_setPtr(new_obj,"lv_timer", lv_timer); + return new_obj; +} +#endif diff --git a/env_support/pikascript/pika_lvgl.pyi b/env_support/pikascript/pika_lvgl.pyi new file mode 100644 index 000000000..cf07d71df --- /dev/null +++ b/env_support/pikascript/pika_lvgl.pyi @@ -0,0 +1,263 @@ +from PikaObj import * + +def __init__(): ... + +class EVENT: + ALL: int + PRESSED: int + PRESSING: int + PRESS_LOST: int + SHORT_CLICKED: int + LONG_PRESSED: int + LONG_PRESSED_REPEAT: int + CLICKED: int + RELEASED: int + SCROLL_BEGIN: int + SCROLL_END: int + SCROLL: int + GESTURE: int + KEY: int + FOCUSED: int + DEFOCUSED: int + LEAVE: int + HIT_TEST: int + COVER_CHECK: int + REFR_EXT_DRAW_SIZE: int + DRAW_MAIN_BEGIN: int + DRAW_MAIN: int + DRAW_MAIN_END: int + DRAW_POST_BEGIN: int + DRAW_POST: int + DRAW_POST_END: int + DRAW_PART_BEGIN: int + DRAW_PART_END: int + VALUE_CHANGED: int + INSERT: int + REFRESH: int + READY: int + CANCEL: int + DELETE: int + CHILD_CHANGED: int + CHILD_CREATED: int + CHILD_DELETED: int + SCREEN_UNLOAD_START: int + SCREEN_LOAD_START: int + SCREEN_LOADED: int + SCREEN_UNLOADED: int + SIZE_CHANGED: int + STYLE_CHANGED: int + LAYOUT_CHANGED: int + GET_SELF_SIZE: int + PREPROCESS: int + def __init__(self): ... + +class ALIGN: + DEFAULT: int + TOP_LEFT: int + TOP_MID: int + TOP_RIGHT: int + BOTTOM_LEFT: int + BOTTOM_MID: int + BOTTOM_RIGHT: int + LEFT_MID: int + RIGHT_MID: int + CENTER: int + OUT_TOP_LEFT: int + OUT_TOP_MID: int + OUT_TOP_RIGHT: int + OUT_BOTTOM_LEFT: int + OUT_BOTTOM_MID: int + OUT_BOTTOM_RIGHT: int + OUT_LEFT_TOP: int + OUT_LEFT_MID: int + OUT_LEFT_BOTTOM: int + OUT_RIGHT_TOP: int + OUT_RIGHT_MID: int + OUT_RIGHT_BOTTOM: int + def __init__(self): ... + +class PALETTE: + RED: int + PINK: int + PURPLE: int + DEEP_PURPLE: int + INDIGO: int + BLUE: int + LIGHT_BLUE: int + CYAN: int + TEAL: int + GREEN: int + LIGHT_GREEN: int + LIME: int + YELLOW: int + AMBER: int + ORANGE: int + DEEP_ORANGE: int + BROWN: int + BLUE_GREY: int + GREY: int + NONE: int + def __init__(self): ... + +class OPA: + TRANSP: int + COVER: int + def __init__(self): ... + +class ANIM: + OFF: int + ON: int + def __init__(self): ... + +class STATE: + def __init__(self): ... + +class lv_event: + def get_code(self) -> int: ... + def get_target(self) -> lv_obj: ... + +class lv_color_t: ... + +class lv_timer_t: + def set_period(period: int): ... + def set_cb(cb: any): ... + def _del(self): ... + +def palette_lighten(p: int, lvl: int) -> lv_color_t: ... +def palette_main(p: int) -> lv_color_t: ... + +class style_t: + def __init__(self): ... + def init(self): ... + def set_radius(self, radius: int): ... + def set_bg_opa(self, opa: int): ... + def set_bg_color(self, color: lv_color_t): ... + def set_outline_width(self, w: int): ... + def set_outline_color(self, color: lv_color_t): ... + def set_outline_pad(self, pad: int): ... + def set_shadow_width(self, w: int): ... + def set_shadow_spread(self, s: int): ... + def set_shadow_color(self, color: lv_color_t): ... + +class lv_obj: + def center(self): ... + def set_size(self, size_x: int, size_y: int): ... + def align(self, align: int, x_ofs: int, y_ofs: int): ... + def set_hight(self, h: int): ... + def update_layout(self): ... + def set_width(self, w: int): ... + def add_state(self, state: int): ... + def add_event_cb(self, event_cb: any, filter: int, user_data: pointer): ... + def add_style(self, style: style_t, selector: int): ... + def get_x(self) -> int: ... + def get_y(self) -> int: ... + def set_pos(self, x: int, y: int): ... + +class indev_t: + def get_vect(self, point: point_t): ... + +def obj(parent: lv_obj) -> lv_obj: ... +def indev_get_act() -> indev_t: ... + +class point_t: + def __init__(self): ... + +class arc(lv_obj): + MODE_NORMAL: int + MODE_SYMMETRICAL: int + MODE_REVERSE: int + def __init__(self, parent: lv_obj): ... + def set_start_angle(self, start: int): ... + def set_end_angle(self, angle: int): ... + def set_angles(self, start: int, end: int): ... + def set_bg_start_angle(self, start: int): ... + def set_bg_end_angle(self, angle: int): ... + def set_bg_angles(self, start: int, end: int): ... + def set_rotation(self, rotation: int): ... + def set_mode(self, mode: int): ... + def set_value(self, value: int): ... + def set_range(self, min: int, max: int): ... + def set_change_rate(self, rate: int): ... + def get_angle_start(self) -> int: ... + def get_angle_end(self) -> int: ... + def get_bg_angle_start(self) -> int: ... + def get_bg_angle_end(self) -> int: ... + def get_value(self) -> int: ... + def get_min_value(self) -> int: ... + def get_max_value(self) -> int: ... + def get_mode(self) -> int: ... + # def get_rotation(self) -> int: ... + +class bar(lv_obj): + def __init__(self, parent: lv_obj): ... + def set_value(self, value: int, anim: int): ... + def set_start_value(self, start_value: int, anim: int): ... + def set_range(self, min: int, max: int): ... + def set_mode(self, mode: int): ... + def get_value(self) -> int: ... + def get_start_value(self) -> int: ... + def get_min_value(self) -> int: ... + def get_max_value(self) -> int: ... + def get_mode(self) -> int: ... + +class btn(lv_obj): + def __init__(self, parent: lv_obj): ... + +class checkbox(lv_obj): + def __init__(self, parent: lv_obj): ... + def set_text(self, txt: str): ... + def set_text_static(self, txt: str): ... + def get_text(self) -> str: ... + +class dropdown(lv_obj): + def __init__(self, parent: lv_obj): ... + def set_text(self, txt: str): ... + def set_options(self, options: str): ... + def add_option(self, option: str, pos:int): ... + def clear_options(self): ... + def set_selected(self, sel_opt: int): ... + def set_dir(self, dir: int): ... + def set_symbol(self, symbol: str): ... + def set_selected_hightlight(self, en: int): ... + # def get_list(self) -> lv_obj: ... + def get_text(self) -> str: ... + def get_options(self) -> str: ... + def get_selected(self) -> int: ... + def get_option_cnt(self) -> int: ... + def get_selected_str(self) -> str: ... + def get_option_index(self, option: str) -> int: ... + def get_symbol(self) -> int: ... + def get_selected_highlight(self) -> int: ... + def get_dir(self) -> int: ... + def open(self): ... + def close(self): ... + def is_open(self) -> int: ... + +class label(lv_obj): + def __init__(self, parent: lv_obj): ... + def set_text(self, txt: str): ... + def set_long_mode(self, mode: int): ... + def set_recolor(self, en: int): ... + def set_style_text_align(self, value: int, selector: int): ... + +class roller(lv_obj): + def __init__(self, parent: lv_obj): ... + def set_options(self, options: str, mode: int): ... + def set_visible_row_count(self, row_cnt: int): ... + +class slider(lv_obj): + def __init__(self, parent: lv_obj): ... + +class switch(lv_obj): + def __init__(self, parent: lv_obj): ... + +class table(lv_obj): + def __init__(self, parent: lv_obj): ... + def set_cell_value(self, row: int, col: int, txt: str): ... + +class textarea(lv_obj): + def __init__(self, parent: lv_obj): ... + def set_one_line(en: int): ... + +def scr_act() -> lv_obj: ... +def timer_create_basic() -> lv_timer_t: ... diff --git a/env_support/pikascript/pika_lvgl_indev_t.c b/env_support/pikascript/pika_lvgl_indev_t.c new file mode 100644 index 000000000..67950bc94 --- /dev/null +++ b/env_support/pikascript/pika_lvgl_indev_t.c @@ -0,0 +1,12 @@ +#include "lvgl.h" +#ifdef PIKASCRIPT +#include "pika_lvgl_indev_t.h" + +void pika_lvgl_indev_t_get_vect(PikaObj* self, PikaObj* point) { + lv_indev_t* lv_indev = obj_getPtr(self, "lv_indev"); + lv_point_t* lv_point = obj_getPtr(point, "lv_point"); + lv_indev_get_vect(lv_indev, lv_point); + obj_setInt(point, "x", lv_point->x); + obj_setInt(point, "y", lv_point->y); +} +#endif diff --git a/env_support/pikascript/pika_lvgl_lv_event.c b/env_support/pikascript/pika_lvgl_lv_event.c new file mode 100644 index 000000000..a76bdaadd --- /dev/null +++ b/env_support/pikascript/pika_lvgl_lv_event.c @@ -0,0 +1,18 @@ +#include "lvgl.h" +#ifdef PIKASCRIPT +#include "pika_lvgl_lv_event.h" + +int pika_lvgl_lv_event_get_code(PikaObj *self){ + lv_event_t *lv_event = obj_getPtr(self, "lv_event"); + return lv_event_get_code(lv_event); +} + +PikaObj *New_pika_lvgl_lv_obj(Args *args); +PikaObj* pika_lvgl_lv_event_get_target(PikaObj *self){ + lv_event_t *lv_event = obj_getPtr(self, "lv_event"); + lv_obj_t* lv_obj = lv_event_get_target(lv_event); + PikaObj* new_obj = newNormalObj(New_pika_lvgl_lv_obj); + obj_setPtr(new_obj, "lv_obj", lv_obj); + return new_obj; +} +#endif diff --git a/env_support/pikascript/pika_lvgl_lv_obj.c b/env_support/pikascript/pika_lvgl_lv_obj.c new file mode 100644 index 000000000..7c224292e --- /dev/null +++ b/env_support/pikascript/pika_lvgl_lv_obj.c @@ -0,0 +1,110 @@ +#include "lvgl.h" +#ifdef PIKASCRIPT +#include "pika_lvgl_lv_obj.h" +#include "BaseObj.h" +#include "dataStrs.h" +#include "pika_lvgl.h" +#include "pika_lvgl_arc.h" +#include "pika_lvgl_lv_event.h" + +extern PikaObj* pika_lv_event_listener_g; + +void pika_lvgl_lv_obj_center(PikaObj* self) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_center(lv_obj); +} + +void pika_lvgl_lv_obj_set_size(PikaObj* self, int size_x, int size_y) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_set_size(lv_obj, size_x, size_y); +} + +void pika_lvgl_lv_obj_align(PikaObj* self, int align, int x_ofs, int y_ofs) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_align(lv_obj, align, x_ofs, y_ofs); +} + +void pika_lvgl_lv_obj_set_hight(PikaObj* self, int h) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_set_height(lv_obj, h); +} + +void pika_lvgl_lv_obj_update_layout(PikaObj* self) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_update_layout(lv_obj); +} + +void pika_lvgl_lv_obj_set_width(PikaObj* self, int w) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_set_width(lv_obj, w); +} + +void pika_lvgl_lv_obj_add_state(PikaObj* self, int state) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_add_state(lv_obj, state); +} + +PikaObj* eventLisener_getHandler(PikaObj* self, uintptr_t event_id) { + Args buffs = {0}; + char* event_name = + strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "%d", event_id); + PikaObj* event_item = obj_getObj(self, event_name); + PikaObj* event_handler = obj_getPtr(event_item, "handler"); + strsDeinit(&buffs); + return event_handler; +} + +static void __pika_event_cb(lv_event_t* e) { + lv_obj_t* target = lv_event_get_target(e); + PikaObj* event_handler = + eventLisener_getHandler(pika_lv_event_listener_g, (uintptr_t)target); + PikaObj* evt = obj_getObj(event_handler, "_event_evt"); + obj_setPtr(evt, "lv_event", e); + obj_run(event_handler, "_event_cb(_event_evt)"); +} + +void eventLicener_registEvent(PikaObj* self, + uintptr_t event_id, + PikaObj* event_handler) { + Args buffs = {0}; + char* event_name = + strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "%d", event_id); + obj_newDirectObj(self, event_name, New_TinyObj); + PikaObj* event_item = obj_getObj(self, event_name); + obj_setRef(event_item, "handler", event_handler); + strsDeinit(&buffs); +} + +void pika_lvgl_lv_obj_add_event_cb(PikaObj* self, + Arg* event_cb, + int filter, + void* user_data) { + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_add_event_cb(lv_obj, __pika_event_cb, filter, NULL); + obj_setArg(self, "_event_cb", event_cb); + obj_setPtr(self, "_event_user_data", user_data); + obj_newDirectObj(self, "_event_evt", New_pika_lvgl_lv_event); + eventLicener_registEvent(pika_lv_event_listener_g, (uintptr_t)lv_obj, self); +} + +void pika_lvgl_lv_obj_add_style(PikaObj *self, PikaObj* style, int selector){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_state_t* lv_style = obj_getPtr(style, "lv_style"); + lv_obj_add_style(lv_obj, lv_style, selector); +} + +int pika_lvgl_lv_obj_get_x(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_obj_get_x(lv_obj); +} + +int pika_lvgl_lv_obj_get_y(PikaObj *self){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + return lv_obj_get_y(lv_obj); +} + +void pika_lvgl_lv_obj_set_pos(PikaObj *self, int x, int y){ + lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj"); + lv_obj_set_pos(lv_obj, x, y); +} +#endif diff --git a/env_support/pikascript/pika_lvgl_lv_style_t.c b/env_support/pikascript/pika_lvgl_lv_style_t.c new file mode 100644 index 000000000..2b9acdd74 --- /dev/null +++ b/env_support/pikascript/pika_lvgl_lv_style_t.c @@ -0,0 +1,64 @@ +#include "lvgl.h" +#ifdef PIKASCRIPT +#include "pika_lvgl_style_t.h" + +void pika_lvgl_style_t_init(PikaObj* self) { + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_style_init(lv_style); +} + +void pika_lvgl_style_t_set_bg_color(PikaObj* self, PikaObj* color) { + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_color_t* lv_color = obj_getPtr(color, "lv_color"); + lv_style_set_bg_color(lv_style, *lv_color); +} + +void pika_lvgl_style_t_set_bg_opa(PikaObj* self, int opa) { + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_style_set_bg_opa(lv_style, opa); +} + +void pika_lvgl_style_t_set_outline_color(PikaObj* self, PikaObj* color) { + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_color_t* lv_color = obj_getPtr(color, "lv_color"); + lv_style_set_outline_color(lv_style, *lv_color); +} + +void pika_lvgl_style_t_set_outline_pad(PikaObj* self, int pad) { + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_style_set_outline_pad(lv_style, pad); +} + +void pika_lvgl_style_t_set_outline_width(PikaObj* self, int w) { + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_style_set_outline_width(lv_style, w); +} + +void pika_lvgl_style_t_set_radius(PikaObj* self, int radius) { + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_style_set_radius(lv_style, radius); +} + +void pika_lvgl_style_t___init__(PikaObj* self) { + lv_style_t lv_style_stack = {0}; + args_setStruct(self->list, "lv_style_struct", lv_style_stack); + lv_style_t* lv_style = args_getStruct(self->list, "lv_style_struct"); + obj_setPtr(self, "lv_style", lv_style); +} + +void pika_lvgl_style_t_set_shadow_color(PikaObj *self, PikaObj* color){ + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_color_t* lv_color = obj_getPtr(color, "lv_color"); + lv_style_set_shadow_color(lv_style, *lv_color); +} + +void pika_lvgl_style_t_set_shadow_spread(PikaObj *self, int s){ + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_style_set_shadow_spread(lv_style, s); +} + +void pika_lvgl_style_t_set_shadow_width(PikaObj *self, int w){ + lv_style_t* lv_style = obj_getPtr(self, "lv_style"); + lv_style_set_shadow_width(lv_style, w); +} +#endif