From f73e5ba56f4aca1cd6e38f1c8ea24e941bf6b33f Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 29 Aug 2022 12:41:06 +0100 Subject: patch 9.0.0316: screen flickers when 'cmdheight' is zero Problem: Screen flickers when 'cmdheight' is zero. Solution: Redraw over existing text instead of clearing. --- src/drawscreen.c | 53 ++++++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 25 deletions(-) (limited to 'src/drawscreen.c') diff --git a/src/drawscreen.c b/src/drawscreen.c index ecbdd9f0f2..529792f06c 100644 --- a/src/drawscreen.c +++ b/src/drawscreen.c @@ -170,38 +170,41 @@ update_screen(int type_arg) if (msg_scrolled) { clear_cmdline = TRUE; - if (msg_scrolled > Rows - 5) // clearing is faster - type = UPD_CLEAR; - else if (type != UPD_CLEAR) + if (type != UPD_CLEAR) { - check_for_delay(FALSE); - if (screen_ins_lines(0, 0, msg_scrolled, (int)Rows, 0, NULL) - == FAIL) - type = UPD_CLEAR; - FOR_ALL_WINDOWS(wp) + if (msg_scrolled > Rows - 5) // redrawing is faster + type = UPD_NOT_VALID; + else { - if (wp->w_winrow < msg_scrolled) + check_for_delay(FALSE); + if (screen_ins_lines(0, 0, msg_scrolled, (int)Rows, 0, NULL) + == FAIL) + type = UPD_NOT_VALID; + FOR_ALL_WINDOWS(wp) { - if (W_WINROW(wp) + wp->w_height > msg_scrolled - && wp->w_redr_type < UPD_REDRAW_TOP - && wp->w_lines_valid > 0 - && wp->w_topline == wp->w_lines[0].wl_lnum) - { - wp->w_upd_rows = msg_scrolled - W_WINROW(wp); - wp->w_redr_type = UPD_REDRAW_TOP; - } - else + if (wp->w_winrow < msg_scrolled) { - wp->w_redr_type = UPD_NOT_VALID; - if (W_WINROW(wp) + wp->w_height + wp->w_status_height - <= msg_scrolled) - wp->w_redr_status = TRUE; + if (W_WINROW(wp) + wp->w_height > msg_scrolled + && wp->w_redr_type < UPD_REDRAW_TOP + && wp->w_lines_valid > 0 + && wp->w_topline == wp->w_lines[0].wl_lnum) + { + wp->w_upd_rows = msg_scrolled - W_WINROW(wp); + wp->w_redr_type = UPD_REDRAW_TOP; + } + else + { + wp->w_redr_type = UPD_NOT_VALID; + if (W_WINROW(wp) + wp->w_height + + wp->w_status_height <= msg_scrolled) + wp->w_redr_status = TRUE; + } } } + if (!no_update) + redraw_cmdline = TRUE; + redraw_tabline = TRUE; } - if (!no_update) - redraw_cmdline = TRUE; - redraw_tabline = TRUE; } msg_scrolled = 0; need_wait_return = FALSE; -- cgit v1.2.3