From 858c21d9991ac7267d62922ad7bf3f9fe01bbd0e Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 31 Mar 2020 12:14:28 +0200 Subject: [PATCH] optmize lv_canvas_fill_bg --- src/lv_widgets/lv_canvas.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/lv_widgets/lv_canvas.c b/src/lv_widgets/lv_canvas.c index 836cfded0..4da3152a8 100644 --- a/src/lv_widgets/lv_canvas.c +++ b/src/lv_widgets/lv_canvas.c @@ -147,7 +147,6 @@ void lv_canvas_set_buffer(lv_obj_t * canvas, void * buf, lv_coord_t w, lv_coord_ ext->dsc.header.w = w; ext->dsc.header.h = h; ext->dsc.data = buf; - ext->dsc.data_size = (lv_img_cf_get_px_size(cf) * w * h) / 8; lv_img_set_src(canvas, &ext->dsc); } @@ -652,13 +651,25 @@ void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color, lv_opa_t opa) lv_img_dsc_t * dsc = lv_canvas_get_img(canvas); - uint32_t x; - uint32_t y; - for(y = 0; y < dsc->header.h; y++) { - for(x = 0; x < dsc->header.w; x++) { - lv_img_buf_set_px_color(dsc, x, y, color); - lv_img_buf_set_px_alpha(dsc, x, y, opa); - } + if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT) { + uint32_t row_byte_cnt = (dsc->header.w + 7) >> 3; + /*+8 skip the palette*/ + lv_memset((uint8_t*)dsc->data + 8, color.full ? 0xff : 0x00, row_byte_cnt * dsc->header.h); + } + else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT) { + uint32_t row_byte_cnt = (dsc->header.w + 7) >> 3; + lv_memset((uint8_t*)dsc->data, opa > LV_OPA_50 ? 0xff : 0x00, row_byte_cnt * dsc->header.h); + } + else + { + uint32_t x; + uint32_t y; + for(y = 0; y < dsc->header.h; y++) { + for(x = 0; x < dsc->header.w; x++) { + lv_img_buf_set_px_color(dsc, x, y, color); + lv_img_buf_set_px_alpha(dsc, x, y, opa); + } + } } lv_obj_invalidate(canvas);