changeset 60198:d75e10df3675

(window_scroll_pixel_based): When scrolling backwards, handle partial visible line at end of window even when we hit PT.
author Kim F. Storm <storm@cua.dk>
date Mon, 21 Feb 2005 22:34:34 +0000
parents e9e24a0c4849
children 250baa36f408
files src/window.c
diffstat 1 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.c	Mon Feb 21 22:33:36 2005 +0000
+++ b/src/window.c	Mon Feb 21 22:34:34 2005 +0000
@@ -4763,6 +4763,7 @@
   else if (n < 0)
     {
       int charpos, bytepos;
+      int partial_p;
 
       /* Save our position, for the preserve_y case.  */
       charpos = IT_CHARPOS (it);
@@ -4774,7 +4775,20 @@
 		  it.last_visible_y - this_scroll_margin - 1, -1,
 		  MOVE_TO_POS | MOVE_TO_Y);
 
-      if (IT_CHARPOS (it) == PT)
+      /* Save our position, in case it's correct.  */
+      charpos = IT_CHARPOS (it);
+      bytepos = IT_BYTEPOS (it);
+
+      /* See if point is on a partially visible line at the end.  */
+      if (it.what == IT_EOB)
+	partial_p = it.current_y + it.ascent + it.descent > it.last_visible_y;
+      else
+	{
+	  move_it_by_lines (&it, 1, 1);
+	  partial_p = it.current_y > it.last_visible_y;
+	}
+
+      if (charpos == PT && !partial_p)
 	/* We found PT before we found the display margin, so PT is ok.  */
 	;
       else if (preserve_y >= 0)
@@ -4795,14 +4809,7 @@
 	}
       else
 	{
-	  /* Save our position, in case it's correct.  */
-	  charpos = IT_CHARPOS (it);
-	  bytepos = IT_BYTEPOS (it);
-
-	  /* See if point is on a partially visible line at the end.  */
-	  move_it_by_lines (&it, 1, 1);
-
-	  if (it.current_y > it.last_visible_y)
+	  if (partial_p)
 	    /* The last line was only partially visible, so back up two
 	       lines to make sure we're on a fully visible line.  */
 	    {