From dff6dba54bd15cce78a3ab84eb2b78dca6705200 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Wed, 11 Aug 2021 20:58:35 +0100 Subject: [PATCH] theme: support different colored buttons Add the following theme keys: - window.active.button.iconify.unpressed.image.color - window.active.button.max.unpressed.image.color - window.active.button.close.unpressed.image.color - window.inactive.button.iconify.unpressed.image.color - window.inactive.button.max.unpressed.image.color - window.inactive.button.close.unpressed.image.color As far as I can tell, the openbox documentation does not mention the entries listed above, but openbox does support them and some themes do use them. --- include/theme.h | 10 ++++++++-- src/theme.c | 37 +++++++++++++++++++++++++++++++++---- src/xbm/xbm.c | 24 ++++++++++++++---------- 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/include/theme.h b/include/theme.h index a00c7b33..95954a3a 100644 --- a/include/theme.h +++ b/include/theme.h @@ -20,8 +20,14 @@ struct theme { float window_active_title_bg_color[4]; float window_inactive_title_bg_color[4]; - float window_active_button_unpressed_image_color[4]; - float window_inactive_button_unpressed_image_color[4]; + /* buttons */ + float window_active_button_iconify_unpressed_image_color[4]; + float window_active_button_max_unpressed_image_color[4]; + float window_active_button_close_unpressed_image_color[4]; + float window_inactive_button_iconify_unpressed_image_color[4]; + float window_inactive_button_max_unpressed_image_color[4]; + float window_inactive_button_close_unpressed_image_color[4]; + /* TODO: add pressed and hover colors for buttons */ float menu_items_bg_color[4]; float menu_items_text_color[4]; diff --git a/src/theme.c b/src/theme.c index 8d51c084..989b3121 100644 --- a/src/theme.c +++ b/src/theme.c @@ -84,8 +84,12 @@ theme_builtin(struct theme *theme) parse_hexstr("#dddad6", theme->window_active_title_bg_color); parse_hexstr("#f6f5f4", theme->window_inactive_title_bg_color); - parse_hexstr("#000000", theme->window_active_button_unpressed_image_color); - parse_hexstr("#000000", theme->window_inactive_button_unpressed_image_color); + parse_hexstr("#000000", theme->window_active_button_iconify_unpressed_image_color); + parse_hexstr("#000000", theme->window_active_button_max_unpressed_image_color); + parse_hexstr("#000000", theme->window_active_button_close_unpressed_image_color); + parse_hexstr("#000000", theme->window_inactive_button_iconify_unpressed_image_color); + parse_hexstr("#000000", theme->window_inactive_button_max_unpressed_image_color); + parse_hexstr("#000000", theme->window_inactive_button_close_unpressed_image_color); parse_hexstr("#fcfbfa", theme->menu_items_bg_color); parse_hexstr("#000000", theme->menu_items_text_color); @@ -131,11 +135,36 @@ entry(struct theme *theme, const char *key, const char *value) parse_hexstr(value, theme->window_inactive_title_bg_color); } + /* universal button */ if (match(key, "window.active.button.unpressed.image.color")) { - parse_hexstr(value, theme->window_active_button_unpressed_image_color); + parse_hexstr(value, theme->window_active_button_iconify_unpressed_image_color); + parse_hexstr(value, theme->window_active_button_max_unpressed_image_color); + parse_hexstr(value, theme->window_active_button_close_unpressed_image_color); } if (match(key, "window.inactive.button.unpressed.image.color")) { - parse_hexstr(value, theme->window_inactive_button_unpressed_image_color); + parse_hexstr(value, theme->window_inactive_button_iconify_unpressed_image_color); + parse_hexstr(value, theme->window_inactive_button_max_unpressed_image_color); + parse_hexstr(value, theme->window_inactive_button_close_unpressed_image_color); + } + + /* individual buttons */ + if (match(key, "window.active.button.iconify.unpressed.image.color")) { + parse_hexstr(value, theme->window_active_button_iconify_unpressed_image_color); + } + if (match(key, "window.active.button.max.unpressed.image.color")) { + parse_hexstr(value, theme->window_active_button_max_unpressed_image_color); + } + if (match(key, "window.active.button.close.unpressed.image.color")) { + parse_hexstr(value, theme->window_active_button_close_unpressed_image_color); + } + if (match(key, "window.inactive.button.iconify.unpressed.image.color")) { + parse_hexstr(value, theme->window_inactive_button_iconify_unpressed_image_color); + } + if (match(key, "window.inactive.button.max.unpressed.image.color")) { + parse_hexstr(value, theme->window_inactive_button_max_unpressed_image_color); + } + if (match(key, "window.inactive.button.close.unpressed.image.color")) { + parse_hexstr(value, theme->window_inactive_button_close_unpressed_image_color); } if (match(key, "menu.items.bg.color")) { diff --git a/src/xbm/xbm.c b/src/xbm/xbm.c index e815366e..9ea540aa 100644 --- a/src/xbm/xbm.c +++ b/src/xbm/xbm.c @@ -86,19 +86,23 @@ out: void xbm_load(struct theme *theme, struct wlr_renderer *r) { - parse_set_color(theme->window_active_button_unpressed_image_color); - load_button(r, "close.xbm", &theme->xbm_close_active_unpressed, - close_button_normal); - load_button(r, "max.xbm", &theme->xbm_maximize_active_unpressed, - max_button_normal); + parse_set_color(theme->window_active_button_iconify_unpressed_image_color); load_button(r, "iconify.xbm", &theme->xbm_iconify_active_unpressed, iconify_button_normal); - - parse_set_color(theme->window_inactive_button_unpressed_image_color); - load_button(r, "close.xbm", &theme->xbm_close_inactive_unpressed, - close_button_normal); - load_button(r, "max.xbm", &theme->xbm_maximize_inactive_unpressed, + parse_set_color(theme->window_active_button_max_unpressed_image_color); + load_button(r, "max.xbm", &theme->xbm_maximize_active_unpressed, max_button_normal); + parse_set_color(theme->window_active_button_close_unpressed_image_color); + load_button(r, "close.xbm", &theme->xbm_close_active_unpressed, + close_button_normal); + + parse_set_color(theme->window_inactive_button_iconify_unpressed_image_color); load_button(r, "iconify.xbm", &theme->xbm_iconify_inactive_unpressed, iconify_button_normal); + parse_set_color(theme->window_inactive_button_max_unpressed_image_color); + load_button(r, "max.xbm", &theme->xbm_maximize_inactive_unpressed, + max_button_normal); + parse_set_color(theme->window_inactive_button_close_unpressed_image_color); + load_button(r, "close.xbm", &theme->xbm_close_inactive_unpressed, + close_button_normal); }