From c0c1ccec1d616c957ae5d3b38bafb0b7465b89b1 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 25 Mar 2020 16:10:51 +0100 Subject: [PATCH] belnding fixes with transparent screen --- src/lv_draw/lv_draw_blend.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/lv_draw/lv_draw_blend.c b/src/lv_draw/lv_draw_blend.c index 674c77bcf..b38cbdbea 100644 --- a/src/lv_draw/lv_draw_blend.c +++ b/src/lv_draw/lv_draw_blend.c @@ -73,24 +73,14 @@ static inline lv_color_t color_blend_true_color_subtractive(lv_color_t fg, lv_co #define FILL_NORMAL_MASK_PX_SCR_TRANSP(out_x, color) \ - if(*mask_tmp_x) { \ - if(*mask_tmp_x != last_mask || last_dest_color.full != disp_buf_tmp[out_x].full) { \ - if(disp->driver.screen_transp) { \ - lv_color_mix_with_alpha(disp_buf_tmp[x], disp_buf_tmp[out_x].ch.alpha, \ - color, *mask_tmp_x, &last_res_color, &last_res_color.ch.alpha); \ - } \ - else \ - { \ - if(*mask_tmp_x == LV_OPA_COVER) last_res_color = color; \ - else if(disp_buf_tmp[out_x].full == color.full) last_res_color = color; \ - else last_res_color = lv_color_mix(color, disp_buf_tmp[out_x], *mask_tmp_x); \ - last_mask = *mask_tmp_x; \ - last_dest_color.full = disp_buf_tmp[out_x].full; \ - } \ - } \ - disp_buf_tmp[out_x] = last_res_color; \ - } \ - mask_tmp_x++; + if(*mask_tmp_x) { \ + if(*mask_tmp_x == LV_OPA_COVER) disp_buf_tmp[out_x] = color; \ + else if(disp_buf_tmp[out_x].full == color.full) disp_buf_tmp[out_x] = color; \ + else if(disp->driver.screen_transp) lv_color_mix_with_alpha(disp_buf_tmp[out_x], disp_buf_tmp[out_x].ch.alpha, \ + color, *mask_tmp_x, &disp_buf_tmp[out_x], &disp_buf_tmp[out_x].ch.alpha); \ + else disp_buf_tmp[out_x] = lv_color_mix(color, disp_buf_tmp[out_x], *mask_tmp_x); \ + } \ + mask_tmp_x++; /********************** @@ -374,7 +364,11 @@ static void fill_normal(const lv_area_t * disp_area, lv_color_t * disp_buf, con const lv_opa_t * mask_tmp_x = &mask_tmp[draw_area->x1]; #if 0 for(x = draw_area->x1; x <= draw_area->x2; x++) { +#if LV_COLOR_SCREEN_TRANSP + FILL_NORMAL_MASK_PX_SCR_TRANSP(x, color) +#else FILL_NORMAL_MASK_PX(x, color) +#endif } #else for(x = draw_area->x1; x <= draw_area->x2 && ((lv_uintptr_t)mask_tmp_x & 0x3); x++) {