]> git.proxmox.com Git - grub2.git/commitdiff
* grub-core/gfxmenu/gui_list.c: Draw the scrollbar in a separate
authorVladimir Testov <vladimir.testov@rosalab.ru>
Tue, 8 Oct 2013 12:27:56 +0000 (16:27 +0400)
committerVladimir Testov <vladimir.testov@rosalab.ru>
Tue, 8 Oct 2013 12:27:56 +0000 (16:27 +0400)
       viewport.

ChangeLog
grub-core/gfxmenu/gui_list.c

index bb931829aa88806ec44e92c1c06a6b2ddd66382c..0905f2b8889a5157ae5945da366a74af4494d654 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-08  Vladimir Testov  <vladimir.testov@rosalab.ru>
+
+       * grub-core/gfxmenu/gui_list.c: Draw the scrollbar in a separate
+       viewport.
+
 2013-10-08  Vladimir Testov  <vladimir.testov@rosalab.ru>
 
        * grub-core/gfxmenu/gui_list.c (list_get_minimal_size): Corrected
index c04612c89e23b97a2764318ad82f87f5f6db871e..6b81523edc8f3486cab038693dc17727eaaf82b0 100644 (file)
@@ -193,7 +193,7 @@ make_selected_item_visible (list_impl_t self)
 static void
 draw_scrollbar (list_impl_t self,
                 int value, int extent, int min, int max,
-                int rightx, int topy, int height)
+                int scrollbar_width, int scrollbar_height)
 {
   grub_gfxmenu_box_t frame = self->scrollbar_frame;
   grub_gfxmenu_box_t thumb = self->scrollbar_thumb;
@@ -201,21 +201,23 @@ draw_scrollbar (list_impl_t self,
                             + frame->get_bottom_pad (frame));
   int frame_horizontal_pad = (frame->get_left_pad (frame)
                               + frame->get_right_pad (frame));
-  int tracktop = topy + frame->get_top_pad (frame);
-  int tracklen = height - frame_vertical_pad;
-  frame->set_content_size (frame, self->scrollbar_width, tracklen);
+  int thumb_vertical_pad = (thumb->get_top_pad (thumb)
+                            + thumb->get_bottom_pad (thumb));
+  int thumb_horizontal_pad = (thumb->get_left_pad (thumb)
+                              + thumb->get_right_pad (thumb));
+  int tracktop = frame->get_top_pad (frame);
+  int tracklen = scrollbar_height - frame_vertical_pad;
+  frame->set_content_size (frame,
+                           scrollbar_width - frame_horizontal_pad,
+                           tracklen);
   int thumby = tracktop + tracklen * (value - min) / (max - min);
   int thumbheight = tracklen * extent / (max - min) + 1;
   thumb->set_content_size (thumb,
-                           self->scrollbar_width - frame_horizontal_pad,
-                           thumbheight - (thumb->get_top_pad (thumb)
-                                          + thumb->get_bottom_pad (thumb)));
-  frame->draw (frame,
-               rightx - (self->scrollbar_width + frame_horizontal_pad),
-               topy);
-  thumb->draw (thumb,
-               rightx - (self->scrollbar_width - frame->get_right_pad (frame)),
-               thumby);
+                           scrollbar_width - frame_horizontal_pad
+                           - thumb_horizontal_pad,
+                           thumbheight - thumb_vertical_pad);
+  frame->draw (frame, 0, 0);
+  thumb->draw (thumb, frame->get_left_pad (frame), thumby);
 }
 
 /* Draw the list of items.  */
@@ -368,13 +370,19 @@ list_paint (void *vself, const grub_video_rect_t *region)
     grub_gui_restore_viewport (&vpsave2);
 
     if (drawing_scrollbar)
-      draw_scrollbar (self,
-                     self->first_shown_index, num_shown_items,
-                     0, self->view->menu->size,
-                     self->bounds.width - box_right_pad
-                     + self->scrollbar_width,
-                     box_top_pad,
-                     self->bounds.height - box_top_pad - box_bottom_pad);
+      {
+        /* Draw the scrollbar in the east slice. */
+        content_rect.x = self->bounds.width - box_right_pad;
+        content_rect.width = box_right_pad;
+
+        grub_gui_set_viewport (&content_rect, &vpsave2);
+        draw_scrollbar (self,
+                        self->first_shown_index, num_shown_items,
+                        0, self->view->menu->size,
+                        self->scrollbar_width,
+                        content_rect.height);
+        grub_gui_restore_viewport (&vpsave2);
+      }
   }
 
   grub_gui_restore_viewport (&vpsave);