Commit 946fd073 authored by Vladimir Testov's avatar Vladimir Testov

* grub-core/gfxmenu/gui_progress_bar.c: New option ``highlight_overlay``

       * docs/gurb.texi: Likewise.
parent 9c13c576
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.
......@@ -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
......
......@@ -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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment