for example:
static lv_res_t custom_obj_signal(lv_obj_t * canvas, lv_signal_t sign, void * param)
{
if(sign == LV_SIGNAL_CLEANUP) {
lv_img_dsc_t* img = lv_canvas_get_img(canvas);
lv_mem_free(img->data);
img->data = NULL;
}
return LV_RES_OK;
}
lv_obj_t* lv_custom_obj_create(lv_obj_t* parent, lv_coord_t size)
{
uint32_t buf_size = LV_CANVAS_BUF_SIZE_INDEXED_1BIT(size, size);
uint8_t* buf = lv_mem_alloc(buf_size);
......
lv_obj_t* canvas = lv_canvas_create(parent, NULL);
lv_canvas_set_buffer(canvas, buf, size, size, LV_IMG_CF_INDEXED_1BIT);
lv_obj_set_signal_cb(canvas, custom_obj_signal);
return canvas;
}
I free the buffer while this obj will be deleted, It’s right?