]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/gfxmenu/gui_list.c: USe viewport when drawing strings.
authorVladimir Testov <vladimir.testov@rosalab.ru>
Sun, 14 Jul 2013 21:10:27 +0000 (23:10 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 14 Jul 2013 21:10:27 +0000 (23:10 +0200)
ChangeLog
grub-core/gfxmenu/gui_list.c

index 8d8596fd16d64bb60fe10d5e27cfd20136db3cde..e9b8232bb01ce856545430af091db2a0d6e4a147 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-07-14  Vladimir Testov <vladimir.testov@rosalab.ru>
+
+       * grub-core/gfxmenu/gui_list.c: USe viewport when drawing strings.
+
 2013-07-14  Vladimir Testov <vladimir.testov@rosalab.ru>
 
        * grub-core/gfxmenu/gui_list.c: Fix height calculation.
index d4e9817c5c0d2e82045b0624bdc73a556fd68b50..d2e96a7b8f789099d43f22a7a778aa0734e4a19f 100644 (file)
@@ -249,6 +249,19 @@ draw_menu (list_impl_t self, int num_shown_items)
                           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 @@ draw_menu (list_impl_t self, int num_shown_items)
 
       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 @@ draw_menu (list_impl_t self, int num_shown_items)
         ((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;
     }