From 5122a9be69385f88615a38429d5e1855fb3d71a5 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Fri, 21 Aug 2020 19:43:34 +0100 Subject: [PATCH] Support icon colors xbm/parse: support specifiying color when loading icon theme.c: parse window.active.button.unpressed.image.color --- include/theme/theme.h | 1 + include/theme/xbm/parse.h | 6 ++++++ src/theme/theme.c | 2 ++ src/theme/xbm/parse.c | 19 +++++++++++-------- src/theme/xbm/xbm.c | 4 ++-- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/include/theme/theme.h b/include/theme/theme.h index 1478624e..558f6df1 100644 --- a/include/theme/theme.h +++ b/include/theme/theme.h @@ -14,6 +14,7 @@ struct theme { float window_active_title_bg_color[4]; float window_active_handle_bg_color[4]; float window_inactive_title_bg_color[4]; + float window_active_button_unpressed_image_color[4]; struct wlr_texture *xbm_close; struct wlr_texture *xbm_maximize; struct wlr_texture *xbm_iconify; diff --git a/include/theme/xbm/parse.h b/include/theme/xbm/parse.h index bd09d8d9..4bd4c942 100644 --- a/include/theme/xbm/parse.h +++ b/include/theme/xbm/parse.h @@ -16,6 +16,12 @@ struct pixmap { int height; }; +/** + * parse_set_color - set color to be used when parsing icons + * @rgba: four floats representing red, green, blue, alpha + */ +void parse_set_color(float *rgba); + /** * parse_xbm_tokens - parse xbm tokens and create pixmap * @tokens: token vector diff --git a/src/theme/theme.c b/src/theme/theme.c index 8124cc18..9a016707 100644 --- a/src/theme/theme.c +++ b/src/theme/theme.c @@ -49,6 +49,8 @@ static void entry(const char *key, const char *value) parse_hexstr(value, theme.window_active_handle_bg_color); if (match(key, "window.inactive.title.bg.color")) parse_hexstr(value, theme.window_inactive_title_bg_color); + if (match(key, "window.active.button.unpressed.image.color")) + parse_hexstr(value, theme.window_active_button_unpressed_image_color); } static void rtrim(char **s) diff --git a/src/theme/xbm/parse.c b/src/theme/xbm/parse.c index a171428e..dae2ced0 100644 --- a/src/theme/xbm/parse.c +++ b/src/theme/xbm/parse.c @@ -14,16 +14,20 @@ #include "theme/xbm/parse.h" #include "common/bug-on.h" -/* TODO: should be window.active.button.unpressed.image.color */ -static unsigned char defaultcolor[] = { 255, 255, 255, 255 }; +static uint32_t color; -static uint32_t u32(unsigned char *rgba) +static uint32_t u32(float *rgba) { uint32_t r[4] = { 0 }; for (int i = 0; i < 4; i++) - r[i] = rgba[i]; - return ((r[3] & 0xff) << 24) | ((r[2] & 0xff) << 16) | - ((r[1] & 0xff) << 8) | (r[0] & 0xff); + r[i] = rgba[i] * 255; + return ((r[3] & 0xff) << 24) | ((r[0] & 0xff) << 16) | + ((r[1] & 0xff) << 8) | (r[2] & 0xff); +} + +void parse_set_color(float *rgba) +{ + color = u32(rgba); } static void process_bytes(struct pixmap *pixmap, struct token *tokens) @@ -44,8 +48,7 @@ static void process_bytes(struct pixmap *pixmap, struct token *tokens) return; int bit = 1 << (col % 8); if (t->value & bit) - pixmap->data[row * pixmap->width + col] = - u32(defaultcolor); + pixmap->data[row * pixmap->width + col] = color; } ++t; } diff --git a/src/theme/xbm/xbm.c b/src/theme/xbm/xbm.c index 6ad0d1eb..d1b2969b 100644 --- a/src/theme/xbm/xbm.c +++ b/src/theme/xbm/xbm.c @@ -71,8 +71,8 @@ out: void xbm_load(struct wlr_renderer *r) { + parse_set_color(theme.window_active_button_unpressed_image_color); load_button(r, "close.xbm", &theme.xbm_close, close_button_normal); load_button(r, "max.xbm", &theme.xbm_maximize, max_button_normal); - load_button(r, "iconify.xbm", &theme.xbm_iconify, - iconify_button_normal); + load_button(r, "iconify.xbm", &theme.xbm_iconify, iconify_button_normal); }