Mercurial > emacs
changeset 59738:a21e342024d8
(get_glyph_string_clip_rect): Always show a cursor
glyph, even when row is only partially visible and actual cursor
position is not visible.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Thu, 27 Jan 2005 00:16:28 +0000 |
parents | 4956a53e6a56 |
children | d44378e6fdf5 |
files | src/xdisp.c |
diffstat | 1 files changed, 21 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Thu Jan 27 00:16:00 2005 +0000 +++ b/src/xdisp.c Thu Jan 27 00:16:28 2005 +0000 @@ -1837,7 +1837,7 @@ if (s->hl == DRAW_CURSOR) { struct glyph *glyph = s->first_glyph; - int height; + int height, max_y; if (s->x > r.x) { @@ -1846,13 +1846,26 @@ } r.width = min (r.width, glyph->pixel_width); - /* Don't draw cursor glyph taller than our actual glyph. */ - height = max (FRAME_LINE_HEIGHT (s->f), glyph->ascent + glyph->descent); - if (height < r.height) - { - int max_y = r.y + r.height; - r.y = min (max_y, s->ybase + glyph->descent - height); - r.height = min (max_y - r.y, height); + /* If r.y is below window bottom, ensure that we still see a cursor. */ + height = min (glyph->ascent + glyph->descent, + min (FRAME_LINE_HEIGHT (s->f), s->row->visible_height)); + max_y = window_text_bottom_y (s->w) - height; + max_y = WINDOW_TO_FRAME_PIXEL_Y (s->w, max_y); + if (s->ybase - glyph->ascent > max_y) + { + r.y = max_y; + r.height = height; + } + else + { + /* Don't draw cursor glyph taller than our actual glyph. */ + height = max (FRAME_LINE_HEIGHT (s->f), glyph->ascent + glyph->descent); + if (height < r.height) + { + max_y = r.y + r.height; + r.y = min (max_y, max (r.y, s->ybase + glyph->descent - height)); + r.height = min (max_y - r.y, height); + } } }