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