forked from aniani/vim
patch 9.0.0892: may redraw when not needed
Problem: May redraw when not needed, causing slow scrolling. Solution: Do not redraw when w_skipcol doesn't change. When w_skipcol changes only redraw from the top. (issue #11559)
This commit is contained in:
parent
fc1b2d0961
commit
f32fb93e43
@ -393,6 +393,7 @@ finish_incsearch_highlighting(
|
|||||||
magic_overruled = is_state->magic_overruled_save;
|
magic_overruled = is_state->magic_overruled_save;
|
||||||
|
|
||||||
validate_cursor(); // needed for TAB
|
validate_cursor(); // needed for TAB
|
||||||
|
status_redraw_all();
|
||||||
redraw_all_later(UPD_SOME_VALID);
|
redraw_all_later(UPD_SOME_VALID);
|
||||||
if (call_update_screen)
|
if (call_update_screen)
|
||||||
update_screen(UPD_SOME_VALID);
|
update_screen(UPD_SOME_VALID);
|
||||||
@ -559,6 +560,7 @@ may_do_incsearch_highlighting(
|
|||||||
}
|
}
|
||||||
|
|
||||||
validate_cursor();
|
validate_cursor();
|
||||||
|
|
||||||
// May redraw the status line to show the cursor position.
|
// May redraw the status line to show the cursor position.
|
||||||
if (p_ru && curwin->w_status_height > 0)
|
if (p_ru && curwin->w_status_height > 0)
|
||||||
curwin->w_redr_status = TRUE;
|
curwin->w_redr_status = TRUE;
|
||||||
|
42
src/move.c
42
src/move.c
@ -201,6 +201,23 @@ redraw_for_cursorcolumn(win_T *wp)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set curwin->s_skipcol to zero and redraw later if needed.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
reset_skipcol(void)
|
||||||
|
{
|
||||||
|
if (curwin->w_skipcol != 0)
|
||||||
|
{
|
||||||
|
curwin->w_skipcol = 0;
|
||||||
|
|
||||||
|
// Should use the least expensive way that displays all that changed.
|
||||||
|
// UPD_NOT_VALID is too expensive, UPD_REDRAW_TOP does not redraw
|
||||||
|
// enough when the top line gets another screen line.
|
||||||
|
redraw_later(UPD_SOME_VALID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update curwin->w_topline and redraw if necessary.
|
* Update curwin->w_topline and redraw if necessary.
|
||||||
* Used to update the screen before printing a message.
|
* Used to update the screen before printing a message.
|
||||||
@ -458,13 +475,9 @@ update_topline(void)
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
dollar_vcol = -1;
|
dollar_vcol = -1;
|
||||||
if (curwin->w_skipcol != 0)
|
redraw_later(UPD_VALID);
|
||||||
{
|
reset_skipcol();
|
||||||
curwin->w_skipcol = 0;
|
|
||||||
redraw_later(UPD_NOT_VALID);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
redraw_later(UPD_VALID);
|
|
||||||
// May need to set w_skipcol when cursor in w_topline.
|
// May need to set w_skipcol when cursor in w_topline.
|
||||||
if (curwin->w_cursor.lnum == curwin->w_topline)
|
if (curwin->w_cursor.lnum == curwin->w_topline)
|
||||||
validate_cursor();
|
validate_cursor();
|
||||||
@ -1319,7 +1332,7 @@ curs_columns(
|
|||||||
else if (!curwin->w_p_sms)
|
else if (!curwin->w_p_sms)
|
||||||
curwin->w_skipcol = 0;
|
curwin->w_skipcol = 0;
|
||||||
if (prev_skipcol != curwin->w_skipcol)
|
if (prev_skipcol != curwin->w_skipcol)
|
||||||
redraw_later(UPD_NOT_VALID);
|
redraw_later(UPD_SOME_VALID);
|
||||||
|
|
||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
redraw_for_cursorcolumn(curwin);
|
redraw_for_cursorcolumn(curwin);
|
||||||
@ -1849,11 +1862,7 @@ adjust_skipcol(void)
|
|||||||
if (curwin->w_cline_height == curwin->w_height)
|
if (curwin->w_cline_height == curwin->w_height)
|
||||||
{
|
{
|
||||||
// the line just fits in the window, don't scroll
|
// the line just fits in the window, don't scroll
|
||||||
if (curwin->w_skipcol != 0)
|
reset_skipcol();
|
||||||
{
|
|
||||||
curwin->w_skipcol = 0;
|
|
||||||
redraw_later(UPD_NOT_VALID);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2302,10 +2311,7 @@ scroll_cursor_top(int min_scroll, int always)
|
|||||||
#endif
|
#endif
|
||||||
// TODO: if the line doesn't fit may optimize w_skipcol
|
// TODO: if the line doesn't fit may optimize w_skipcol
|
||||||
if (curwin->w_topline == curwin->w_cursor.lnum)
|
if (curwin->w_topline == curwin->w_cursor.lnum)
|
||||||
{
|
reset_skipcol();
|
||||||
curwin->w_skipcol = 0;
|
|
||||||
redraw_later(UPD_NOT_VALID);
|
|
||||||
}
|
|
||||||
if (curwin->w_topline != old_topline
|
if (curwin->w_topline != old_topline
|
||||||
|| curwin->w_skipcol != old_skipcol
|
|| curwin->w_skipcol != old_skipcol
|
||||||
#ifdef FEAT_DIFF
|
#ifdef FEAT_DIFF
|
||||||
@ -2737,7 +2743,7 @@ cursor_correct(void)
|
|||||||
if (curwin->w_cline_height == curwin->w_height)
|
if (curwin->w_cline_height == curwin->w_height)
|
||||||
{
|
{
|
||||||
// The cursor line just fits in the window, don't scroll.
|
// The cursor line just fits in the window, don't scroll.
|
||||||
curwin->w_skipcol = 0;
|
reset_skipcol();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO: If the cursor line doesn't fit in the window then only adjust
|
// TODO: If the cursor line doesn't fit in the window then only adjust
|
||||||
|
@ -484,6 +484,7 @@ NEW_TESTS_RES = \
|
|||||||
test_retab.res \
|
test_retab.res \
|
||||||
test_ruby.res \
|
test_ruby.res \
|
||||||
test_scriptnames.res \
|
test_scriptnames.res \
|
||||||
|
test_scroll_opt.res \
|
||||||
test_scrollbind.res \
|
test_scrollbind.res \
|
||||||
test_search.res \
|
test_search.res \
|
||||||
test_search_stat.res \
|
test_search_stat.res \
|
||||||
|
@ -19,7 +19,6 @@ source test_global.vim
|
|||||||
source test_move.vim
|
source test_move.vim
|
||||||
source test_put.vim
|
source test_put.vim
|
||||||
source test_reltime.vim
|
source test_reltime.vim
|
||||||
source test_scroll_opt.vim
|
|
||||||
source test_searchpos.vim
|
source test_searchpos.vim
|
||||||
source test_set.vim
|
source test_set.vim
|
||||||
source test_shift.vim
|
source test_shift.vim
|
||||||
|
@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
892,
|
||||||
/**/
|
/**/
|
||||||
891,
|
891,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user