gfxterm: Fix clearing of cursor.
authorVladimir Serbinenko <phcoder@gmail.com>
Tue, 31 Jan 2017 17:49:37 +0000 (18:49 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Tue, 31 Jan 2017 17:49:37 +0000 (18:49 +0100)
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

index 70f10f1..af7c090 100644 (file)
@@ -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.  */