From 946fd07357cd350b850b91457c6f3dbec97175df Mon Sep 17 00:00:00 2001 From: Vladimir Testov Date: Thu, 17 Oct 2013 15:42:49 +0400 Subject: [PATCH] * grub-core/gfxmenu/gui_progress_bar.c: New option ``highlight_overlay`` * docs/gurb.texi: Likewise. --- ChangeLog | 5 +++++ docs/grub.texi | 8 ++++++++ grub-core/gfxmenu/gui_progress_bar.c | 22 ++++++++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 52d856671..015489a82 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-10-17 Vladimir Testov + + * grub-core/gfxmenu/gui_progress_bar.c: New option ``highlight_overlay`` + * docs/gurb.texi: Likewise. + 2013-10-17 Vladimir Testov * grub-core/gfxmenu/gui_progress_bar.c (draw_pixmap_bar): Fixed bug. diff --git a/docs/grub.texi b/docs/grub.texi index b2f5fd854..40eb9ed66 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -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 diff --git a/grub-core/gfxmenu/gui_progress_bar.c b/grub-core/gfxmenu/gui_progress_bar.c index 946ec3683..5e0260e01 100644 --- a/grub-core/gfxmenu/gui_progress_bar.c +++ b/grub-core/gfxmenu/gui_progress_bar.c @@ -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; }