diff --git a/src/core/lv_refr.c b/src/core/lv_refr.c index 6a184ba1b8..950b2190e6 100644 --- a/src/core/lv_refr.c +++ b/src/core/lv_refr.c @@ -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 diff --git a/src/core/lv_refr.h b/src/core/lv_refr.h index 2181824bb2..e92732eddf 100644 --- a/src/core/lv_refr.h +++ b/src/core/lv_refr.h @@ -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 diff --git a/src/others/snapshot/lv_snapshot.c b/src/others/snapshot/lv_snapshot.c index 6c687c8ca9..3f9f32a47c 100644 --- a/src/others/snapshot/lv_snapshot.c +++ b/src/others/snapshot/lv_snapshot.c @@ -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; }