lv_binding_cpp icon indicating copy to clipboard operation
lv_binding_cpp copied to clipboard

Remote deletion of lv_obj_t

Open X-Ryl669 opened this issue 4 years ago • 1 comments

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.

X-Ryl669 avatar Feb 03 '22 11:02 X-Ryl669

I see the same issue.

I tried to use the LVGL class functions around lv_obj_class_t (see lv_obj.c, lv_label.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).

Viatorus avatar Aug 29 '22 08:08 Viatorus