Mercurial > emacs
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. */ {