aboutsummaryrefslogtreecommitdiff
path: root/src/bardata.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bardata.c')
-rw-r--r--src/bardata.c108
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;
}
}