diff options
Diffstat (limited to 'src/bardata.c')
| -rw-r--r-- | src/bardata.c | 108 |
1 files changed, 67 insertions, 41 deletions
diff --git a/src/bardata.c b/src/bardata.c index b182997..f1495ea 100644 --- a/src/bardata.c +++ b/src/bardata.c @@ -19,6 +19,54 @@ size_t left_size = 0, right_size = 0, center_size = 0; int padding = 0; int comp_gap = 0; +void change_color(const char* name, color_t* xft_color) { + if (xft_color != NULL) { + XftColorFree( + display, + DefaultVisual(display, DefaultScreen(display)), + DefaultColormap(display, DefaultScreen(display)), + xft_color + ); + } + + XftColorAllocName( + display, + DefaultVisual(display, DefaultScreen(display)), + DefaultColormap(display, DefaultScreen(display)), + name, + xft_color + ); +} + +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; + + return col; +} + +void set_default_background(const char* name) { + change_color(name, &default_bg); + XSetWindowAttributes win_attr = { + .background_pixel = default_bg.pixel, + }; + XChangeWindowAttributes(display, win, CWBackPixel, &win_attr); +} + +void init_bardata(void) { + change_color("#FFFFFF", &default_fg); + set_default_background("#202020"); +} + comp_t *find_comp(char *name) { for (size_t i = 0; i < comps_size; i++) { if (strcmp(comps[i].name, name) == 0) { @@ -27,9 +75,11 @@ comp_t *find_comp(char *name) { } comp_t *comp = &comps[comps_size++]; + memset(comp, 0, sizeof(comp_t)); + strcpy(comp->name, name); - comp->fg = default_fg; - comp->bg = default_bg; + comp->fg = &default_fg; + comp->bg = &default_bg; return comp; } @@ -52,22 +102,6 @@ void add_component(comp_side_t side, char *name) { } } -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; - - return col; -} - void set_component(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { comp_t* comp = find_comp(argv[1]); @@ -78,8 +112,19 @@ void set_component(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { continue; } if (strcmp(argv[i], "-fg") == 0) { - const char* col_str = argv[++i]; - comp->fg = parse_color(col_str); + const char* col_str = argv[i + 1]; + comp->custom_fg = parse_color(col_str); + comp->fg = &comp->custom_fg; + change_color(argv[i + 1], comp->fg); + i++; + continue; + } + if (strcmp(argv[i], "-bg") == 0) { + const char* col_str = argv[i + 1]; + comp->custom_bg = parse_color(col_str); + comp->bg = &comp->custom_bg; + change_color(argv[i + 1], comp->bg); + i++; continue; } } @@ -108,7 +153,6 @@ void set_layout(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { } } - void set_config(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { char *var = argv[1]; if (strcmp(var, "-height") == 0) { @@ -133,29 +177,11 @@ void set_config(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { return; } 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); + set_default_background(argv[2]); return; } 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 - ); + change_color(argv[2], &default_fg); return; } } |
