fix(snapshot): need to set disp refreshing firstly (#4816)

Signed-off-by: Xuxingliang <xuxingliang@xiaomi.com>
This commit is contained in:
Neo Xu
2023-11-18 15:09:45 +08:00
committed by GitHub
parent b10294186a
commit defaafaa44
3 changed files with 24 additions and 0 deletions
+9
View File
@@ -318,6 +318,15 @@ lv_display_t * _lv_refr_get_disp_refreshing(void)
return disp_refr;
}
/**
* Get the display which is being refreshed
* @return the display being refreshed
*/
void _lv_refr_set_disp_refreshing(lv_display_t * disp)
{
disp_refr = disp;
}
/**
* Called periodically to handle the refreshing
* @param tmr pointer to the timer itself
+6
View File
@@ -81,6 +81,12 @@ void _lv_inv_area(lv_display_t * disp, const lv_area_t * area_p);
*/
lv_display_t * _lv_refr_get_disp_refreshing(void);
/**
* Set the display which is being refreshed
* @param disp the display being refreshed
*/
void _lv_refr_set_disp_refreshing(lv_display_t * disp);
/**
* Called periodically to handle the refreshing
* @param timer pointer to the timer itself
+9
View File
@@ -132,6 +132,12 @@ lv_result_t lv_snapshot_take_to_buf(lv_obj_t * obj, lv_color_format_t cf, lv_ima
layer.color_format = cf;
layer.clip_area = snapshot_area;
lv_display_t * disp_old = _lv_refr_get_disp_refreshing();
lv_display_t * disp_new = lv_obj_get_disp(obj);
lv_layer_t * layer_old = disp_new->layer_head;
disp_new->layer_head = &layer;
_lv_refr_set_disp_refreshing(disp_new);
lv_obj_redraw(&layer, obj);
while(layer.draw_task_head) {
@@ -139,6 +145,9 @@ lv_result_t lv_snapshot_take_to_buf(lv_obj_t * obj, lv_color_format_t cf, lv_ima
lv_draw_dispatch_layer(NULL, &layer);
}
disp_new->layer_head = layer_old;
_lv_refr_set_disp_refreshing(disp_old);
return LV_RESULT_OK;
}