From aed328bfc31b7a1430efe0901f12f09b7e7db033 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Mon, 21 Feb 2005 22:34:34 +0000 Subject: [PATCH] (window_scroll_pixel_based): When scrolling backwards, handle partial visible line at end of window even when we hit PT. --- src/window.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/window.c b/src/window.c index 07b197cef75..93495afb1a5 100644 --- a/src/window.c +++ b/src/window.c @@ -4763,6 +4763,7 @@ window_scroll_pixel_based (window, n, whole, noerror) 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 @@ window_scroll_pixel_based (window, n, whole, noerror) 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 @@ window_scroll_pixel_based (window, n, whole, noerror) } 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. */ { -- 2.39.2