+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.
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
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;
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);
}
}
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;
self->border_color = black;
self->bg_color = gray;
self->fg_color = lightgray;
+ self->highlight_overlay = 0;
return (grub_gui_component_t) self;
}