mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-21 05:51:45 +08:00
fix(snapshot): need to set disp refreshing firstly (#4816)
Signed-off-by: Xuxingliang <xuxingliang@xiaomi.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user