diff -Naur grub-new3/grub-core/gfxmenu/gui_list.c grub-new4/grub-core/gfxmenu/gui_list.c --- grub-new3/grub-core/gfxmenu/gui_list.c 2013-07-15 15:30:26.585116409 +0400 +++ grub-new4/grub-core/gfxmenu/gui_list.c 2013-07-15 16:36:34.544169956 +0400 @@ -273,16 +273,30 @@ cwidth -= selbox->get_border_width (selbox); selbox->set_content_size (selbox, cwidth, item_height); - int string_left_offset = self->icon_width + icon_text_space; - int string_top_offset = (item_height - (ascent + descent)) / 2 + ascent; + int item_left_offset = self->icon_width + icon_text_space; + int item_top_offset = (item_height - (ascent + descent)) / 2 + ascent; + int sel_item_top_offset; + int top_offset; grub_video_rect_t svpsave, sviewport; - sviewport.x = sel_leftpad + string_left_offset; - sviewport.width = cwidth - string_left_offset; + sviewport.x = sel_leftpad + item_left_offset; + sviewport.width = cwidth - item_left_offset; sviewport.height = item_height; check_colors (self); + if (self->selected_item_font_set) + { + int sel_ascent = grub_font_get_ascent (self->selected_item_font); + int sel_descent = grub_font_get_descent (self->selected_item_font); + sel_item_top_offset = (item_height - (sel_ascent + sel_descent)) / 2 + + sel_ascent; + } + else + { + sel_item_top_offset = item_top_offset; + } + for (visible_index = 0, menu_index = self->first_shown_index; visible_index < num_shown_items && menu_index < self->view->menu->size; visible_index++, menu_index++) @@ -297,11 +311,13 @@ selbox->draw (selbox, 0, item_top - sel_toppad); font = self->selected_item_font; color = self->selected_item_color; + top_offset = sel_item_top_offset; } else { font = self->item_font; color = self->item_color; + top_offset = item_top_offset; } icon = get_item_icon (self, menu_index); @@ -320,7 +336,7 @@ font, color, 0, - string_top_offset); + top_offset); grub_gui_restore_viewport (&svpsave); item_top += item_height + item_vspace;