1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

belnding fixes with transparent screen

This commit is contained in:
Gabor Kiss-Vamosi 2020-03-25 16:10:51 +01:00
parent ba1639848d
commit c0c1ccec1d

View File

@ -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++) {