Add background color to i3bar segments
Patch status: rejected
Patch by S0lll0s
To apply this patch, use:
curl http://cr.i3wm.org/patch/418/raw.patch | git am
b/i3bar/include/common.h
16 |
@@ -38,6 +38,7 @@ struct status_block { |
17 |
i3String *full_text; |
18 |
|
19 |
char *color; |
20 |
+ char *bgcolor; |
21 |
uint32_t min_width; |
22 |
blockalign_t align; |
23 |
|
b/i3bar/src/child.c
28 |
@@ -195,6 +195,9 @@ static int stdin_string(void *context, const unsigned char *val, unsigned int le |
29 |
if (strcasecmp(ctx->last_map_key, "color") == 0) { |
30 |
sasprintf(&(ctx->block.color), "%.*s", len, val); |
31 |
} |
32 |
+ if (strcasecmp(ctx->last_map_key, "background_color") == 0) { |
33 |
+ sasprintf(&(ctx->block.bgcolor), "%.*s", len, val); |
34 |
+ } |
35 |
if (strcasecmp(ctx->last_map_key, "align") == 0) { |
36 |
if (len == strlen("left") && !strncmp((const char*)val, "left", strlen("left"))) { |
37 |
ctx->block.align = ALIGN_LEFT; |
b/i3bar/src/xcb.c
42 |
@@ -178,7 +178,8 @@ void refresh_statusline(void) { |
43 |
continue; |
44 |
|
45 |
uint32_t colorpixel = (block->color ? get_colorpixel(block->color) : colors.bar_fg); |
46 |
- set_font_colors(statusline_ctx, colorpixel, colors.bar_bg); |
47 |
+ uint32_t bgcolorpix = (block->bgcolor ? get_colorpixel(block->bgcolor) : colors.bar_bg); |
48 |
+ set_font_colors(statusline_ctx, colorpixel, bgcolorpix); |
49 |
draw_text(block->full_text, statusline_pm, statusline_ctx, x + block->x_offset, 1, block->width); |
50 |
x += block->width + block->x_offset + block->x_append; |
51 |
|
b/libi3/font.c
56 |
@@ -29,6 +29,9 @@ static xcb_visualtype_t *root_visual_type; |
57 |
static double pango_font_red; |
58 |
static double pango_font_green; |
59 |
static double pango_font_blue; |
60 |
+static double pango_bgfont_red; |
61 |
+static double pango_bgfont_green; |
62 |
+static double pango_bgfont_blue; |
63 |
|
64 |
/* Necessary to track whether the dpi changes and trigger a LOG() message, |
65 |
* which is more easily visible to users. */ |
66 |
@@ -120,6 +123,10 @@ static void draw_text_pango(const char *text, size_t text_len, |
67 |
pango_layout_set_text(layout, text, text_len); |
68 |
|
69 |
/* Do the drawing */ |
70 |
+ cairo_set_source_rgb(cr, pango_bgfont_red, pango_bgfont_green, pango_bgfont_blue); |
71 |
+ cairo_rectangle(cr, x, y, max_width, savedFont->height); |
72 |
+ cairo_fill(cr); |
73 |
+ |
74 |
cairo_set_source_rgb(cr, pango_font_red, pango_font_green, pango_font_blue); |
75 |
pango_cairo_update_layout(cr, layout); |
76 |
pango_layout_get_pixel_size(layout, NULL, &height); |
77 |
@@ -303,6 +310,11 @@ void set_font_colors(xcb_gcontext_t gc, uint32_t foreground, uint32_t background |
78 |
pango_font_red = ((foreground >> 16) & 0xff) / 255.0; |
79 |
pango_font_green = ((foreground >> 8) & 0xff) / 255.0; |
80 |
pango_font_blue = (foreground & 0xff) / 255.0; |
81 |
+ |
82 |
+ /* Save the background font */ |
83 |
+ pango_bgfont_red = ((background >> 16) & 0xff) / 255.0; |
84 |
+ pango_bgfont_green = ((background >> 8) & 0xff) / 255.0; |
85 |
+ pango_bgfont_blue = (background & 0xff) / 255.0; |
86 |
break; |
87 |
#endif |
88 |
default: |