diff --git a/ChangeLog b/ChangeLog index 5ce87eda7..20974d170 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2013-08-07 Vladimir Testov + + * docs/grub.texi: Introduce terminal window position options: + terminal-left: terminal window's left position + terminal-top: terminal window's top position + terminal-width: terminal window's width + terminal-height: terminal window's height + terminal-border: terminal window's border width + * grub-core/gfxmenu/theme-loader.c: Likewise. + * include/grub/gfxmenu_view.h: Likewise. + * po/exlude.pot: Likewise. + * grub-core/gfxmenu/view.c: Likewise. + Also updated minimal window size. + Also terminal_sanity_check function has been introduced. + 2013-08-02 Vladimir Serbinenko * grub-core/tests/checksums.h: Update (1-pixel difference in marker diff --git a/docs/grub.texi b/docs/grub.texi index 42e17e61c..d5ed014ed 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -1904,6 +1904,11 @@ In this example, name3 is assigned a color value. @item desktop-image @tab Specifies the image to use as the background. It will be scaled to fit the screen size. @item desktop-color @tab Specifies the color for the background if *desktop-image* is not specified. @item terminal-box @tab Specifies the file name pattern for the styled box slices used for the command line terminal window. For example, ``terminal-box: terminal_*.png'' will use the images ``terminal_c.png`` as the center area, ``terminal_n.png`` as the north (top) edge, ``terminal_nw.png`` as the northwest (upper left) corner, and so on. If the image for any slice is not found, it will simply be left empty. +@item terminal-border @tab Specifies the border width of the terminal window. +@item terminal-left @tab Specifies the left coordinate of the terminal window. +@item terminal-top @tab Specifies the top coordinate of the terminal window. +@item terminal-width @tab Specifies the width of the terminal window. +@item terminal-height @tab Specifies the height of the terminal window. @end multitable diff --git a/grub-core/gfxmenu/theme_loader.c b/grub-core/gfxmenu/theme_loader.c index 4aaa35219..c882c1958 100644 --- a/grub-core/gfxmenu/theme_loader.c +++ b/grub-core/gfxmenu/theme_loader.c @@ -32,6 +32,9 @@ #include #include +static grub_err_t +parse_proportional_spec (const char *value, signed *abs, grub_fixed_signed_t *prop); + /* Construct a new box widget using ABSPATTERN to find the pixmap files for it, storing the new box instance at *BOXPTR. PATTERN should be of the form: "(hd0,0)/somewhere/style*.png". @@ -113,6 +116,24 @@ grub_gui_recreate_box (grub_gfxmenu_box_t *boxptr, return grub_errno; } +static grub_err_t +theme_get_unsigned_int_from_proportional (const char *value, + unsigned absolute_value, + unsigned int *parsed_value) +{ + grub_err_t err; + grub_fixed_signed_t frac; + signed pixels; + err = parse_proportional_spec (value, &pixels, &frac); + if (err != GRUB_ERR_NONE) + return err; + int result = grub_fixed_sfs_multiply (absolute_value, frac) + pixels; + if (result < 0) + result = 0; + *parsed_value = result; + return GRUB_ERR_NONE; +} + /* Set the specified property NAME on the view to the given string VALUE. The caller is responsible for the lifetimes of NAME and VALUE. */ static grub_err_t @@ -179,6 +200,52 @@ theme_set_string (grub_gfxmenu_view_t view, if (err != GRUB_ERR_NONE) return err; } + else if (! grub_strcmp ("terminal-border", name)) + { + view->terminal_border = grub_strtoul (value, 0, 10); + if (grub_errno) + return grub_errno; + } + else if (! grub_strcmp ("terminal-left", name)) + { + unsigned int tmp; + int err = theme_get_unsigned_int_from_proportional (value, + view->screen.width, + &tmp); + if (err != GRUB_ERR_NONE) + return err; + view->terminal_rect.x = tmp; + } + else if (! grub_strcmp ("terminal-top", name)) + { + unsigned int tmp; + int err = theme_get_unsigned_int_from_proportional (value, + view->screen.width, + &tmp); + if (err != GRUB_ERR_NONE) + return err; + view->terminal_rect.y = tmp; + } + else if (! grub_strcmp ("terminal-width", name)) + { + unsigned int tmp; + int err = theme_get_unsigned_int_from_proportional (value, + view->screen.width, + &tmp); + if (err != GRUB_ERR_NONE) + return err; + view->terminal_rect.width = tmp; + } + else if (! grub_strcmp ("terminal-height", name)) + { + unsigned int tmp; + int err = theme_get_unsigned_int_from_proportional (value, + view->screen.width, + &tmp); + if (err != GRUB_ERR_NONE) + return err; + view->terminal_rect.height = tmp; + } else if (! grub_strcmp ("title-text", name)) { grub_free (view->title_text); @@ -363,10 +430,10 @@ read_expression (struct parsebuf *p) } static grub_err_t -parse_proportional_spec (char *value, signed *abs, grub_fixed_signed_t *prop) +parse_proportional_spec (const char *value, signed *abs, grub_fixed_signed_t *prop) { signed num; - char *ptr; + const char *ptr; int sig = 0; *abs = 0; *prop = 0; @@ -382,7 +449,7 @@ parse_proportional_spec (char *value, signed *abs, grub_fixed_signed_t *prop) ptr++; } - num = grub_strtoul (ptr, &ptr, 0); + num = grub_strtoul (ptr, (char **) &ptr, 0); if (grub_errno) return grub_errno; if (sig) diff --git a/grub-core/gfxmenu/view.c b/grub-core/gfxmenu/view.c index bcf6399e2..2dcb962dd 100644 --- a/grub-core/gfxmenu/view.c +++ b/grub-core/gfxmenu/view.c @@ -40,7 +40,6 @@ static void init_terminal (grub_gfxmenu_view_t view); -static grub_video_rect_t term_rect; static grub_gfxmenu_view_t term_view; /* Create a new view object, loading the theme specified by THEME_PATH and @@ -71,6 +70,15 @@ grub_gfxmenu_view_new (const char *theme_path, view->screen.width = width; view->screen.height = height; + view->need_to_check_sanity = 1; + view->terminal_border = 3; + view->terminal_rect.width = view->screen.width * 7 / 10; + view->terminal_rect.height = view->screen.height * 7 / 10; + view->terminal_rect.x = view->screen.x + (view->screen.width + - view->terminal_rect.width) / 2; + view->terminal_rect.y = view->screen.y + (view->screen.height + - view->terminal_rect.height) / 2; + default_font = grub_font_get ("Unknown Regular 16"); default_fg_color = grub_video_rgba_color_rgb (0, 0, 0); default_bg_color = grub_video_rgba_color_rgb (255, 255, 255); @@ -302,7 +310,7 @@ void grub_gfxmenu_view_redraw (grub_gfxmenu_view_t view, const grub_video_rect_t *region) { - if (grub_video_have_common_points (&term_rect, region)) + if (grub_video_have_common_points (&view->terminal_rect, region)) grub_gfxterm_schedule_repaint (); grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY); @@ -386,26 +394,110 @@ grub_gfxmenu_draw_terminal_box (void) term_box = term_view->terminal_box; if (!term_box) return; - - term_box->set_content_size (term_box, term_rect.width, - term_rect.height); + + term_box->set_content_size (term_box, term_view->terminal_rect.width, + term_view->terminal_rect.height); term_box->draw (term_box, - term_rect.x - term_box->get_left_pad (term_box), - term_rect.y - term_box->get_top_pad (term_box)); + term_view->terminal_rect.x - term_box->get_left_pad (term_box), + term_view->terminal_rect.y - term_box->get_top_pad (term_box)); +} + +static void +get_min_terminal (grub_font_t terminal_font, + unsigned int border_width, + unsigned int *min_terminal_width, + unsigned int *min_terminal_height) +{ + struct grub_font_glyph *glyph; + glyph = grub_font_get_glyph (terminal_font, 'M'); + *min_terminal_width = (glyph? glyph->device_width : 8) * 80 + + 2 * border_width; + *min_terminal_height = grub_font_get_max_char_height (terminal_font) * 24 + + 2 * border_width; +} + +static void +terminal_sanity_check (grub_gfxmenu_view_t view) +{ + if (!view->need_to_check_sanity) + return; + + /* terminal_font was checked before in the init_terminal function. */ + grub_font_t terminal_font = grub_font_get (view->terminal_font_name); + + /* Non-negative numbers below. */ + int scr_x = view->screen.x; + int scr_y = view->screen.y; + int scr_width = view->screen.width; + int scr_height = view->screen.height; + int term_x = view->terminal_rect.x; + int term_y = view->terminal_rect.y; + int term_width = view->terminal_rect.width; + int term_height = view->terminal_rect.height; + + /* Check that border_width isn't too big. */ + unsigned int border_width = view->terminal_border; + unsigned int min_terminal_width; + unsigned int min_terminal_height; + get_min_terminal (terminal_font, border_width, + &min_terminal_width, &min_terminal_height); + if (border_width > 3 && ((int) min_terminal_width >= scr_width + || (int) min_terminal_height >= scr_height)) + { + border_width = 3; + get_min_terminal (terminal_font, border_width, + &min_terminal_width, &min_terminal_height); + } + + /* Sanity checks. */ + if (term_width > scr_width) + term_width = scr_width; + if (term_height > scr_height) + term_height = scr_height; + + if (scr_width <= (int) min_terminal_width + || scr_height <= (int) min_terminal_height) + { + /* The screen resulution is too low. Use all space, except a small border + to show the user, that it is a window. Then center the window. */ + term_width = scr_width - 6 * border_width; + term_height = scr_height - 6 * border_width; + term_x = scr_x + (scr_width - term_width) / 2; + term_y = scr_y + (scr_height - term_height) / 2; + } + else if (term_width < (int) min_terminal_width + || term_height < (int) min_terminal_height) + { + /* The screen resolution is big enough. Make sure, that terminal screen + dimensions aren't less than minimal values. Then center the window. */ + term_width = (int) min_terminal_width; + term_height = (int) min_terminal_height; + term_x = scr_x + (scr_width - term_width) / 2; + term_y = scr_y + (scr_height - term_height) / 2; + } + + /* At this point w and h are satisfying. */ + if (term_x + term_width > scr_width) + term_x = scr_width - term_width; + if (term_y + term_height > scr_height) + term_y = scr_height - term_height; + + /* Write down corrected data. */ + view->terminal_rect.x = (unsigned int) term_x; + view->terminal_rect.y = (unsigned int) term_y; + view->terminal_rect.width = (unsigned int) term_width; + view->terminal_rect.height = (unsigned int) term_height; + view->terminal_border = border_width; + + view->need_to_check_sanity = 0; } static void init_terminal (grub_gfxmenu_view_t view) { - const int border_width = 3; - grub_font_t terminal_font; - unsigned int line_width; - - struct grub_font_glyph *glyph; - terminal_font = grub_font_get (view->terminal_font_name); if (!terminal_font) { @@ -413,38 +505,22 @@ init_terminal (grub_gfxmenu_view_t view) return; } - glyph = grub_font_get_glyph (terminal_font, 'M'); - - line_width = ((glyph ? glyph->device_width : 8) * 80 + 2 * border_width); - - if (view->screen.width <= line_width) - /* The screen is too small. Use all space, except a small border - to show the user, it is a window and not full screen: */ - term_rect.width = view->screen.width - 6 * border_width; - else - { - /* The screen is big enough. Try 70% of the screen width: */ - term_rect.width = view->screen.width * 7 / 10; - /* Make sure, that we use at least the line_width: */ - if ( term_rect.width < line_width ) - term_rect.width = line_width; - } - - term_rect.height = view->screen.height * 7 / 10; - - term_rect.x = view->screen.x + (view->screen.width - term_rect.width) / 2; - term_rect.y = view->screen.y + (view->screen.height - term_rect.height) / 2; + /* Check that terminal window size and position are sane. */ + terminal_sanity_check (view); term_view = view; /* Note: currently there is no API for changing the gfxterm font on the fly, so whatever font the initially loaded theme specifies will be permanent. */ - grub_gfxterm_set_window (GRUB_VIDEO_RENDER_TARGET_DISPLAY, term_rect.x, - term_rect.y, - term_rect.width, term_rect.height, - view->double_repaint, terminal_font, - border_width); + grub_gfxterm_set_window (GRUB_VIDEO_RENDER_TARGET_DISPLAY, + view->terminal_rect.x, + view->terminal_rect.y, + view->terminal_rect.width, + view->terminal_rect.height, + view->double_repaint, + terminal_font, + view->terminal_border); grub_gfxterm_decorator_hook = grub_gfxmenu_draw_terminal_box; } diff --git a/grub-core/tests/checksums.h b/grub-core/tests/checksums.h index a547a551a..c8ca409ce 100644 --- a/grub-core/tests/checksums.h +++ b/grub-core/tests/checksums.h @@ -58,35 +58,35 @@ { "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x9813a416, 0x9a418b1d, 0x6fb2a19a, 0x9a418b1d, 0x3c3e7993, 0x9813a416, 0x9813a416, 0xe85391b9, 0xe85391b9, 0xe85391b9, 0xda81995d, 0xda81995d, 0xda81995d, 0xe9064220, 0xe9064220, 0xe9064220, 0x9813a416, 0x3c3e7993, 0x3c3e7993, 0x9813a416, }, 20 }, { "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x66cb2267, 0xb90e9f13, 0x66cb2267, 0x79874749, 0x5fcf013d, 0x5fcf013d, 0x55ffe784, 0x55ffe784, 0x55ffe784, 0x2c6d082c, 0x2c6d082c, 0x2c6d082c, 0xed8bba6b, 0xed8bba6b, 0xed8bba6b, 0x5fcf013d, 0x79874749, 0x79874749, 0x5fcf013d, }, 20 }, { "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd3d2838d, 0x3c2e7a96, 0xd3d2838d, 0x993b0962, 0xdd28f52b, 0xdd28f52b, 0xa719aebf, 0xa719aebf, 0xa719aebf, 0xcd8b1348, 0xcd8b1348, 0xcd8b1348, 0x1b91449d, 0x1b91449d, 0x1b91449d, 0xdd28f52b, 0x993b0962, 0x993b0962, 0xdd28f52b, }, 20 }, - { "gfxmenu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xc3d16829, 0x15aa9c37, 0xc3d16829, 0x98ea4b3a, 0xf22da29a, 0xa59283dd, 0xa59283dd, 0xa59283dd, 0x397018b, 0x397018b, 0x397018b, 0xe978830f, 0xe978830f, 0xe978830f, 0x59c36f00, 0x98ea4b3a, 0x98ea4b3a, }, 18 }, - { "gfxmenu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xc312db93, 0x62a6f9ab, 0xc312db93, 0xc4b199ab, 0x2c3dfa69, 0x3af36cbe, 0x3af36cbe, 0x3af36cbe, 0x413d5d99, 0x413d5d99, 0x413d5d99, 0xf53dc062, 0xf53dc062, 0xf53dc062, 0xaa4593fe, 0xc4b199ab, 0xc4b199ab, }, 18 }, + { "gfxmenu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xc3d16829, 0x15aa9c37, 0xc3d16829, 0x98ea4b3a, 0x1e41f884, 0x3a9aaf64, 0x3a9aaf64, 0x3a9aaf64, 0x9c6ed3a4, 0x9c6ed3a4, 0x9c6ed3a4, 0x603f8978, 0x603f8978, 0x603f8978, 0x59c36f00, 0x98ea4b3a, 0x98ea4b3a, }, 18 }, + { "gfxmenu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xc312db93, 0x62a6f9ab, 0xc312db93, 0xc4b199ab, 0xd426ef9b, 0x6b44de71, 0x6b44de71, 0x6b44de71, 0xdd89df0b, 0xdd89df0b, 0xdd89df0b, 0x70855958, 0x70855958, 0x70855958, 0xaa4593fe, 0xc4b199ab, 0xc4b199ab, }, 18 }, { "gfxmenu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x9034ef0a, 0xe4cc1d1e, 0x9034ef0a, 0x55ac3617, 0x122a153f, 0xae2e908, 0xae2e908, 0xae2e908, 0x3f5367ea, 0x3f5367ea, 0x3f5367ea, 0x86bc0378, 0x86bc0378, 0x86bc0378, 0xc9cbf769, 0x55ac3617, 0x55ac3617, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x78e0e9, 0x11e250ac, 0x78e0e9, 0x9151f8fe, 0xb52c8875, 0x8d289ed1, 0x8d289ed1, 0x8d289ed1, 0xb55e6a15, 0xb55e6a15, 0xb55e6a15, 0x63bc8cda, 0x63bc8cda, 0x63bc8cda, 0x1c3742c9, 0x9151f8fe, 0x9151f8fe, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0xe2aff65f, 0x6ecb555a, 0xe2aff65f, 0x708334eb, 0xc410fda0, 0x3eae26ac, 0x3eae26ac, 0x3eae26ac, 0x47229697, 0x47229697, 0x47229697, 0x28f34df8, 0x28f34df8, 0x28f34df8, 0xcc5a7bed, 0x708334eb, 0x708334eb, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x78e0e9, 0x11e250ac, 0x78e0e9, 0x9151f8fe, 0x487d6f88, 0x63807bc2, 0x63807bc2, 0x63807bc2, 0xc8403289, 0xc8403289, 0xc8403289, 0x5a15c8d4, 0x5a15c8d4, 0x5a15c8d4, 0x1c3742c9, 0x9151f8fe, 0x9151f8fe, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0xe2aff65f, 0x6ecb555a, 0xe2aff65f, 0x708334eb, 0x693b0403, 0xac7fe8d6, 0xac7fe8d6, 0xac7fe8d6, 0x22f18267, 0x22f18267, 0x22f18267, 0x533fcb51, 0x533fcb51, 0x533fcb51, 0xcc5a7bed, 0x708334eb, 0x708334eb, }, 18 }, { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xef4a3312, 0x51be5693, 0x6cda44a9, 0x51be5693, 0x4c748bb2, 0xd3aa0fcc, 0x178f6c35, 0x178f6c35, 0x178f6c35, 0xbbadbfd3, 0xbbadbfd3, 0xbbadbfd3, 0xe4e491d2, 0xe4e491d2, 0xe4e491d2, 0xef4a3312, 0x4c748bb2, 0x4c748bb2, }, 18 }, - { "gfxmenu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x99b1e58d, 0xdd618b70, 0x99b1e58d, 0x6cec0b5a, 0xdc37dab7, 0x8b88fbf0, 0x8b88fbf0, 0x8b88fbf0, 0x2d8d79a6, 0x2d8d79a6, 0x2d8d79a6, 0xc762fb22, 0xc762fb22, 0xc762fb22, 0x59c36f00, 0x6cec0b5a, 0x6cec0b5a, }, 18 }, - { "gfxmenu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xa524ff93, 0x4472026e, 0xa524ff93, 0x497cade9, 0x71c38b, 0x16bf555c, 0x16bf555c, 0x16bf555c, 0x6d71647b, 0x6d71647b, 0x6d71647b, 0xd971f980, 0xd971f980, 0xd971f980, 0xaa4593fe, 0x497cade9, 0x497cade9, }, 18 }, + { "gfxmenu", 640, 480, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi256 */, (grub_uint32_t []) { 0x59c36f00, 0x99b1e58d, 0xdd618b70, 0x99b1e58d, 0x6cec0b5a, 0x97bc346b, 0xb367638b, 0xb367638b, 0xb367638b, 0x15931f4b, 0x15931f4b, 0x15931f4b, 0xe9c24597, 0xe9c24597, 0xe9c24597, 0x59c36f00, 0x6cec0b5a, 0x6cec0b5a, }, 18 }, + { "gfxmenu", 800, 600, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi256 */, (grub_uint32_t []) { 0xaa4593fe, 0xa524ff93, 0x4472026e, 0xa524ff93, 0x497cade9, 0x79cdba4, 0xb8feea4e, 0xb8feea4e, 0xb8feea4e, 0xe33eb34, 0xe33eb34, 0xe33eb34, 0xa33f6d67, 0xa33f6d67, 0xa33f6d67, 0xaa4593fe, 0x497cade9, 0x497cade9, }, 18 }, { "gfxmenu", 1024, 768, 0x2, 256, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi256 */, (grub_uint32_t []) { 0xc9cbf769, 0x7302ba19, 0xf9e69182, 0x7302ba19, 0x6f83ab6c, 0x423782ff, 0x5aff7ec8, 0x5aff7ec8, 0x5aff7ec8, 0x6f4ef02a, 0x6f4ef02a, 0x6f4ef02a, 0xd6a194b8, 0xd6a194b8, 0xd6a194b8, 0xc9cbf769, 0x6f83ab6c, 0x6f83ab6c, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x47c89379, 0xfb921d8c, 0x47c89379, 0x2ab29713, 0xf93a81be, 0x3458d277, 0x3458d277, 0x3458d277, 0x6475af82, 0x6475af82, 0x6475af82, 0x89de01be, 0x89de01be, 0x89de01be, 0x5387d57f, 0x2ab29713, 0x2ab29713, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xda7180ad, 0x2d40ccb5, 0xda7180ad, 0x4b66f81, 0x58397d1d, 0xf2c9c339, 0xf2c9c339, 0xf2c9c339, 0xf702b00c, 0xf702b00c, 0xf702b00c, 0x3a7f3ab7, 0x3a7f3ab7, 0x3a7f3ab7, 0xf83ee7aa, 0x4b66f81, 0x4b66f81, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 640x480xrgba5550 */, (grub_uint32_t []) { 0x5387d57f, 0x47c89379, 0xfb921d8c, 0x47c89379, 0x2ab29713, 0xcd05a8b0, 0x552f30aa, 0x552f30aa, 0x552f30aa, 0x49b531f3, 0x49b531f3, 0x49b531f3, 0x7f7f0f6b, 0x7f7f0f6b, 0x7f7f0f6b, 0x5387d57f, 0x2ab29713, 0x2ab29713, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 800x600xrgba5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xda7180ad, 0x2d40ccb5, 0xda7180ad, 0x4b66f81, 0x598eb034, 0x3b50d2b6, 0x3b50d2b6, 0x3b50d2b6, 0x1a23680d, 0x1a23680d, 0x1a23680d, 0x1a17a08a, 0x1a17a08a, 0x1a17a08a, 0xf83ee7aa, 0x4b66f81, 0x4b66f81, }, 18 }, { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 10, 5, 5, 5, 0, 5, 0, 0 /* 1024x768xrgba5550 */, (grub_uint32_t []) { 0x724366e5, 0x22dfd431, 0xcb4dda, 0x22dfd431, 0x1041fdd7, 0x321a2758, 0x729a7530, 0x729a7530, 0x729a7530, 0x90674a10, 0x90674a10, 0x90674a10, 0x5c83455b, 0x5c83455b, 0x5c83455b, 0x724366e5, 0x1041fdd7, 0x1041fdd7, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xd57a5f3d, 0xbaacffef, 0xd57a5f3d, 0x6d04139, 0x17789f1, 0x2df02846, 0x2df02846, 0x2df02846, 0x6c62ee4b, 0x6c62ee4b, 0x6c62ee4b, 0xb4025cf5, 0xb4025cf5, 0xb4025cf5, 0x5387d57f, 0x6d04139, 0x6d04139, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x66e783d8, 0x237c46, 0x66e783d8, 0xb0476052, 0x44b10241, 0xa7db814e, 0xa7db814e, 0xa7db814e, 0xc7747957, 0xc7747957, 0xc7747957, 0xedc87ede, 0xedc87ede, 0xedc87ede, 0xf83ee7aa, 0xb0476052, 0xb0476052, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 640x480xrgba5650 */, (grub_uint32_t []) { 0x5387d57f, 0xd57a5f3d, 0xbaacffef, 0xd57a5f3d, 0x6d04139, 0xd2b03183, 0x5f71c17d, 0x5f71c17d, 0x5f71c17d, 0x7da2a359, 0x7da2a359, 0x7da2a359, 0x49e0c40, 0x49e0c40, 0x49e0c40, 0x5387d57f, 0x6d04139, 0x6d04139, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 800x600xrgba5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x66e783d8, 0x237c46, 0x66e783d8, 0xb0476052, 0xa9f8749c, 0xb3e23018, 0xb3e23018, 0xb3e23018, 0x630e11f3, 0x630e11f3, 0x630e11f3, 0xa5755a9, 0xa5755a9, 0xa5755a9, 0xf83ee7aa, 0xb0476052, 0xb0476052, }, 18 }, { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 11, 5, 5, 6, 0, 5, 0, 0 /* 1024x768xrgba5650 */, (grub_uint32_t []) { 0x724366e5, 0xa380a936, 0x44112354, 0xa380a936, 0x5972442c, 0xc1d72f70, 0x4b4f7975, 0x4b4f7975, 0x4b4f7975, 0x4944ce0e, 0x4944ce0e, 0x4944ce0e, 0xed4d66c4, 0xed4d66c4, 0xed4d66c4, 0x724366e5, 0x5972442c, 0x5972442c, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xd4c034e1, 0xd18ebc60, 0xd4c034e1, 0xce757514, 0x47883323, 0x36a061ca, 0x36a061ca, 0x36a061ca, 0x857cdbe9, 0x857cdbe9, 0x857cdbe9, 0x79e6a1ff, 0x79e6a1ff, 0x79e6a1ff, 0x1c955882, 0xce757514, 0xce757514, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x8f846485, 0x724947a6, 0x8f846485, 0xca16ff75, 0x7ca6c2a6, 0x7518114, 0x7518114, 0x7518114, 0x73e14536, 0x73e14536, 0x73e14536, 0xb955b108, 0xb955b108, 0xb955b108, 0x4d266f7a, 0xca16ff75, 0xca16ff75, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 640x480xrgba8880 */, (grub_uint32_t []) { 0x1c955882, 0xd4c034e1, 0xd18ebc60, 0xd4c034e1, 0xce757514, 0xafb9ccd, 0xfbaa6735, 0xfbaa6735, 0xfbaa6735, 0x89440884, 0x89440884, 0x89440884, 0x1201a945, 0x1201a945, 0x1201a945, 0x1c955882, 0xce757514, 0xce757514, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 800x600xrgba8880 */, (grub_uint32_t []) { 0x4d266f7a, 0x8f846485, 0x724947a6, 0x8f846485, 0xca16ff75, 0x3d9190e6, 0xfc49b2e4, 0xfc49b2e4, 0xfc49b2e4, 0x1073e48f, 0x1073e48f, 0x1073e48f, 0xe24a0f1e, 0xe24a0f1e, 0xe24a0f1e, 0x4d266f7a, 0xca16ff75, 0xca16ff75, }, 18 }, { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 16, 8, 8, 8, 0, 8, 0, 0 /* 1024x768xrgba8880 */, (grub_uint32_t []) { 0x1ed9d731, 0x12799c18, 0xc43c02b, 0x12799c18, 0x8def0a81, 0x7219771f, 0x67fa9045, 0x67fa9045, 0x67fa9045, 0x401ed559, 0x401ed559, 0x401ed559, 0xdc2fa0bd, 0xdc2fa0bd, 0xdc2fa0bd, 0x1ed9d731, 0x8def0a81, 0x8def0a81, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xb141cb2a, 0xbea70aff, 0xb141cb2a, 0xb5d30cfb, 0x79f9376f, 0xb49b64a6, 0xb49b64a6, 0xb49b64a6, 0xe4b61953, 0xe4b61953, 0xe4b61953, 0x91db76f, 0x91db76f, 0x91db76f, 0x5387d57f, 0xb5d30cfb, 0xb5d30cfb, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbce5fa8f, 0x408f4ff1, 0xbce5fa8f, 0xc37a3112, 0xa84da503, 0x2bd1b27, 0x2bd1b27, 0x2bd1b27, 0x7766812, 0x7766812, 0x7766812, 0xca0be2a9, 0xca0be2a9, 0xca0be2a9, 0xf83ee7aa, 0xc37a3112, 0xc37a3112, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 640x480xbgra5550 */, (grub_uint32_t []) { 0x5387d57f, 0xb141cb2a, 0xbea70aff, 0xb141cb2a, 0xb5d30cfb, 0x8b113016, 0x133ba80c, 0x133ba80c, 0x133ba80c, 0xfa1a955, 0xfa1a955, 0xfa1a955, 0x396b97cd, 0x396b97cd, 0x396b97cd, 0x5387d57f, 0xb5d30cfb, 0xb5d30cfb, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 800x600xbgra5550 */, (grub_uint32_t []) { 0xf83ee7aa, 0xbce5fa8f, 0x408f4ff1, 0xbce5fa8f, 0xc37a3112, 0xee9c2441, 0x8c4246c3, 0x8c4246c3, 0x8c4246c3, 0xad31fc78, 0xad31fc78, 0xad31fc78, 0xad0534ff, 0xad0534ff, 0xad0534ff, 0xf83ee7aa, 0xc37a3112, 0xc37a3112, }, 18 }, { "gfxmenu", 1024, 768, 0x1, 256, 15, 2, 0, 5, 5, 5, 10, 5, 0, 0 /* 1024x768xbgra5550 */, (grub_uint32_t []) { 0x724366e5, 0xda7c17e2, 0x2c0f29ff, 0xda7c17e2, 0xefc30135, 0xfa52a09, 0x4f257861, 0x4f257861, 0x4f257861, 0xadd84741, 0xadd84741, 0xadd84741, 0x613c480a, 0x613c480a, 0x613c480a, 0x724366e5, 0xefc30135, 0xefc30135, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xbddc0704, 0xfcbe55f3, 0xbddc0704, 0xe719c475, 0xa046defc, 0x8cc17f4b, 0x8cc17f4b, 0x8cc17f4b, 0xcd53b946, 0xcd53b946, 0xcd53b946, 0x15330bf8, 0x15330bf8, 0x15330bf8, 0x5387d57f, 0xe719c475, 0xe719c475, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x2e44be7, 0x355622e, 0x2e44be7, 0x43c8f7d0, 0x120f1eb9, 0xf1659db6, 0xf1659db6, 0xf1659db6, 0x91ca65af, 0x91ca65af, 0x91ca65af, 0xbb766226, 0xbb766226, 0xbb766226, 0xf83ee7aa, 0x43c8f7d0, 0x43c8f7d0, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 640x480xbgra5650 */, (grub_uint32_t []) { 0x5387d57f, 0xbddc0704, 0xfcbe55f3, 0xbddc0704, 0xe719c475, 0x37196474, 0xbad8948a, 0xbad8948a, 0xbad8948a, 0x980bf6ae, 0x980bf6ae, 0x980bf6ae, 0xe13759b7, 0xe13759b7, 0xe13759b7, 0x5387d57f, 0xe719c475, 0xe719c475, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 800x600xbgra5650 */, (grub_uint32_t []) { 0xf83ee7aa, 0x2e44be7, 0x355622e, 0x2e44be7, 0x43c8f7d0, 0x5a2eaae3, 0x4034ee67, 0x4034ee67, 0x4034ee67, 0x90d8cf8c, 0x90d8cf8c, 0x90d8cf8c, 0xf9818bd6, 0xf9818bd6, 0xf9818bd6, 0xf83ee7aa, 0x43c8f7d0, 0x43c8f7d0, }, 18 }, { "gfxmenu", 1024, 768, 0x1, 256, 16, 2, 0, 5, 5, 6, 11, 5, 0, 0 /* 1024x768xbgra5650 */, (grub_uint32_t []) { 0x724366e5, 0x811fe662, 0xea426643, 0x811fe662, 0x3d6c794f, 0x736807f, 0x8daed67a, 0x8daed67a, 0x8daed67a, 0x8fa56101, 0x8fa56101, 0x8fa56101, 0x2bacc9cb, 0x2bacc9cb, 0x2bacc9cb, 0x724366e5, 0x3d6c794f, 0x3d6c794f, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x51b7a2b6, 0x739cd793, 0x51b7a2b6, 0xe6cbb6b7, 0xa3824ceb, 0xd2aa1e02, 0xd2aa1e02, 0xd2aa1e02, 0x6176a421, 0x6176a421, 0x6176a421, 0x9decde37, 0x9decde37, 0x9decde37, 0x1c955882, 0xe6cbb6b7, 0xe6cbb6b7, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xb3fde28a, 0x254aa376, 0xb3fde28a, 0xfe24d6e7, 0x17e3a034, 0x6c14e386, 0x6c14e386, 0x6c14e386, 0x18a427a4, 0x18a427a4, 0x18a427a4, 0xd210d39a, 0xd210d39a, 0xd210d39a, 0x4d266f7a, 0xfe24d6e7, 0xfe24d6e7, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 640x480xbgra8880 */, (grub_uint32_t []) { 0x1c955882, 0x51b7a2b6, 0x739cd793, 0x51b7a2b6, 0xe6cbb6b7, 0xc0996dfd, 0x31c89605, 0x31c89605, 0x31c89605, 0x4326f9b4, 0x4326f9b4, 0x4326f9b4, 0xd8635875, 0xd8635875, 0xd8635875, 0x1c955882, 0xe6cbb6b7, 0xe6cbb6b7, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 800x600xbgra8880 */, (grub_uint32_t []) { 0x4d266f7a, 0xb3fde28a, 0x254aa376, 0xb3fde28a, 0xfe24d6e7, 0x9d89e033, 0x5c51c231, 0x5c51c231, 0x5c51c231, 0xb06b945a, 0xb06b945a, 0xb06b945a, 0x42527fcb, 0x42527fcb, 0x42527fcb, 0x4d266f7a, 0xfe24d6e7, 0xfe24d6e7, }, 18 }, { "gfxmenu", 1024, 768, 0x1, 256, 24, 3, 0, 8, 8, 8, 16, 8, 0, 0 /* 1024x768xbgra8880 */, (grub_uint32_t []) { 0x1ed9d731, 0xe21093d1, 0x22b4f37f, 0xe21093d1, 0x6e68157e, 0x94242a59, 0x81c7cd03, 0x81c7cd03, 0x81c7cd03, 0xa623881f, 0xa623881f, 0xa623881f, 0x3a12fdfb, 0x3a12fdfb, 0x3a12fdfb, 0x1ed9d731, 0x6e68157e, 0x6e68157e, }, 18 }, - { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x10d16d53, 0x572acb26, 0x10d16d53, 0x809c452e, 0xe213167f, 0xda1700db, 0xda1700db, 0xda1700db, 0xe261f41f, 0xe261f41f, 0xe261f41f, 0x348312d0, 0x348312d0, 0x348312d0, 0x1c3742c9, 0x809c452e, 0x809c452e, }, 18 }, - { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x72a6eb55, 0x91669ba6, 0x72a6eb55, 0x9671866, 0x7d5dafd1, 0x87e374dd, 0x87e374dd, 0x87e374dd, 0xfe6fc4e6, 0xfe6fc4e6, 0xfe6fc4e6, 0x91be1f89, 0x91be1f89, 0x91be1f89, 0xcc5a7bed, 0x9671866, 0x9671866, }, 18 }, + { "gfxmenu", 640, 480, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 640x480xbgra8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x10d16d53, 0x572acb26, 0x10d16d53, 0x809c452e, 0x732c7814, 0x58d16c5e, 0x58d16c5e, 0x58d16c5e, 0xf3112515, 0xf3112515, 0xf3112515, 0x6144df48, 0x6144df48, 0x6144df48, 0x1c3742c9, 0x809c452e, 0x809c452e, }, 18 }, + { "gfxmenu", 800, 600, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 800x600xbgra8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x72a6eb55, 0x91669ba6, 0x72a6eb55, 0x9671866, 0x4a766eab, 0x8f32827e, 0x8f32827e, 0x8f32827e, 0x1bce8cf, 0x1bce8cf, 0x1bce8cf, 0x7072a1f9, 0x7072a1f9, 0x7072a1f9, 0xcc5a7bed, 0x9671866, 0x9671866, }, 18 }, { "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 0, 8, 8, 8, 16, 8, 24, 8 /* 1024x768xbgra8888 */, (grub_uint32_t []) { 0xef4a3312, 0xf88c2164, 0xfcb94962, 0xf88c2164, 0x16aa3d9d, 0x668e3370, 0xa2ab5089, 0xa2ab5089, 0xa2ab5089, 0xe89836f, 0xe89836f, 0xe89836f, 0x51c0ad6e, 0x51c0ad6e, 0x51c0ad6e, 0xef4a3312, 0x16aa3d9d, 0x16aa3d9d, }, 18 }, { "gfxterm_ar", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x3458f737, 0x9f683632, 0x3458f737, 0xc406e533, 0x59c36f00, 0x59c36f00, 0x487ab5e4, 0x487ab5e4, 0x487ab5e4, 0x7fd259c4, 0x7fd259c4, 0x7fd259c4, 0x9e9c916, 0x9e9c916, 0x9e9c916, 0x59c36f00, 0xc406e533, 0xc406e533, 0x59c36f00, }, 20 }, { "gfxterm_ar", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xf69b4ddf, 0xe4bbd034, 0xf69b4ddf, 0x11f6f535, 0xaa4593fe, 0xaa4593fe, 0x5f72cd5e, 0x5f72cd5e, 0x5f72cd5e, 0x2d53a3c0, 0x2d53a3c0, 0x2d53a3c0, 0xc354a564, 0xc354a564, 0xc354a564, 0xaa4593fe, 0x11f6f535, 0x11f6f535, 0xaa4593fe, }, 20 }, diff --git a/include/grub/gfxmenu_view.h b/include/grub/gfxmenu_view.h index f858e9d49..d3b79a4ee 100644 --- a/include/grub/gfxmenu_view.h +++ b/include/grub/gfxmenu_view.h @@ -84,6 +84,10 @@ struct grub_gfxmenu_view { grub_video_rect_t screen; + int need_to_check_sanity; + grub_video_rect_t terminal_rect; + int terminal_border; + grub_font_t title_font; grub_font_t message_font; char *terminal_font_name; diff --git a/po/exclude.pot b/po/exclude.pot index f3b29cf0b..fb7bb401f 100644 Binary files a/po/exclude.pot and b/po/exclude.pot differ