diff --git a/src/core/lv_refr.c b/src/core/lv_refr.c index e33780b0d2..e34dd839ae 100644 --- a/src/core/lv_refr.c +++ b/src/core/lv_refr.c @@ -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; diff --git a/src/draw/lv_draw.c b/src/draw/lv_draw.c index e4a0175370..dc4ce22199 100644 --- a/src/draw/lv_draw.c +++ b/src/draw/lv_draw.c @@ -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) diff --git a/src/draw/snapshot/lv_snapshot.c b/src/draw/snapshot/lv_snapshot.c index 129a6ae5db..9a285c3a41 100644 --- a/src/draw/snapshot/lv_snapshot.c +++ b/src/draw/snapshot/lv_snapshot.c @@ -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(); diff --git a/src/widgets/canvas/lv_canvas.c b/src/widgets/canvas/lv_canvas.c index fdf1ecd48b..b717b64d1a 100644 --- a/src/widgets/canvas/lv_canvas.c +++ b/src/widgets/canvas/lv_canvas.c @@ -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) {