From 83331e57ed09c7536c6beaea9ebd3f6e5346b580 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Fri, 21 Aug 2020 20:35:06 +0100 Subject: [PATCH] Support inactive unpressed icons --- data/themes/labwc-default/openbox-3/themerc | 1 + include/theme/theme.h | 14 +++++++++++--- src/deco.c | 11 ++++++----- src/output.c | 21 +++++++++++++++------ src/theme/theme.c | 7 +++++++ src/theme/xbm/xbm.c | 11 ++++++++--- 6 files changed, 48 insertions(+), 17 deletions(-) diff --git a/data/themes/labwc-default/openbox-3/themerc b/data/themes/labwc-default/openbox-3/themerc index 1a1c033c..6b505707 100644 --- a/data/themes/labwc-default/openbox-3/themerc +++ b/data/themes/labwc-default/openbox-3/themerc @@ -4,4 +4,5 @@ window.active.handle.bg.color: #3c7cb7 window.inactive.title.bg.color: #efece6 window.active.button.unpressed.image.color = #ffffff +window.inactive.button.unpressed.image.color = #000000 diff --git a/include/theme/theme.h b/include/theme/theme.h index 558f6df1..351b1362 100644 --- a/include/theme/theme.h +++ b/include/theme/theme.h @@ -13,11 +13,19 @@ 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; + float window_inactive_button_unpressed_image_color[4]; + + struct wlr_texture *xbm_close_active_unpressed; + struct wlr_texture *xbm_maximize_active_unpressed; + struct wlr_texture *xbm_iconify_active_unpressed; + + struct wlr_texture *xbm_close_inactive_unpressed; + struct wlr_texture *xbm_maximize_inactive_unpressed; + struct wlr_texture *xbm_iconify_inactive_unpressed; }; extern struct theme theme; diff --git a/src/deco.c b/src/deco.c index 6ad7b82e..62799e27 100644 --- a/src/deco.c +++ b/src/deco.c @@ -42,23 +42,24 @@ struct wlr_box deco_box(struct view *view, enum deco_part deco_part) } switch (deco_part) { case LAB_DECO_BUTTON_CLOSE: - wlr_texture_get_size(theme.xbm_close, &box.width, &box.height); + wlr_texture_get_size(theme.xbm_close_active_unpressed, + &box.width, &box.height); margin = (rc.title_height - box.height) / 2; box.x = view->x + view->surface->current.width + margin - rc.title_height; box.y = view->y - rc.title_height + margin; break; case LAB_DECO_BUTTON_MAXIMIZE: - wlr_texture_get_size(theme.xbm_maximize, &box.width, - &box.height); + wlr_texture_get_size(theme.xbm_maximize_active_unpressed, + &box.width, &box.height); margin = (rc.title_height - box.height) / 2; box.x = view->x + view->surface->current.width + margin - rc.title_height * 2; box.y = view->y - rc.title_height + margin; break; case LAB_DECO_BUTTON_ICONIFY: - wlr_texture_get_size(theme.xbm_iconify, &box.width, - &box.height); + wlr_texture_get_size(theme.xbm_iconify_active_unpressed, + &box.width, &box.height); margin = (rc.title_height - box.height) / 2; box.x = view->x + view->surface->current.width + margin - rc.title_height * 3; diff --git a/src/output.c b/src/output.c index 71708789..756b2cdb 100644 --- a/src/output.c +++ b/src/output.c @@ -68,12 +68,21 @@ static void render_decorations(struct wlr_output *output, struct view *view) ddata.rgba = theme.window_inactive_title_bg_color; draw_rect(&ddata, deco_box(view, LAB_DECO_PART_TITLE)); - render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_CLOSE), - theme.xbm_close); - render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_MAXIMIZE), - theme.xbm_maximize); - render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_ICONIFY), - theme.xbm_iconify); + if (view_hasfocus(view)) { + render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_CLOSE), + theme.xbm_close_active_unpressed); + render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_MAXIMIZE), + theme.xbm_maximize_active_unpressed); + render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_ICONIFY), + theme.xbm_iconify_active_unpressed); + } else { + render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_CLOSE), + theme.xbm_close_inactive_unpressed); + render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_MAXIMIZE), + theme.xbm_maximize_inactive_unpressed); + render_icon(&ddata, deco_box(view, LAB_DECO_BUTTON_ICONIFY), + theme.xbm_iconify_inactive_unpressed); + } } struct render_data { diff --git a/src/theme/theme.c b/src/theme/theme.c index d4ddd536..4abb3621 100644 --- a/src/theme/theme.c +++ b/src/theme/theme.c @@ -39,6 +39,7 @@ static bool match(const gchar *pattern, const gchar *string) return (bool)g_pattern_match_simple(pattern, string); } +/* clang-format off */ static void entry(const char *key, const char *value) { if (!key || !value) @@ -51,7 +52,10 @@ static void entry(const char *key, const char *value) 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); + if (match(key, "window.inactive.button.unpressed.image.color")) + parse_hexstr(value, theme.window_inactive_button_unpressed_image_color); } +/* clang-format on */ static void rtrim(char **s) { @@ -101,13 +105,16 @@ static void process_line(char *line) * this was a bit hard-line. People might want to try labwc without having * Openbox (and associated themes) installed. */ +/* clang-format off */ void theme_builtin(void) { parse_hexstr("#589bda", theme.window_active_title_bg_color); parse_hexstr("#3c7cb7", theme.window_active_handle_bg_color); parse_hexstr("#efece6", theme.window_inactive_title_bg_color); parse_hexstr("#ffffff", theme.window_active_button_unpressed_image_color); + parse_hexstr("#000000", theme.window_inactive_button_unpressed_image_color); } +/* clang-format on */ void theme_read(const char *theme_name) { diff --git a/src/theme/xbm/xbm.c b/src/theme/xbm/xbm.c index 85a68826..895047c5 100644 --- a/src/theme/xbm/xbm.c +++ b/src/theme/xbm/xbm.c @@ -73,8 +73,13 @@ 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, "close.xbm", &theme.xbm_close_active_unpressed, close_button_normal); + load_button(r, "max.xbm", &theme.xbm_maximize_active_unpressed, max_button_normal); + 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, max_button_normal); + load_button(r, "iconify.xbm", &theme.xbm_iconify_inactive_unpressed, iconify_button_normal); } /* clang-format on */