From b8d32d8b7b3312db868f36c2d8e4e9855bd7cef4 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Sun, 24 Jan 2016 15:32:13 +0000 Subject: [PATCH] Condensing the code by removing a triplication. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5583 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 1 + src/winio.c | 90 +++++++++-------------------------------------------- 2 files changed, 16 insertions(+), 75 deletions(-) diff --git a/ChangeLog b/ChangeLog index 997096db..3ef21287 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * src/files.c (update_poshistory): Move an updated item to the end of the list, so that it won't be dropped any time soon. The problem was pointed out by David Niklas. + * src/winio.c (edit_redraw): Condense by removing a triplication. 2016-01-22 Benno Schulenberg * src/utils.c (get_homedir): Don't use $HOME when we're root, because diff --git a/src/winio.c b/src/winio.c index 385b3588..9d4c0346 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2948,90 +2948,30 @@ void edit_scroll(scroll_dir direction, ssize_t nlines) * updated. Use this if we've moved without changing any text. */ void edit_redraw(filestruct *old_current, size_t pww_save) { - filestruct *foo = NULL; - bool do_redraw = need_screen_update(0) || need_screen_update(pww_save); - - /* If either old_current or current is offscreen, scroll the edit - * window until it's onscreen and get out. */ - if (old_current->lineno < openfile->edittop->lineno || - old_current->lineno >= openfile->edittop->lineno + maxrows || - openfile->current->lineno < openfile->edittop->lineno || - openfile->current->lineno >= openfile->edittop->lineno + maxrows) { -#ifdef DEBUG - fprintf(stderr, "edit_redraw(): line %ld was offscreen, oldcurrent = %ld edittop = %ld", - (long)openfile->current->lineno, (long)old_current->lineno, (long)openfile->edittop->lineno); -#endif - -#ifndef NANO_TINY - /* If the mark is on, update all the lines between old_current - * and either the old first line or old last line (depending on - * whether we've scrolled up or down) of the edit window. */ - if (openfile->mark_set) { - ssize_t old_lineno; - - if (openfile->edittop->lineno + maxrows <= openfile->filebot->lineno) - old_lineno = openfile->edittop->lineno + editwinrows; - else - old_lineno = openfile->filebot->lineno; - - foo = old_current; - - while (foo->lineno != old_lineno) { - update_line(foo, 0); - - foo = (foo->lineno > old_lineno) ? - foo->prev : foo->next; - } - } -#endif /* !NANO_TINY */ - - /* Make sure the current line is on the screen. */ + /* If the current line is offscreen, scroll until it's onscreen. */ + if (openfile->current->lineno >= openfile->edittop->lineno + maxrows || + openfile->current->lineno < openfile->edittop->lineno) edit_update((ISSET(SMOOTH_SCROLL) && !focusing) ? NONE : CENTER); - /* Update old_current if we're not on the same page as - * before. */ - if (do_redraw) - update_line(old_current, 0); - #ifndef NANO_TINY - /* If the mark is on, update all the lines between the old first - * line or old last line of the edit window (depending on - * whether we've scrolled up or down) and current. */ - if (openfile->mark_set) { - while (foo->lineno != openfile->current->lineno) { - update_line(foo, 0); - - foo = (foo->lineno > openfile->current->lineno) ? - foo->prev : foo->next; - } - } -#endif /* !NANO_TINY */ - - return; - } - - /* Update old_current and current if we're not on the same page as - * before. If the mark is on, update all the lines between - * old_current and current too. */ - foo = old_current; + /* If the mark is on, update all lines between old_current and current. */ + if (openfile->mark_set) { + filestruct *foo = old_current; - while (foo != openfile->current) { - if (do_redraw) + while (foo != openfile->current) { update_line(foo, 0); -#ifndef NANO_TINY - if (!openfile->mark_set) -#endif - break; - -#ifndef NANO_TINY - foo = (foo->lineno > openfile->current->lineno) ? foo->prev : - foo->next; -#endif + foo = (foo->lineno > openfile->current->lineno) ? + foo->prev : foo->next; + } } +#endif /* !NANO_TINY */ - if (do_redraw) + /* Update old_current and current if we've changed page. */ + if (need_screen_update(0) || need_screen_update(pww_save)) { + update_line(old_current, 0); update_line(openfile->current, openfile->current_x); + } } /* Refresh the screen without changing the position of lines. Use this -- 2.39.5