mirror of
https://github.com/lvgl/lvgl.git
synced 2026-06-02 01:18:04 +08:00
fix(draw): solve memory leaking issue
This commit is contained in:
@@ -43,9 +43,10 @@
|
|||||||
struct _lv_draw_layer_ctx_t * lv_draw_sw_layer_create(struct _lv_draw_ctx_t * draw_ctx, lv_draw_layer_ctx_t * layer_ctx,
|
struct _lv_draw_layer_ctx_t * lv_draw_sw_layer_create(struct _lv_draw_ctx_t * draw_ctx, lv_draw_layer_ctx_t * layer_ctx,
|
||||||
lv_draw_layer_flags_t flags)
|
lv_draw_layer_flags_t flags)
|
||||||
{
|
{
|
||||||
|
do{
|
||||||
if(LV_COLOR_SCREEN_TRANSP == 0 && (flags & LV_DRAW_LAYER_FLAG_HAS_ALPHA)) {
|
if(LV_COLOR_SCREEN_TRANSP == 0 && (flags & LV_DRAW_LAYER_FLAG_HAS_ALPHA)) {
|
||||||
LV_LOG_WARN("Rendering this widget needs LV_COLOR_SCREEN_TRANSP 1");
|
LV_LOG_WARN("Rendering this widget needs LV_COLOR_SCREEN_TRANSP 1");
|
||||||
return NULL;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lv_draw_sw_layer_ctx_t * layer_sw_ctx = (lv_draw_sw_layer_ctx_t *) layer_ctx;
|
lv_draw_sw_layer_ctx_t * layer_sw_ctx = (lv_draw_sw_layer_ctx_t *) layer_ctx;
|
||||||
@@ -61,8 +62,7 @@ struct _lv_draw_layer_ctx_t * lv_draw_sw_layer_create(struct _lv_draw_ctx_t * dr
|
|||||||
layer_sw_ctx->buf_size_bytes = LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE;
|
layer_sw_ctx->buf_size_bytes = LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE;
|
||||||
layer_sw_ctx->base_draw.buf = lv_mem_alloc(layer_sw_ctx->buf_size_bytes);
|
layer_sw_ctx->base_draw.buf = lv_mem_alloc(layer_sw_ctx->buf_size_bytes);
|
||||||
if(layer_sw_ctx->base_draw.buf == NULL) {
|
if(layer_sw_ctx->base_draw.buf == NULL) {
|
||||||
lv_mem_free(layer_ctx);
|
break;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
layer_sw_ctx->base_draw.area_act = layer_sw_ctx->base_draw.area_full;
|
layer_sw_ctx->base_draw.area_act = layer_sw_ctx->base_draw.area_full;
|
||||||
@@ -78,8 +78,7 @@ struct _lv_draw_layer_ctx_t * lv_draw_sw_layer_create(struct _lv_draw_ctx_t * dr
|
|||||||
lv_memset_00(layer_sw_ctx->base_draw.buf, layer_sw_ctx->buf_size_bytes);
|
lv_memset_00(layer_sw_ctx->base_draw.buf, layer_sw_ctx->buf_size_bytes);
|
||||||
layer_sw_ctx->has_alpha = flags & LV_DRAW_LAYER_FLAG_HAS_ALPHA ? 1 : 0;
|
layer_sw_ctx->has_alpha = flags & LV_DRAW_LAYER_FLAG_HAS_ALPHA ? 1 : 0;
|
||||||
if(layer_sw_ctx->base_draw.buf == NULL) {
|
if(layer_sw_ctx->base_draw.buf == NULL) {
|
||||||
lv_mem_free(layer_ctx);
|
break;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_ctx->buf = layer_sw_ctx->base_draw.buf;
|
draw_ctx->buf = layer_sw_ctx->base_draw.buf;
|
||||||
@@ -89,8 +88,11 @@ struct _lv_draw_layer_ctx_t * lv_draw_sw_layer_create(struct _lv_draw_ctx_t * dr
|
|||||||
lv_disp_t * disp_refr = _lv_refr_get_disp_refreshing();
|
lv_disp_t * disp_refr = _lv_refr_get_disp_refreshing();
|
||||||
disp_refr->driver->screen_transp = flags & LV_DRAW_LAYER_FLAG_HAS_ALPHA ? 1 : 0;
|
disp_refr->driver->screen_transp = flags & LV_DRAW_LAYER_FLAG_HAS_ALPHA ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return layer_ctx;
|
return layer_ctx;
|
||||||
|
} while(0);
|
||||||
|
|
||||||
|
lv_mem_free(layer_ctx);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lv_draw_sw_layer_adjust(struct _lv_draw_ctx_t * draw_ctx, struct _lv_draw_layer_ctx_t * layer_ctx,
|
void lv_draw_sw_layer_adjust(struct _lv_draw_ctx_t * draw_ctx, struct _lv_draw_layer_ctx_t * layer_ctx,
|
||||||
|
|||||||
Reference in New Issue
Block a user