diff options
| author | iamcheeseman <[hidden email]> | 2026-03-01 16:31:24 -0500 |
|---|---|---|
| committer | iamcheeseman <[hidden email]> | 2026-03-01 16:31:24 -0500 |
| commit | 5b52739d9e1740f102cea7895cf8e7e51d925573 (patch) | |
| tree | 5daebe1dc58cb53fe5066d1e6fde119cc1aa7e16 /src/bardata.c | |
| parent | 66625e33aa2a4b1eedb4e2a46d2092999d8d9da4 (diff) | |
Allow changing default colors
Diffstat (limited to 'src/bardata.c')
| -rw-r--r-- | src/bardata.c | 58 |
1 files changed, 51 insertions, 7 deletions
diff --git a/src/bardata.c b/src/bardata.c index 507d8f9..19fedcc 100644 --- a/src/bardata.c +++ b/src/bardata.c @@ -8,8 +8,7 @@ #include "pipe.h" #include "tsar.h" -int fontsize = 16; -color_t default_fg, default_bg; +color_t default_fg = {.pixel=0xFFFFFF}, default_bg = {.pixel=0x202020}; int bar_height = 20; // Global state, oh naur D: @@ -89,6 +88,34 @@ void set_layout(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { } } +color_t parse_color(const char* col_str) { + color_t col = {0}; + + if (col_str[0] == '#') { + col_str++; + } + + col.pixel = strtol(col_str, NULL, 16); + col.color.red = (col.pixel >> 16) & 0xFF; + col.color.green = (col.pixel >> 8) & 0xFF; + col.color.blue = (col.pixel) & 0xFF; + col.color.alpha = 255; + + printf( + "%lx %lx %lx %lx %d %d %d %d\n", + col.pixel, + col.pixel >> 16 & 0xFF, + col.pixel >> 8 & 0xFF, + col.pixel & 0xFF, + col.color.red, + col.color.green, + col.color.blue, + col.color.alpha + ); + + return col; +} + void set_config(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { char *var = argv[1]; if (strcmp(var, "height") == 0) { @@ -100,13 +127,30 @@ void set_config(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { bar_height = new_bar_height; } if (strcmp(var, "font") == 0) { - // fontsize = atoi(argv[2]); load_font(argv[2]); } - if (strcmp(var, "background") == 0) { - + if (strcmp(var, "background") == 0 || strcmp(var, "bg") == 0) { + default_bg = parse_color(argv[2]); + XSetWindowAttributes win_attr = { + .background_pixel = default_bg.pixel, + }; + XChangeWindowAttributes(display, win, CWBackPixel, &win_attr); } - if (strcmp(var, "foreground") == 0) { - + if (strcmp(var, "foreground") == 0 || strcmp(var, "fg") == 0) { + default_fg = parse_color(argv[2]); + XftColorFree( + display, + DefaultVisual(display, DefaultScreen(display)), + DefaultColormap(display, DefaultScreen(display)), + &xft_fg_color + ); + + XftColorAllocName( + display, + DefaultVisual(display, DefaultScreen(display)), + DefaultColormap(display, DefaultScreen(display)), + argv[2], + &xft_fg_color + ); } } |
