]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/gfxmenu/gui_progress_bar.c: New option ``highlight_overlay``
authorVladimir Testov <vladimir.testov@rosalab.ru>
Thu, 17 Oct 2013 11:42:49 +0000 (15:42 +0400)
committerVladimir Testov <vladimir.testov@rosalab.ru>
Thu, 17 Oct 2013 11:42:49 +0000 (15:42 +0400)
       * docs/gurb.texi: Likewise.

ChangeLog
docs/grub.texi
grub-core/gfxmenu/gui_progress_bar.c

index 52d856671d58d032574620af1194702db851a728..015489a823ad85a31023f68ee5a742780c2333f9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-17  Vladimir Testov  <vladimir.testov@rosalab.ru>
+
+       * grub-core/gfxmenu/gui_progress_bar.c: New option ``highlight_overlay``
+       * docs/gurb.texi: Likewise.
+
 2013-10-17  Vladimir Testov  <vladimir.testov@rosalab.ru>
 
        * grub-core/gfxmenu/gui_progress_bar.c (draw_pixmap_bar): Fixed bug.
index b2f5fd85410ce072b07621100c05c2a9d37e1ec5..40eb9ed66ba9ec093bce12044a73e05771c45dc4 100644 (file)
@@ -2121,6 +2121,14 @@ The following is a list of the components and the properties they support.
       Example: ``progress_hl_*.png``.
       If the value is equal to ``bar_style`` then no styled boxes
       will be shown.
+   @item highlight_overlay
+      @tab If this option is set to ``true`` then the highlight box
+      side slices (every slice except the center slice) will overlay the
+      frame box side slices. And the center slice of the highlight box
+      can move all the way (from top to bottom), being drawn on the center
+      slice of the frame box. That way we can make a progress bar with
+      round-shaped edges so there won't be a free space from the highlight to
+      the frame in top and bottom scrollbar positions. Default is ``false``.
    @item font
       @tab The font to use for progress bar.
    @item text
index 946ec3683e8d742ec7e5e62a6ee4720375d25f98..5e0260e013cf4ce8cb869a5327e1970a5fea83d9 100644 (file)
@@ -52,6 +52,7 @@ struct grub_gui_progress_bar
   char *highlight_pattern;
   grub_gfxmenu_box_t bar_box;
   grub_gfxmenu_box_t highlight_box;
+  int highlight_overlay;
 };
 
 typedef struct grub_gui_progress_bar *grub_gui_progress_bar_t;
@@ -152,17 +153,29 @@ draw_pixmap_bar (grub_gui_progress_bar_t self)
   int tracklen = w - bar_h_pad;
   int trackheight = h - bar_v_pad;
   int barwidth;
+  int hlheight = trackheight;
+  int hlx = bar_l_pad;
+  int hly = bar_t_pad;
 
   bar->set_content_size (bar, tracklen, trackheight);
   bar->draw (bar, 0, 0);
 
+  if (self->highlight_overlay)
+    {
+      tracklen += hl_h_pad;
+      hlx -= hl_l_pad;
+      hly -= hl_t_pad;
+    }
+  else
+    hlheight -= hl_v_pad;
+
   barwidth = (tracklen * (self->value - self->start) 
              / (self->end - self->start));
 
   if (barwidth >= hl_h_pad)
     {
-      hl->set_content_size (hl, barwidth - hl_h_pad, h - bar_v_pad - hl_v_pad);
-      hl->draw (hl, bar_l_pad, bar_t_pad);
+      hl->set_content_size (hl, barwidth - hl_h_pad, hlheight);
+      hl->draw (hl, hlx, hly);
     }
 }
 
@@ -339,6 +352,10 @@ progress_bar_set_property (void *vself, const char *name, const char *value)
       grub_free (self->highlight_pattern);
       self->highlight_pattern = value ? grub_strdup (value) : 0;
     }
+  else if (grub_strcmp (name, "highlight_overlay") == 0)
+    {
+      self->highlight_overlay = grub_strcmp (value, "true") == 0;
+    }
   else if (grub_strcmp (name, "theme_dir") == 0)
     {
       self->need_to_recreate_pixmaps = 1;
@@ -399,6 +416,7 @@ grub_gui_progress_bar_new (void)
   self->border_color = black;
   self->bg_color = gray;
   self->fg_color = lightgray;
+  self->highlight_overlay = 0;
 
   return (grub_gui_component_t) self;
 }