From 69342908eef5f99b7992f03ced40125ebf960bb2 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 6 Nov 2023 09:49:46 +0100 Subject: [PATCH] fix(draw): initialize layer->buf_stride --- src/core/lv_refr.c | 4 +++- src/display/lv_display.c | 1 + src/draw/lv_draw.c | 4 ++-- src/widgets/canvas/lv_canvas.c | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/lv_refr.c b/src/core/lv_refr.c index a8d918d41..6da6e3c8d 100644 --- a/src/core/lv_refr.c +++ b/src/core/lv_refr.c @@ -588,6 +588,7 @@ static void refr_area(const lv_area_t * area_p) layer->buf_area.y1 = 0; layer->buf_area.x2 = lv_display_get_horizontal_resolution(disp_refr) - 1; layer->buf_area.y2 = lv_display_get_vertical_resolution(disp_refr) - 1; + layer->buf_stride = lv_draw_buf_width_to_stride(lv_area_get_width(&layer->buf_area), layer->color_format); lv_area_t disp_area; lv_area_set(&disp_area, 0, 0, lv_display_get_horizontal_resolution(disp_refr) - 1, lv_display_get_vertical_resolution(disp_refr) - 1); @@ -625,6 +626,7 @@ static void refr_area(const lv_area_t * area_p) sub_area.y2 = row + max_row - 1; layer->buf = disp_refr->buf_act; layer->buf_area = sub_area; + layer->buf_stride = lv_draw_buf_width_to_stride(lv_area_get_width(&layer->buf_area), layer->color_format); layer->clip_area = sub_area; if(sub_area.y2 > y2) sub_area.y2 = y2; row_last = sub_area.y2; @@ -658,7 +660,7 @@ static void refr_area_part(lv_layer_t * layer) } /*If the screen is transparent initialize it when the flushing is ready*/ if(lv_color_format_has_alpha(disp_refr->color_format)) { - uint32_t w = lv_area_get_width(&layer->buf_area); + uint32_t w = layer->buf_stride; uint32_t h = lv_area_get_height(&layer->buf_area); lv_draw_buf_clear(layer->buf, w, h, layer->color_format, &disp_refr->refreshed_area); } diff --git a/src/display/lv_display.c b/src/display/lv_display.c index 3a30b75ae..847bb6a16 100644 --- a/src/display/lv_display.c +++ b/src/display/lv_display.c @@ -82,6 +82,7 @@ lv_display_t * lv_display_create(int32_t hor_res, int32_t ver_res) disp->layer_head->buf_area.y1 = 0; disp->layer_head->buf_area.x2 = hor_res - 1; disp->layer_head->buf_area.y2 = ver_res - 1; + disp->layer_head->buf_stride = lv_draw_buf_width_to_stride(hor_res, LV_COLOR_FORMAT_NATIVE); disp->layer_head->color_format = disp->color_format; disp->inv_en_cnt = 1; diff --git a/src/draw/lv_draw.c b/src/draw/lv_draw.c index c35deca1e..479463a7d 100644 --- a/src/draw/lv_draw.c +++ b/src/draw/lv_draw.c @@ -321,6 +321,7 @@ lv_layer_t * lv_draw_layer_create(lv_layer_t * parent_layer, lv_color_format_t c new_layer->parent = parent_layer; new_layer->clip_area = *area; new_layer->buf_area = *area; + new_layer->buf_stride = lv_draw_buf_width_to_stride(lv_area_get_width(area), color_format); new_layer->color_format = color_format; if(disp->layer_head) { @@ -372,8 +373,7 @@ void * lv_draw_layer_alloc_buf(lv_layer_t * layer) void * lv_draw_layer_go_to_xy(lv_layer_t * layer, int32_t x, int32_t y) { - uint32_t stride = lv_draw_buf_width_to_stride(lv_area_get_width(&layer->buf_area), layer->color_format); - return lv_draw_buf_go_to_xy(layer->buf, stride, layer->color_format, x, y); + return lv_draw_buf_go_to_xy(layer->buf, layer->buf_stride, layer->color_format, x, y); } diff --git a/src/widgets/canvas/lv_canvas.c b/src/widgets/canvas/lv_canvas.c index 5a0ce4354..31091911a 100644 --- a/src/widgets/canvas/lv_canvas.c +++ b/src/widgets/canvas/lv_canvas.c @@ -303,6 +303,7 @@ void lv_canvas_init_layer(lv_obj_t * canvas, lv_layer_t * layer) layer->color_format = dsc->header.cf; layer->buf_area = canvas_area; layer->clip_area = canvas_area; + layer->buf_stride = lv_draw_buf_width_to_stride(lv_area_get_width(&layer->buf_area), layer->color_format); }