From: Vladimir Serbinenko Date: Tue, 31 Jan 2017 17:49:37 +0000 (+0100) Subject: gfxterm: Fix clearing of cursor. X-Git-Tag: 2.02-rc1~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f5aa28bc239a35fc3dd64055179cf2993be2954;p=thirdparty%2Fgrub.git 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. --- 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. */