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.
This commit is contained in:
Johan Malm 2021-08-11 20:58:35 +01:00
parent 7ef4feddc7
commit dff6dba54b
3 changed files with 55 additions and 16 deletions

View file

@ -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];

View file

@ -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")) {

View file

@ -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);
}