diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-08-29 12:41:06 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-08-29 12:41:06 +0100 |
commit | f73e5ba56f4aca1cd6e38f1c8ea24e941bf6b33f (patch) | |
tree | 767a03bdb567740d44e1f49f50e1e5123a8b421f /src/drawscreen.c | |
parent | 309c4e0ed7dcf42011e29976a06e6335f5ae6d1c (diff) |
patch 9.0.0316: screen flickers when 'cmdheight' is zerov9.0.0316
Problem: Screen flickers when 'cmdheight' is zero.
Solution: Redraw over existing text instead of clearing.
Diffstat (limited to 'src/drawscreen.c')
-rw-r--r-- | src/drawscreen.c | 53 |
1 files changed, 28 insertions, 25 deletions
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; |