Mercurial > vim
diff src/screen.c @ 13150:808625d4b71b v8.0.1449
patch 8.0.1449: slow redrawing with DirectX
commit https://github.com/vim/vim/commit/a338adcf222b6a24e26ea5ae6a2ad27f914acb38
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jan 31 20:51:47 2018 +0100
patch 8.0.1449: slow redrawing with DirectX
Problem: Slow redrawing with DirectX.
Solution: Avoid calling gui_mch_flush() unnecessarily, especially when
updating the cursor. (Ken Takata, closes #2560)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 31 Jan 2018 21:00:08 +0100 |
parents | 72366f4e3264 |
children | a8a154cafc60 |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -468,16 +468,14 @@ redraw_after_callback(int call_update_sc setcursor(); } cursor_on(); - out_flush(); #ifdef FEAT_GUI - if (gui.in_use) - { + if (gui.in_use && !gui_mch_is_blink_off()) /* Don't update the cursor when it is blinking and off to avoid * flicker. */ - if (!gui_mch_is_blink_off()) - gui_update_cursor(FALSE, FALSE); - gui_mch_flush(); - } + out_flush_cursor(FALSE, FALSE); + else +#else + out_flush(); #endif --redrawing_for_callback; @@ -800,9 +798,12 @@ update_screen(int type_arg) * done. */ if (gui.in_use) { - out_flush(); /* required before updating the cursor */ if (did_undraw && !gui_mch_is_blink_off()) { + mch_disable_flush(); + out_flush(); /* required before updating the cursor */ + mch_enable_flush(); + /* Put the GUI position where the cursor was, gui_update_cursor() * uses that. */ gui.col = gui_cursor_col; @@ -811,9 +812,12 @@ update_screen(int type_arg) gui.col = mb_fix_col(gui.col, gui.row); # endif gui_update_cursor(FALSE, FALSE); + gui_may_flush(); screen_cur_col = gui.col; screen_cur_row = gui.row; } + else + out_flush(); gui_update_scrollbars(FALSE); } #endif @@ -863,8 +867,7 @@ update_finish(void) * done. */ if (gui.in_use) { - out_flush(); /* required before updating the cursor */ - gui_update_cursor(FALSE, FALSE); + out_flush_cursor(FALSE, FALSE); gui_update_scrollbars(FALSE); } # endif