1
0
forked from aniani/vim

patch 8.1.0726: redrawing specifically for conceal feature

Problem:    Redrawing specifically for conceal feature.
Solution:   Use generic redrawing methods.
This commit is contained in:
Bram Moolenaar
2019-01-11 20:45:36 +01:00
parent 465e8b5985
commit 535d5b653a
8 changed files with 36 additions and 82 deletions

View File

@@ -1745,23 +1745,24 @@ ins_redraw(
} }
#endif #endif
if (must_redraw) #if defined(FEAT_CONCEAL)
update_screen(0);
else if (clear_cmdline || redraw_cmdline)
showmode(); /* clear cmdline and show mode */
# if defined(FEAT_CONCEAL)
if ((conceal_update_lines if ((conceal_update_lines
&& (conceal_old_cursor_line != conceal_new_cursor_line && (conceal_old_cursor_line != conceal_new_cursor_line
|| conceal_cursor_line(curwin))) || conceal_cursor_line(curwin)))
|| need_cursor_line_redraw) || need_cursor_line_redraw)
{ {
if (conceal_old_cursor_line != conceal_new_cursor_line) if (conceal_old_cursor_line != conceal_new_cursor_line)
update_single_line(curwin, conceal_old_cursor_line); redrawWinline(curwin, conceal_old_cursor_line);
update_single_line(curwin, conceal_new_cursor_line == 0 redrawWinline(curwin, conceal_new_cursor_line == 0
? curwin->w_cursor.lnum : conceal_new_cursor_line); ? curwin->w_cursor.lnum : conceal_new_cursor_line);
curwin->w_valid &= ~VALID_CROW; curwin->w_valid &= ~VALID_CROW;
need_cursor_line_redraw = FALSE;
} }
# endif #endif
if (must_redraw)
update_screen(0);
else if (clear_cmdline || redraw_cmdline)
showmode(); /* clear cmdline and show mode */
showruler(FALSE); showruler(FALSE);
setcursor(); setcursor();
emsg_on_display = FALSE; /* may remove error message now */ emsg_on_display = FALSE; /* may remove error message now */

View File

@@ -5166,8 +5166,6 @@ gui_update_screen(void)
last_cursormoved = curwin->w_cursor; last_cursormoved = curwin->w_cursor;
} }
update_screen(0); /* may need to update the screen */
setcursor();
# ifdef FEAT_CONCEAL # ifdef FEAT_CONCEAL
if (conceal_update_lines if (conceal_update_lines
&& (conceal_old_cursor_line != conceal_new_cursor_line && (conceal_old_cursor_line != conceal_new_cursor_line
@@ -5175,11 +5173,14 @@ gui_update_screen(void)
|| need_cursor_line_redraw)) || need_cursor_line_redraw))
{ {
if (conceal_old_cursor_line != conceal_new_cursor_line) if (conceal_old_cursor_line != conceal_new_cursor_line)
update_single_line(curwin, conceal_old_cursor_line); redrawWinline(curwin, conceal_old_cursor_line);
update_single_line(curwin, conceal_new_cursor_line); redrawWinline(curwin, conceal_new_cursor_line);
curwin->w_valid &= ~VALID_CROW; curwin->w_valid &= ~VALID_CROW;
need_cursor_line_redraw = FALSE;
} }
# endif # endif
update_screen(0); /* may need to update the screen */
setcursor();
out_flush_cursor(TRUE, FALSE); out_flush_cursor(TRUE, FALSE);
} }
#endif #endif

View File

@@ -1194,6 +1194,22 @@ main_loop(
last_cursormoved = curwin->w_cursor; last_cursormoved = curwin->w_cursor;
} }
#if defined(FEAT_CONCEAL)
if (conceal_update_lines
&& (conceal_old_cursor_line != conceal_new_cursor_line
|| conceal_cursor_line(curwin)
|| need_cursor_line_redraw))
{
if (conceal_old_cursor_line != conceal_new_cursor_line
&& conceal_old_cursor_line
<= curbuf->b_ml.ml_line_count)
redrawWinline(curwin, conceal_old_cursor_line);
redrawWinline(curwin, conceal_new_cursor_line);
curwin->w_valid &= ~VALID_CROW;
need_cursor_line_redraw = FALSE;
}
#endif
/* Trigger TextChanged if b:changedtick differs. */ /* Trigger TextChanged if b:changedtick differs. */
if (!finish_op && has_textchanged() if (!finish_op && has_textchanged()
&& curbuf->b_last_changedtick != CHANGEDTICK(curbuf)) && curbuf->b_last_changedtick != CHANGEDTICK(curbuf))
@@ -1288,22 +1304,6 @@ main_loop(
may_clear_sb_text(); /* clear scroll-back text on next msg */ may_clear_sb_text(); /* clear scroll-back text on next msg */
showruler(FALSE); showruler(FALSE);
#if defined(FEAT_CONCEAL)
if (conceal_update_lines
&& (conceal_old_cursor_line != conceal_new_cursor_line
|| conceal_cursor_line(curwin)
|| need_cursor_line_redraw))
{
mch_disable_flush(); /* Stop issuing gui_mch_flush(). */
if (conceal_old_cursor_line != conceal_new_cursor_line
&& conceal_old_cursor_line
<= curbuf->b_ml.ml_line_count)
update_single_line(curwin, conceal_old_cursor_line);
update_single_line(curwin, conceal_new_cursor_line);
mch_enable_flush();
curwin->w_valid &= ~VALID_CROW;
}
#endif
setcursor(); setcursor();
cursor_on(); cursor_on();

View File

@@ -8512,7 +8512,7 @@ n_opencmd(cmdarg_T *cap)
{ {
#ifdef FEAT_CONCEAL #ifdef FEAT_CONCEAL
if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum) if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum)
update_single_line(curwin, oldline); redrawWinline(curwin, oldline);
#endif #endif
/* When '#' is in 'cpoptions' ignore the count. */ /* When '#' is in 'cpoptions' ignore the count. */
if (vim_strchr(p_cpo, CPO_HASH) != NULL) if (vim_strchr(p_cpo, CPO_HASH) != NULL)

View File

@@ -15,7 +15,6 @@ void update_curbuf(int type);
int update_screen(int type_arg); int update_screen(int type_arg);
int conceal_cursor_line(win_T *wp); int conceal_cursor_line(win_T *wp);
void conceal_check_cursor_line(void); void conceal_check_cursor_line(void);
void update_single_line(win_T *wp, linenr_T lnum);
void update_debug_sign(buf_T *buf, linenr_T lnum); void update_debug_sign(buf_T *buf, linenr_T lnum);
void updateWindow(win_T *wp); void updateWindow(win_T *wp);
int screen_get_current_line_off(void); int screen_get_current_line_off(void);

View File

@@ -927,55 +927,6 @@ conceal_check_cursor_line(void)
curs_columns(TRUE); curs_columns(TRUE);
} }
} }
void
update_single_line(win_T *wp, linenr_T lnum)
{
int row;
int j;
#ifdef SYN_TIME_LIMIT
proftime_T syntax_tm;
#endif
/* Don't do anything if the screen structures are (not yet) valid. */
if (!screen_valid(TRUE) || updating_screen)
return;
if (lnum >= wp->w_topline && lnum < wp->w_botline
&& foldedCount(wp, lnum, &win_foldinfo) == 0)
{
#ifdef SYN_TIME_LIMIT
/* Set the time limit to 'redrawtime'. */
profile_setlimit(p_rdt, &syntax_tm);
syn_set_timeout(&syntax_tm);
#endif
update_prepare();
row = 0;
for (j = 0; j < wp->w_lines_valid; ++j)
{
if (lnum == wp->w_lines[j].wl_lnum)
{
screen_start(); /* not sure of screen cursor */
# ifdef FEAT_SEARCH_EXTRA
init_search_hl(wp);
prepare_search_hl(wp, lnum);
# endif
win_line(wp, lnum, row, row + wp->w_lines[j].wl_size,
FALSE, FALSE);
break;
}
row += wp->w_lines[j].wl_size;
}
update_finish();
#ifdef SYN_TIME_LIMIT
syn_set_timeout(NULL);
#endif
}
need_cursor_line_redraw = FALSE;
}
#endif #endif
#if defined(FEAT_SIGNS) || defined(PROTO) #if defined(FEAT_SIGNS) || defined(PROTO)

View File

@@ -795,6 +795,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 */
/**/
726,
/**/ /**/
725, 725,
/**/ /**/

View File

@@ -4177,9 +4177,9 @@ win_goto(win_T *wp)
win_enter(wp, TRUE); win_enter(wp, TRUE);
#ifdef FEAT_CONCEAL #ifdef FEAT_CONCEAL
/* Conceal cursor line in previous window, unconceal in current window. */ // Conceal cursor line in previous window, unconceal in current window.
if (win_valid(owp) && owp->w_p_cole > 0 && !msg_scrolled) if (win_valid(owp) && owp->w_p_cole > 0 && !msg_scrolled)
update_single_line(owp, owp->w_cursor.lnum); redrawWinline(owp, owp->w_cursor.lnum);
if (curwin->w_p_cole > 0 && !msg_scrolled) if (curwin->w_p_cole > 0 && !msg_scrolled)
need_cursor_line_redraw = TRUE; need_cursor_line_redraw = TRUE;
#endif #endif