]> git.wh0rd.org Git - nano.git/commitdiff
allow scrolling more than editwinrows lines via edit_scroll(), take 2
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 22 Jul 2005 23:17:19 +0000 (23:17 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 22 Jul 2005 23:17:19 +0000 (23:17 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2912 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/winio.c

index ee2412477ce89509d2e452fa16841ab574c69c0b..0413b364119000e0977946f5c764575e47634c54 100644 (file)
--- 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
index 9c0b9dc9091b6df4cbfc56e37d14784a45e903d9..5ffbb2c62575ee9ccad2725d566ccecc08465485 100644 (file)
@@ -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;