lvgl / lv_binding_cpp

[WIP] C++ binding for LVGL
MIT License
44 stars 20 forks source link

Remote deletion of lv_obj_t #5

Open X-Ryl669 opened 2 years ago

X-Ryl669 commented 2 years ago

If you start using a lv_obj_t inside another lv_obj_t, then you have an issue. If you delete the parent, the child lv_obj_t * instance will be deleted by LVGL, but the C++ wrapper object will not.

In order to have a link between both, you need to register a LV_EVENT_DELETE on every lv_obj_t * you are wrapping so you can be informed when a children is deleted too and delete the wrapper.

However, this comes with a large penalty, each object now cost a wrapper + an event handler object.

Viatorus commented 2 years ago

I see the same issue.

I tried to use the LVGL class functions around lv_obj_class_t (see _lv_obj.c, lvlabel.c, etc...) to construct a C++ class. This works as long as the class doesn't use virtual functions (and has a virtual table) since LVGL assumes the position of lv_obj_t is at the first memory address (and not after the virtual function table pointer).