]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-03-12 Colin D Bennett <colin@gibibit.com>
authorcbennett <cbennett@localhost>
Thu, 12 Mar 2009 18:30:44 +0000 (18:30 +0000)
committercbennett <cbennett@localhost>
Thu, 12 Mar 2009 18:30:44 +0000 (18:30 +0000)
* term/gfxterm.c (draw_cursor): Ensure character is redrawn.
(grub_gfxterm_putchar): Extract pairs of identical calls to
draw_cursor out of conditional blocks.

ChangeLog
term/gfxterm.c

index 496c68c8ff6e0ee4aa1d93c6b1c84042c19644a1..406dcb2f6ebd824c3b2c90bf0192367d45c05fa8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-12  Colin D Bennett  <colin@gibibit.com>
+
+       * term/gfxterm.c (draw_cursor): Ensure character is redrawn.
+       (grub_gfxterm_putchar): Extract pairs of identical calls to
+       draw_cursor out of conditional blocks.
+
 2009-03-11  Pavel Roskin  <proski@gnu.org>
 
        * fs/hfs.c (grub_hfs_strncasecmp): New function.
index abb1b9ed776050375269019002568bc0ad27a2f8..ef32b00e236936c33899b8872664702ce7381be5 100644 (file)
@@ -717,38 +717,34 @@ write_char (void)
 static void
 draw_cursor (int show)
 {
-  unsigned int x;
-  unsigned int y;
-  unsigned int width;
-  unsigned int height;
-  grub_video_color_t color;
-
-  /* Determine cursor properties and position on text layer. */
-  x = virtual_screen.cursor_x * virtual_screen.normal_char_width;
-  y = (virtual_screen.cursor_y * virtual_screen.normal_char_height
-       + grub_font_get_ascent (virtual_screen.font));
-  width = virtual_screen.normal_char_width;
-  height = 2;
+  write_char ();
 
   if (show)
     {
+      unsigned int x;
+      unsigned int y;
+      unsigned int width;
+      unsigned int height;
+      grub_video_color_t color;
+
+      /* 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;
-    }
-  else
-    {
-      color = virtual_screen.bg_color;
-      y = virtual_screen.cursor_y * virtual_screen.normal_char_height;
-      height = virtual_screen.normal_char_height;
-    }
+      y = (virtual_screen.cursor_y * virtual_screen.normal_char_height
+           + grub_font_get_ascent (virtual_screen.font));
+      height = 2;
 
-  /* Render cursor to text layer.  */
-  grub_video_set_active_render_target (text_layer);
-  grub_video_fill_rect (color, x, y, width, height);
-  grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY);
+      /* Render cursor to text layer.  */
+      grub_video_set_active_render_target (text_layer);
+      grub_video_fill_rect (color, x, y, width, height);
+      grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY);
 
-  /* Mark cursor to be redrawn.  */
-  dirty_region_add (virtual_screen.offset_x + x, virtual_screen.offset_y + y,
-                    width, height);
+      /* Mark cursor to be redrawn.  */
+      dirty_region_add (virtual_screen.offset_x + x,
+                        virtual_screen.offset_y + y,
+                        width, height);
+    }
 }
 
 static void
@@ -821,12 +817,12 @@ grub_gfxterm_putchar (grub_uint32_t c)
     /* FIXME */
     return;
 
+  /* Erase current cursor, if any.  */
+  if (virtual_screen.cursor_state)
+    draw_cursor (0);
+
   if (c == '\b' || c == '\n' || c == '\r')
     {
-      /* Erase current cursor, if any.  */
-      if (virtual_screen.cursor_state)
-       draw_cursor (0);
-
       switch (c)
         {
         case '\b':
@@ -845,10 +841,6 @@ grub_gfxterm_putchar (grub_uint32_t c)
           virtual_screen.cursor_x = 0;
           break;
         }
-
-      /* Redraw cursor if visible.  */
-      if (virtual_screen.cursor_state)
-       draw_cursor (1);
     }
   else
     {
@@ -856,10 +848,6 @@ grub_gfxterm_putchar (grub_uint32_t c)
       struct grub_colored_char *p;
       unsigned char char_width;
 
-      /* Erase current cursor, if any.  */
-      if (virtual_screen.cursor_state)
-       draw_cursor (0);
-
       /* Get properties of the character.  */
       glyph = grub_font_get_glyph (virtual_screen.font, c);
 
@@ -908,11 +896,13 @@ grub_gfxterm_putchar (grub_uint32_t c)
           else
             virtual_screen.cursor_y++;
         }
-
-      /* Draw cursor if visible.  */
-      if (virtual_screen.cursor_state)
-       draw_cursor (1);
     }
+
+  /* Redraw cursor if it should be visible.  */
+  /* Note: This will redraw the character as well, which means that the
+     above call to write_char is redundant when the cursor is showing.  */
+  if (virtual_screen.cursor_state)
+    draw_cursor (1);
 }
 
 /* Use ASCII characters to determine normal character width.  */