mirror of
https://github.com/lvgl/lvgl.git
synced 2026-06-04 23:04:23 +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;
|
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
|
* Called periodically to handle the refreshing
|
||||||
* @param tmr pointer to the timer itself
|
* @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);
|
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
|
* Called periodically to handle the refreshing
|
||||||
* @param timer pointer to the timer itself
|
* @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.color_format = cf;
|
||||||
layer.clip_area = snapshot_area;
|
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);
|
lv_obj_redraw(&layer, obj);
|
||||||
|
|
||||||
while(layer.draw_task_head) {
|
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);
|
lv_draw_dispatch_layer(NULL, &layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disp_new->layer_head = layer_old;
|
||||||
|
_lv_refr_set_disp_refreshing(disp_old);
|
||||||
|
|
||||||
return LV_RESULT_OK;
|
return LV_RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user