1 #if defined(LV_LVGL_H_INCLUDE_SIMPLE)
2 #include "lvgl.h"
3 #else
4 #include "../../lvgl.h"
5 #endif
6
7 #ifdef PIKASCRIPT
8
9 #include "pika_lvgl_lv_obj.h"
10 #include "BaseObj.h"
11 #include "dataStrs.h"
12 #include "pika_lvgl.h"
13 #include "pika_lvgl_arc.h"
14 #include "pika_lvgl_lv_event.h"
15
16 extern PikaObj* pika_lv_event_listener_g;
17
pika_lvgl_lv_obj_center(PikaObj * self)18 void pika_lvgl_lv_obj_center(PikaObj* self) {
19 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
20 lv_obj_center(lv_obj);
21 }
22
pika_lvgl_lv_obj_set_size(PikaObj * self,int size_x,int size_y)23 void pika_lvgl_lv_obj_set_size(PikaObj* self, int size_x, int size_y) {
24 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
25 lv_obj_set_size(lv_obj, size_x, size_y);
26 }
27
pika_lvgl_lv_obj_align(PikaObj * self,int align,int x_ofs,int y_ofs)28 void pika_lvgl_lv_obj_align(PikaObj* self, int align, int x_ofs, int y_ofs) {
29 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
30 lv_obj_align(lv_obj, align, x_ofs, y_ofs);
31 }
32
pika_lvgl_lv_obj_set_height(PikaObj * self,int h)33 void pika_lvgl_lv_obj_set_height(PikaObj* self, int h) {
34 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
35 lv_obj_set_height(lv_obj, h);
36 }
37
pika_lvgl_lv_obj_update_layout(PikaObj * self)38 void pika_lvgl_lv_obj_update_layout(PikaObj* self) {
39 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
40 lv_obj_update_layout(lv_obj);
41 }
42
pika_lvgl_lv_obj_set_width(PikaObj * self,int w)43 void pika_lvgl_lv_obj_set_width(PikaObj* self, int w) {
44 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
45 lv_obj_set_width(lv_obj, w);
46 }
47
pika_lvgl_lv_obj_add_state(PikaObj * self,int state)48 void pika_lvgl_lv_obj_add_state(PikaObj* self, int state) {
49 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
50 lv_obj_add_state(lv_obj, state);
51 }
52
eventListener_getHandler(PikaObj * self,uintptr_t event_id)53 PikaObj* eventListener_getHandler(PikaObj* self, uintptr_t event_id) {
54 Args buffs = {0};
55 char* event_name =
56 strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "%d", event_id);
57 PikaObj* event_item = obj_getObj(self, event_name);
58 PikaObj* event_handler = obj_getPtr(event_item, "handler");
59 strsDeinit(&buffs);
60 return event_handler;
61 }
62
__pika_event_cb(lv_event_t * e)63 static void __pika_event_cb(lv_event_t* e) {
64 lv_obj_t* target = lv_event_get_target(e);
65 PikaObj* event_handler =
66 eventListener_getHandler(pika_lv_event_listener_g, (uintptr_t)target);
67 PikaObj* evt = obj_getObj(event_handler, "_event_evt");
68 obj_setPtr(evt, "lv_event", e);
69 obj_run(event_handler, "_event_cb(_event_evt)");
70 }
71
eventListener_registerEvent(PikaObj * self,uintptr_t event_id,PikaObj * event_handler)72 void eventListener_registerEvent(PikaObj* self,
73 uintptr_t event_id,
74 PikaObj* event_handler) {
75 Args buffs = {0};
76 char* event_name =
77 strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "%d", event_id);
78 obj_newDirectObj(self, event_name, New_TinyObj);
79 PikaObj* event_item = obj_getObj(self, event_name);
80 obj_setRef(event_item, "handler", event_handler);
81 strsDeinit(&buffs);
82 }
83
pika_lvgl_lv_obj_add_event_cb(PikaObj * self,Arg * event_cb,int filter,void * user_data)84 void pika_lvgl_lv_obj_add_event_cb(PikaObj* self,
85 Arg* event_cb,
86 int filter,
87 void* user_data) {
88 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
89 lv_obj_add_event_cb(lv_obj, __pika_event_cb, filter, NULL);
90 obj_setArg(self, "_event_cb", event_cb);
91 obj_setPtr(self, "_event_user_data", user_data);
92 obj_newDirectObj(self, "_event_evt", New_pika_lvgl_lv_event);
93 eventListener_registerEvent(pika_lv_event_listener_g, (uintptr_t)lv_obj, self);
94 }
95
pika_lvgl_lv_obj_add_style(PikaObj * self,PikaObj * style,int selector)96 void pika_lvgl_lv_obj_add_style(PikaObj *self, PikaObj* style, int selector){
97 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
98 lv_style_t* lv_style = obj_getPtr(style, "lv_style");
99 lv_obj_add_style(lv_obj, lv_style, selector);
100 }
101
pika_lvgl_lv_obj_get_x(PikaObj * self)102 int pika_lvgl_lv_obj_get_x(PikaObj *self){
103 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
104 return lv_obj_get_x(lv_obj);
105 }
106
pika_lvgl_lv_obj_get_y(PikaObj * self)107 int pika_lvgl_lv_obj_get_y(PikaObj *self){
108 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
109 return lv_obj_get_y(lv_obj);
110 }
111
pika_lvgl_lv_obj_set_pos(PikaObj * self,int x,int y)112 void pika_lvgl_lv_obj_set_pos(PikaObj *self, int x, int y){
113 lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
114 lv_obj_set_pos(lv_obj, x, y);
115 }
116 #endif
117