Skip to contentSkip to conversation

[2/?] grub-core/gfxmenu/gui_list.c - menu entry's width bug

PATCH New Vladimir Testov 1 participant 1 message Jul 11, 2013

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 [2/?] grub-core/gfxmenu/gui_list.c - menu entry's width bug

You can see a graphical bug while using pixmap styled box of the selected menu entry.

If the line is long enough or the font size is big enough, then the text of the selected menu entry will be drawn on the styled box.

See screenshots.

Signature · 4 lines
With best regards,
_______________________________
Vladimir Testov, ROSA Laboratory.
www.rosalab.ru
grub-core/gfxmenu/gui_list.c +19 -7
diff -Naur grub-new/grub-core/gfxmenu/gui_list.c grub-new2/grub-core/gfxmenu/gui_list.c
@@ -249,6 +249,19 @@
 			   oviewport.width - 2 * boxpad,
 			   oviewport.height - 2 * boxpad);
 
+  int cwidth = oviewport.width - 2 * boxpad - 2;
+  if (selbox->get_border_width)
+    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;
+
+  grub_video_rect_t svpsave, sviewport;
+  sviewport.x = sel_leftpad + string_left_offset;
+  sviewport.width = cwidth - string_left_offset;
+  sviewport.height = item_height;
+
   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++)
@@ -258,10 +271,6 @@
 
       if (is_selected)
         {
-	  int cwidth = oviewport.width - 2 * boxpad - 2;
-	  if (selbox->get_border_width)
-	    cwidth -= selbox->get_border_width (selbox);
-	  selbox->set_content_size (selbox, cwidth, item_height);
           selbox->draw (selbox, 0,
                         item_top - sel_toppad);
         }
@@ -283,12 +292,15 @@
         ((is_selected && self->selected_item_color_set)
          ? self->selected_item_color
          : self->item_color);
+
+      sviewport.y = item_top;
+      grub_gui_set_viewport (&sviewport, &svpsave);
       grub_font_draw_string (item_title,
                              font,
                              grub_video_map_rgba_color (text_color),
-                             sel_leftpad + self->icon_width + icon_text_space,
-                             (item_top + (item_height - (ascent + descent))
-                              / 2 + ascent));
+                             0,
+                             string_top_offset);
+      grub_gui_restore_viewport (&svpsave);
 
       item_top += item_height + item_vspace;
     }