From c58bc32a67976b88f918005c7148ad1b2b21cc1e Mon Sep 17 00:00:00 2001 From: cbennett Date: Thu, 12 Mar 2009 18:30:44 +0000 Subject: [PATCH] 2009-03-12 Colin D Bennett * 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 | 6 ++++ term/gfxterm.c | 74 ++++++++++++++++++++++---------------------------- 2 files changed, 38 insertions(+), 42 deletions(-) diff --git a/ChangeLog b/ChangeLog index 496c68c8f..406dcb2f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-03-12 Colin D Bennett + + * 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 * fs/hfs.c (grub_hfs_strncasecmp): New function. diff --git a/term/gfxterm.c b/term/gfxterm.c index abb1b9ed7..ef32b00e2 100644 --- a/term/gfxterm.c +++ b/term/gfxterm.c @@ -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. */