From 6f5aa28bc239a35fc3dd64055179cf2993be2954 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 31 Jan 2017 18:49:37 +0100 Subject: [PATCH] gfxterm: Fix clearing of cursor. If ascent is bigger than height - 2, then we draw over character box but then to clear cursor we only draw over character box. So trim ascent if necessarry. --- grub-core/term/gfxterm.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c index 70f10f19c..af7c090a3 100644 --- a/grub-core/term/gfxterm.c +++ b/grub-core/term/gfxterm.c @@ -668,6 +668,7 @@ draw_cursor (int show) unsigned int y; unsigned int width; unsigned int height; + unsigned int ascent; grub_video_color_t color; write_char (); @@ -679,13 +680,18 @@ draw_cursor (int show) >= virtual_screen.rows) return; + /* Ensure that cursor doesn't go outside of character box. */ + ascent = grub_font_get_ascent(virtual_screen.font); + if (ascent > virtual_screen.normal_char_height - 2) + ascent = virtual_screen.normal_char_height - 2; + /* Determine cursor properties and position on text layer. */ x = virtual_screen.cursor_x * virtual_screen.normal_char_width; width = virtual_screen.normal_char_width; color = virtual_screen.fg_color; y = ((virtual_screen.cursor_y + virtual_screen.total_scroll) * virtual_screen.normal_char_height - + grub_font_get_ascent (virtual_screen.font)); + + ascent); height = 2; /* Render cursor to text layer. */