fix(refr): flag when all tasks are added to screen layers (#9739)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Jan Boon
2026-02-18 11:29:48 +08:00
committed by GitHub
parent 777e875aed
commit 73fbfceeed
4 changed files with 10 additions and 0 deletions

View File

@@ -863,6 +863,7 @@ static void refr_area(const lv_area_t * area_p, int32_t y_offset)
layer->_clip_area = *area_p;
layer->phy_clip_area = *area_p;
layer->partial_y_offset = y_offset;
layer->all_tasks_added = false;
if(disp_refr->render_mode == LV_DISPLAY_RENDER_MODE_PARTIAL) {
/*In partial mode render this area to the buffer*/
@@ -904,6 +905,7 @@ static void refr_area(const lv_area_t * area_p, int32_t y_offset)
if(tile_cnt == 1) {
refr_configured_layer(layer);
layer->all_tasks_added = true;
}
else {
/* Don't draw to the layers buffer of the display but create smaller dummy layers which are using the
@@ -931,6 +933,7 @@ static void refr_area(const lv_area_t * area_p, int32_t y_offset)
tile_layer->buf_area = layer->buf_area; /*the buffer is still large*/
tile_layer->draw_buf = layer->draw_buf;
refr_configured_layer(tile_layer);
tile_layer->all_tasks_added = true;
}
@@ -955,6 +958,8 @@ static void refr_area(const lv_area_t * area_p, int32_t y_offset)
if(disp_refr->layer_deinit) disp_refr->layer_deinit(disp_refr, tile_layer);
}
lv_free(tile_layers);
layer->all_tasks_added = true;
}
disp_refr->refreshed_area = *area_p;

View File

@@ -424,6 +424,7 @@ void lv_layer_reset(lv_layer_t * layer)
#endif
layer->opa = LV_OPA_COVER;
layer->recolor = lv_color32_make(0, 0, 0, 0);
layer->all_tasks_added = false;
}
lv_layer_t * lv_draw_layer_create(lv_layer_t * parent_layer, lv_color_format_t color_format, const lv_area_t * area)

View File

@@ -172,6 +172,8 @@ lv_result_t lv_snapshot_take_to_draw_buf(lv_obj_t * obj, lv_color_format_t cf, l
}
}
layer.all_tasks_added = true;
while(layer.draw_task_head) {
lv_draw_dispatch_wait_for_request();
lv_draw_dispatch();

View File

@@ -411,6 +411,8 @@ void lv_canvas_finish_layer(lv_obj_t * canvas, lv_layer_t * layer)
return;
}
layer->all_tasks_added = true;
bool task_dispatched;
while(layer->draw_task_head) {