diff options
author | Gerd Moellmann <[email protected]> | 2001-10-25 10:07:01 +0000 |
---|---|---|
committer | Gerd Moellmann <[email protected]> | 2001-10-25 10:07:01 +0000 |
commit | 79ddf6f72cdb74195409a50c24038e04d9c0d7f9 (patch) | |
tree | 14720932cc4387653167d29f530443ff4f861322 /src/xdisp.c | |
parent | 5b6a51aaea1a7230f1331d1e1522952031644555 (diff) |
(move_it_vertically_backward): Compute line height
differently. Add heuristic to try to be more compatible to 20.x.
Diffstat (limited to 'src/xdisp.c')
-rw-r--r-- | src/xdisp.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index f75e8071db..a83dd6bd20 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -5311,8 +5311,8 @@ move_it_vertically_backward (it, dy) struct it *it; int dy; { - int nlines, h, line_height; - struct it it2; + int nlines, h; + struct it it2, it3; int start_pos = IT_CHARPOS (*it); xassert (dy >= 0); @@ -5342,7 +5342,7 @@ move_it_vertically_backward (it, dy) move_it_to (&it2, start_pos, -1, -1, it2.vpos + 1, MOVE_TO_POS | MOVE_TO_VPOS); xassert (IT_CHARPOS (*it) >= BEGV); - line_height = it2.max_ascent + it2.max_descent; + it3 = it2; move_it_to (&it2, start_pos, -1, -1, -1, MOVE_TO_POS); xassert (IT_CHARPOS (*it) >= BEGV); @@ -5366,10 +5366,18 @@ move_it_vertically_backward (it, dy) /* The y-position we try to reach. Note that h has been subtracted in front of the if-statement. */ int target_y = it->current_y + h - dy; - + int y0 = it3.current_y; + int y1 = line_bottom_y (&it3); + int line_height = y1 - y0; + /* If we did not reach target_y, try to move further backward if we can. If we moved too far backward, try to move forward. */ if (target_y < it->current_y + /* This is heuristic. In a window that's 3 lines high, with + a line height of 13 pixels each, recentering with point + on the bottom line will try to move -39/2 = 19 pixels + backward. Try to avoid moving into the first line. */ + && it->current_y - target_y > line_height / 2 && IT_CHARPOS (*it) > BEGV) { move_it_vertically (it, target_y - it->current_y); |