adds fg_half as an option to the progressbar
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
a26b40fa28
commit
09e60cb95e
|
@ -153,6 +153,7 @@ cfg_opt_t widget_graph_opts[] =
|
||||||
cfg_opt_t widget_progressbar_bar_opts[] =
|
cfg_opt_t widget_progressbar_bar_opts[] =
|
||||||
{
|
{
|
||||||
CFG_STR((char *) "fg", (char *) NULL, CFGF_NONE),
|
CFG_STR((char *) "fg", (char *) NULL, CFGF_NONE),
|
||||||
|
CFG_STR((char *) "fg_half", (char *) NULL, CFGF_NONE),
|
||||||
CFG_STR((char *) "fg_full", (char *) NULL, CFGF_NONE),
|
CFG_STR((char *) "fg_full", (char *) NULL, CFGF_NONE),
|
||||||
CFG_STR((char *) "bg", (char *) NULL, CFGF_NONE),
|
CFG_STR((char *) "bg", (char *) NULL, CFGF_NONE),
|
||||||
CFG_STR((char *) "bordercolor", (char *) NULL, CFGF_NONE),
|
CFG_STR((char *) "bordercolor", (char *) NULL, CFGF_NONE),
|
||||||
|
|
|
@ -206,10 +206,18 @@ draw_rectangle(DrawCtx *ctx, Area geometry, Bool filled, XColor color)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'fullwidth' represents a full color-pattern range */
|
/** Draw rectangle with gradient colors
|
||||||
|
* \param ctx Draw context
|
||||||
|
* \param geometry geometry
|
||||||
|
* \param fullwidth width of full bar in pixels
|
||||||
|
* \param filled filled rectangle?
|
||||||
|
* \param color color to use from 0%
|
||||||
|
* \param color_half color at 50%
|
||||||
|
* \param color_full color at 100%
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
draw_rectangle_gradient(DrawCtx *ctx, Area geometry, int fullwidth, Bool filled,
|
draw_rectangle_gradient(DrawCtx *ctx, Area geometry, int fullwidth, Bool filled,
|
||||||
XColor color, XColor color_full)
|
XColor color, XColor * color_half, XColor * color_full)
|
||||||
{
|
{
|
||||||
cairo_pattern_t *pat;
|
cairo_pattern_t *pat;
|
||||||
|
|
||||||
|
@ -219,8 +227,15 @@ draw_rectangle_gradient(DrawCtx *ctx, Area geometry, int fullwidth, Bool filled,
|
||||||
pat = cairo_pattern_create_linear(geometry.x, geometry.y, geometry.x + fullwidth, geometry.y);
|
pat = cairo_pattern_create_linear(geometry.x, geometry.y, geometry.x + fullwidth, geometry.y);
|
||||||
cairo_pattern_add_color_stop_rgb(pat, 0, color.red / 65535.0,
|
cairo_pattern_add_color_stop_rgb(pat, 0, color.red / 65535.0,
|
||||||
color.green / 65535.0, color.blue / 65535.0);
|
color.green / 65535.0, color.blue / 65535.0);
|
||||||
cairo_pattern_add_color_stop_rgb(pat, 1, color_full.red / 65535.0,
|
if(color_half)
|
||||||
color_full.green / 65535.0, color_full.blue / 65535.0);
|
cairo_pattern_add_color_stop_rgb(pat, 0.5, color_half->red / 65535.0,
|
||||||
|
color_half->green / 65535.0, color_half->blue / 65535.0);
|
||||||
|
if(color_full)
|
||||||
|
cairo_pattern_add_color_stop_rgb(pat, 1, color_full->red / 65535.0,
|
||||||
|
color_full->green / 65535.0, color_full->blue / 65535.0);
|
||||||
|
else
|
||||||
|
cairo_pattern_add_color_stop_rgb(pat, 1, color.red / 65535.0,
|
||||||
|
color.green / 65535.0, color.blue / 65535.0);
|
||||||
|
|
||||||
cairo_set_source(ctx->cr, pat);
|
cairo_set_source(ctx->cr, pat);
|
||||||
|
|
||||||
|
@ -232,7 +247,7 @@ draw_rectangle_gradient(DrawCtx *ctx, Area geometry, int fullwidth, Bool filled,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cairo_rectangle(ctx->cr, geometry.x + 1, geometry.y, geometry.width - 1, geometry.height - 1);
|
cairo_rectangle(ctx->cr, geometry.x + 1, geometry.y, geometry.width - 1, geometry.height - 1);
|
||||||
cairo_set_source(ctx->cr, pat);
|
cairo_stroke(ctx->cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_pattern_destroy(pat);
|
cairo_pattern_destroy(pat);
|
||||||
|
|
|
@ -95,7 +95,7 @@ void draw_context_delete(DrawCtx *);
|
||||||
|
|
||||||
void draw_text(DrawCtx *, Area, Alignment, int, XftFont *, char *, XColor fg, XColor bg);
|
void draw_text(DrawCtx *, Area, Alignment, int, XftFont *, char *, XColor fg, XColor bg);
|
||||||
void draw_rectangle(DrawCtx *, Area, Bool, XColor);
|
void draw_rectangle(DrawCtx *, Area, Bool, XColor);
|
||||||
void draw_rectangle_gradient(DrawCtx *, Area, int, Bool, XColor, XColor);
|
void draw_rectangle_gradient(DrawCtx *, Area, int, Bool, XColor, XColor *, XColor *);
|
||||||
|
|
||||||
void draw_graph_setup(DrawCtx *);
|
void draw_graph_setup(DrawCtx *);
|
||||||
void draw_graph(DrawCtx *, int, int, int, int *, int *, int, XColor);
|
void draw_graph(DrawCtx *, int, int, int, int *, int *, int, XColor);
|
||||||
|
|
|
@ -42,8 +42,10 @@ typedef struct
|
||||||
float height;
|
float height;
|
||||||
/** Foreground color */
|
/** Foreground color */
|
||||||
XColor *fg;
|
XColor *fg;
|
||||||
|
/** Foreground color when bar is half-full */
|
||||||
|
XColor **pfg_half;
|
||||||
/** Foreground color when bar is full */
|
/** Foreground color when bar is full */
|
||||||
XColor *fg_full;
|
XColor **pfg_full;
|
||||||
/** Background color */
|
/** Background color */
|
||||||
XColor *bg;
|
XColor *bg;
|
||||||
/** Border color */
|
/** Border color */
|
||||||
|
@ -74,7 +76,7 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
widget->area.y = 0;
|
widget->area.y = 0;
|
||||||
|
|
||||||
margin_top = (int) (widget->statusbar->height * (1 - d->height)) / 2 + 0.5 + widget->area.y;
|
margin_top = (int) (widget->statusbar->height * (1 - d->height)) / 2 + 0.5 + widget->area.y;
|
||||||
pb_height = (int) ((widget->statusbar->height * d->height - (d->gap * (d->bars - 1))) / d->bars + 0.5);
|
pb_height = (int) ((widget->statusbar->height * d->height - (d->gap * (d->bars - 1))) / d->bars + 0.5);
|
||||||
left_offset = widget->area.x + d->padding;
|
left_offset = widget->area.x + d->padding;
|
||||||
|
|
||||||
for(i = 0; i < d->bars; i++)
|
for(i = 0; i < d->bars; i++)
|
||||||
|
@ -94,7 +96,8 @@ progressbar_draw(Widget *widget, DrawCtx *ctx, int offset,
|
||||||
rectangle.y = margin_top + 1;
|
rectangle.y = margin_top + 1;
|
||||||
rectangle.width = pwidth;
|
rectangle.width = pwidth;
|
||||||
rectangle.height = pb_height - 2;
|
rectangle.height = pb_height - 2;
|
||||||
draw_rectangle_gradient(ctx, rectangle, width - 2, True, d->fg[i], d->fg_full[i]);
|
draw_rectangle_gradient(ctx, rectangle, width - 2, True, d->fg[i],
|
||||||
|
d->pfg_half[i], d->pfg_full[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(width - 2 - pwidth > 0) /* not filled area */
|
if(width - 2 - pwidth > 0) /* not filled area */
|
||||||
|
@ -155,7 +158,8 @@ progressbar_new(Statusbar *statusbar, cfg_t *config)
|
||||||
}
|
}
|
||||||
|
|
||||||
d->fg = p_new(XColor, d->bars);
|
d->fg = p_new(XColor, d->bars);
|
||||||
d->fg_full = p_new(XColor, d->bars);
|
d->pfg_full = p_new(XColor *, d->bars);
|
||||||
|
d->pfg_half = p_new(XColor *, d->bars);
|
||||||
d->bg = p_new(XColor, d->bars);
|
d->bg = p_new(XColor, d->bars);
|
||||||
d->bordercolor = p_new(XColor, d->bars);
|
d->bordercolor = p_new(XColor, d->bars);
|
||||||
d->percent = p_new(int, d->bars);
|
d->percent = p_new(int, d->bars);
|
||||||
|
@ -169,10 +173,17 @@ progressbar_new(Statusbar *statusbar, cfg_t *config)
|
||||||
else
|
else
|
||||||
d->fg[i] = globalconf.screens[statusbar->screen].colors_normal[ColFG];
|
d->fg[i] = globalconf.screens[statusbar->screen].colors_normal[ColFG];
|
||||||
|
|
||||||
|
if((color = cfg_getstr(cfg, "fg_half")))
|
||||||
|
{
|
||||||
|
d->pfg_half[i] = p_new(XColor, 1);
|
||||||
|
*(d->pfg_half[i]) = draw_color_new(globalconf.display, phys_screen, color);
|
||||||
|
}
|
||||||
|
|
||||||
if((color = cfg_getstr(cfg, "fg_full")))
|
if((color = cfg_getstr(cfg, "fg_full")))
|
||||||
d->fg_full[i] = draw_color_new(globalconf.display, phys_screen, color);
|
{
|
||||||
else
|
d->pfg_full[i] = p_new(XColor, 1);
|
||||||
d->fg_full[i] = d->fg[i];
|
*(d->pfg_full[i]) = draw_color_new(globalconf.display, phys_screen, color);
|
||||||
|
}
|
||||||
|
|
||||||
if((color = cfg_getstr(cfg, "bg")))
|
if((color = cfg_getstr(cfg, "bg")))
|
||||||
d->bg[i] = draw_color_new(globalconf.display, phys_screen, color);
|
d->bg[i] = draw_color_new(globalconf.display, phys_screen, color);
|
||||||
|
@ -183,8 +194,7 @@ progressbar_new(Statusbar *statusbar, cfg_t *config)
|
||||||
d->bordercolor[i] = draw_color_new(globalconf.display, phys_screen, color);
|
d->bordercolor[i] = draw_color_new(globalconf.display, phys_screen, color);
|
||||||
else
|
else
|
||||||
d->bordercolor[i] = d->fg[i];
|
d->bordercolor[i] = d->fg[i];
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
d->height = cfg_getfloat(config, "height");
|
d->height = cfg_getfloat(config, "height");
|
||||||
d->gap = cfg_getint(config, "gap");
|
d->gap = cfg_getint(config, "gap");
|
||||||
|
|
Loading…
Reference in New Issue