From 2246029447c83a171d3e4d3c462969c678aa2be9 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Wed, 13 Apr 2016 13:14:36 +0200 Subject: [PATCH] screen: elide a variable and serialize some logic for clarity Also, don't force a full refresh of the edit window simply because the current line needs to be horizontally scrolled. And further, when the adjustment of edittop has determined that a full refresh is needed, get out and don't bother scrolling some lines first. --- src/winio.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/winio.c b/src/winio.c index 28de9878..669a3071 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2853,7 +2853,6 @@ void edit_scroll(scroll_dir direction, ssize_t nlines) { ssize_t i; filestruct *foo; - bool do_redraw = need_screen_update(0); assert(nlines > 0); @@ -2880,7 +2879,7 @@ void edit_scroll(scroll_dir direction, ssize_t nlines) ssize_t len = strlenpt(openfile->edittop->data) / COLS; i -= len; if (len > 0) - do_redraw = TRUE; + edit_refresh_needed = TRUE; } #endif } @@ -2888,14 +2887,14 @@ void edit_scroll(scroll_dir direction, ssize_t nlines) /* Limit nlines to the number of lines we could scroll. */ nlines -= i; - /* Don't bother scrolling zero lines or more than the number of - * lines in the edit window minus one; in both cases, get out, and - * call edit_refresh() beforehand if we need to. */ - if (nlines == 0 || do_redraw || nlines >= editwinrows) { - if (do_redraw || nlines >= editwinrows) - edit_refresh_needed = TRUE; + /* Don't bother scrolling zero lines, nor more than the window can hold. */ + if (nlines == 0) + return; + if (nlines >= editwinrows) + edit_refresh_needed = TRUE; + + if (edit_refresh_needed == TRUE) return; - } /* Scroll the text of the edit window up or down nlines lines, * depending on the value of direction. */ @@ -2943,7 +2942,7 @@ void edit_scroll(scroll_dir direction, ssize_t nlines) for (i = nlines; i > 0 && foo != NULL; i--) { if ((i == nlines && direction == DOWNWARD) || (i == 1 && direction == UPWARD)) { - if (do_redraw) + if (need_screen_update(0)) update_line(foo, (foo == openfile->current) ? openfile->current_x : 0); } else