mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
minor speed up on rectangle drawing
This commit is contained in:
parent
19c3f9306f
commit
7fb49693f4
@ -234,6 +234,8 @@ LV_ATTRIBUTE_FAST_MEM static void draw_bg(const lv_area_t * coords, const lv_are
|
||||
bool split = false;
|
||||
if(lv_area_get_width(&coords_bg) - 2 * rout > SPLIT_LIMIT) split = true;
|
||||
|
||||
lv_opa_t opa2;
|
||||
|
||||
lv_area_t fill_area;
|
||||
fill_area.x1 = coords_bg.x1;
|
||||
fill_area.x2 = coords_bg.x2;
|
||||
@ -242,21 +244,28 @@ LV_ATTRIBUTE_FAST_MEM static void draw_bg(const lv_area_t * coords, const lv_are
|
||||
for(h = draw_area.y1; h <= draw_area.y2; h++) {
|
||||
int32_t y = h + vdb->area.y1;
|
||||
|
||||
opa2 = opa;
|
||||
|
||||
/*In not corner areas apply the mask only if required*/
|
||||
if(y > coords_bg.y1 + rout + 1 &&
|
||||
y < coords_bg.y2 - rout - 1) {
|
||||
mask_res = LV_DRAW_MASK_RES_FULL_COVER;
|
||||
if(simple_mode == false) {
|
||||
_lv_memset_ff(mask_buf, draw_area_w);
|
||||
_lv_memset(mask_buf, opa, draw_area_w);
|
||||
mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
|
||||
}
|
||||
}
|
||||
/*In corner areas apply the mask anyway*/
|
||||
else {
|
||||
_lv_memset_ff(mask_buf, draw_area_w);
|
||||
_lv_memset(mask_buf, opa, draw_area_w);
|
||||
mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
|
||||
}
|
||||
|
||||
/*If mask will taken into account its base opacity was already set by memset above*/
|
||||
if(mask_res == LV_DRAW_MASK_RES_CHANGED) {
|
||||
opa2 = LV_OPA_COVER;
|
||||
}
|
||||
|
||||
/*Get the current line color*/
|
||||
if(dsc->bg_grad_dir == LV_GRAD_DIR_VER && dsc->bg_color.full != dsc->bg_grad_color.full) {
|
||||
grad_color = grad_get(dsc, lv_area_get_height(&coords_bg), y - coords_bg.y1);
|
||||
@ -276,7 +285,7 @@ LV_ATTRIBUTE_FAST_MEM static void draw_bg(const lv_area_t * coords, const lv_are
|
||||
fill_area2.y2 = fill_area.y2;
|
||||
|
||||
_lv_blend_fill(clip, &fill_area2,
|
||||
grad_color, mask_buf, mask_res, opa, dsc->bg_blend_mode);
|
||||
grad_color, mask_buf, mask_res, opa2, dsc->bg_blend_mode);
|
||||
|
||||
/*Center part*/
|
||||
if(dsc->bg_grad_dir == LV_GRAD_DIR_VER) {
|
||||
@ -293,21 +302,21 @@ LV_ATTRIBUTE_FAST_MEM static void draw_bg(const lv_area_t * coords, const lv_are
|
||||
int32_t mask_ofs = (coords_bg.x2 - rout + 1) - (vdb->area.x1 + draw_area.x1);
|
||||
if(mask_ofs < 0) mask_ofs = 0;
|
||||
_lv_blend_fill(clip, &fill_area2,
|
||||
grad_color, mask_buf + mask_ofs, mask_res, opa, dsc->bg_blend_mode);
|
||||
grad_color, mask_buf + mask_ofs, mask_res, opa2, dsc->bg_blend_mode);
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
if(dsc->bg_grad_dir == LV_GRAD_DIR_HOR) {
|
||||
_lv_blend_map(clip, &fill_area, grad_map, mask_buf, mask_res, opa, dsc->bg_blend_mode);
|
||||
_lv_blend_map(clip, &fill_area, grad_map, mask_buf, mask_res, opa2, dsc->bg_blend_mode);
|
||||
}
|
||||
else if(dsc->bg_grad_dir == LV_GRAD_DIR_VER) {
|
||||
_lv_blend_fill(clip, &fill_area,
|
||||
grad_color, mask_buf, mask_res, opa, dsc->bg_blend_mode);
|
||||
grad_color, mask_buf, mask_res, opa2, dsc->bg_blend_mode);
|
||||
}
|
||||
else if(other_mask_cnt != 0 || !split) {
|
||||
_lv_blend_fill(clip, &fill_area,
|
||||
grad_color, mask_buf, mask_res, opa, dsc->bg_blend_mode);
|
||||
grad_color, mask_buf, mask_res, opa2, dsc->bg_blend_mode);
|
||||
}
|
||||
}
|
||||
fill_area.y1++;
|
||||
|
Loading…
x
Reference in New Issue
Block a user