From c009759c233c9e460d03a8b7d6d8bcd62d6b8fdb Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Fri, 22 Jul 2005 23:17:19 +0000 Subject: [PATCH] allow scrolling more than editwinrows lines via edit_scroll(), take 2 git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2912 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 18 +++++++++--------- src/winio.c | 30 +++++++++++++++++++----------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index ee241247..0413b364 100644 --- a/ChangeLog +++ b/ChangeLog @@ -36,15 +36,15 @@ CVS code - - Consistently make the flags global and any variables used to hold it longs. (DLR) - Make edit_scroll() sophisticated enough to keep track of - current and current_x and update the lines before and after - the scrolled region, and change the movement functions that - use edit_scroll() to (a) set current and current_x before - calling it, and (b) no longer call edit_redraw() afterward, - since it's now unnecessary. These changes eliminate - redundant screen updates when the mark is on, since the mark - display depends on current and current_x. Changes to - edit_scroll(), do_page_up(), do_page_down(), do_up(), and - do_down(). (DLR) + current and current_x, update the lines before and after the + scrolled region, and properly scroll more than editwinrows + lines; and change the movement functions that use + edit_scroll() to (a) set current and current_x before calling + it, and (b) no longer call edit_redraw() afterward, as it's + now unnecessary. These changes eliminate redundant screen + updates when the mark is on, since the mark display depends on + current and current_x. Changes to edit_scroll(), + do_page_up(), do_page_down(), do_up(), and do_down(). (DLR) - Consistently make the fg and bg colortype struct entries and any variables used to hold them shorts. Changes to do_colorinit() (renamed color_init()), color_to_int() (renamed diff --git a/src/winio.c b/src/winio.c index 9c0b9dc9..5ffbb2c6 100644 --- a/src/winio.c +++ b/src/winio.c @@ -3496,11 +3496,13 @@ void edit_scroll(updown direction, int nlines) const filestruct *foo; int i; - /* Scrolling less than one line or more than editwinrows lines is - * redundant, so don't allow it. */ - if (nlines < 1 || nlines > editwinrows) + /* Don't bother scrolling less than one line. */ + if (nlines < 1) return; + /* Part 1: nlines is the number of lines we're going to scroll the + * text of the edit window. */ + /* Move the top line of the edit window up or down (depending on the * value of direction) nlines lines, or as many lines as we can if * there are fewer than nlines lines available. */ @@ -3516,22 +3518,28 @@ void edit_scroll(updown direction, int nlines) } } - /* Scroll the text on the screen up or down nlines lines, depending - * on the value of direction. */ + /* Limit nlines to the number of lines in the edit window. */ + if (nlines > editwinrows) + nlines = editwinrows; + + /* Scroll the text of the edit window up or down nlines lines, + * depending on the value of direction. */ scrollok(edit, TRUE); wscrl(edit, (direction == UP) ? -nlines : nlines); scrollok(edit, FALSE); + /* Part 2: nlines is the number of lines in the scrolled region of + * the edit window that we need to draw. */ + /* If we scrolled up, we couldn't scroll up all nlines lines, and - * we're now at the top of the file, we need to treat the entire - * screen as the scrolled region, instead of just the top nlines - * lines. */ + * we're now at the top of the file, we need to draw the entire edit + * window instead of just its top nlines lines. */ if (direction == UP && i > 0 && openfile->edittop == openfile->fileage) - nlines = editwinrows; + nlines = editwinrows - 2; - /* Make nlines account for the lines before and after the scrolled - * region, if they're onsccreen. */ + /* If the lines before and after the scrolled region are visible in + * the edit window, we need to draw them too. */ nlines += 2; if (nlines > editwinrows) nlines = editwinrows;