[5/?] grub-core/gfxmenu/gui_list.c - print scrollbar in separate viewport
PATCH 1/1 [5/?] grub-core/gfxmenu/gui_list.c - print scrollbar in separate viewport
Changelog entry: grub-core/gfxmenu/gui_list.c: print scrollbar in separate viewport
Print the scrollbar in the separate viewport. Patch makes it clear where exactly the scrollbar will be drawn. Also it simplifies the drawing of the scrollbar.
scrollbar thumb and frame processing has been fixed. Now we can use any kind of styled box for thumb and frame.
scrollbar_width is total width of the scrollbar
backward compatibility is contained
Signature · 4 lines
With best regards, _______________________________ Vladimir Testov, ROSA Laboratory. www.rosalab.ru
grub-core/gfxmenu/gui_list.c +28 -20
@@ -211,7 +211,7 @@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;
@@ -219,21 +219,23 @@ + 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. */
@@ -390,13 +392,19 @@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);