From 960a1bb2eda8308ef20a2a944d2fd4c250d9bfd4 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Wed, 13 Oct 2021 21:29:32 +0100 Subject: [PATCH] theme: add osd colors --- docs/labwc-theme.5.scd | 6 ++++++ include/theme.h | 3 +++ src/osd.c | 18 +++++++++++++----- src/theme.c | 10 ++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/docs/labwc-theme.5.scd b/docs/labwc-theme.5.scd index 8e71d8e9..31c9b35a 100644 --- a/docs/labwc-theme.5.scd +++ b/docs/labwc-theme.5.scd @@ -70,6 +70,12 @@ elements are not listed here, but are supported. *menu.items.active.text.color* Text color of active menu item +*osd.bg.color* + Background color of on-screen-display + +*osd.label.text.color* + Text color of on-screen-display + *border.color* Set all border colors. This is obsolete, but supported for backward compatibility as some themes still contain it. diff --git a/include/theme.h b/include/theme.h index 95954a3a..8041f94e 100644 --- a/include/theme.h +++ b/include/theme.h @@ -34,6 +34,9 @@ struct theme { float menu_items_active_bg_color[4]; float menu_items_active_text_color[4]; + float osd_bg_color[4]; + float osd_label_text_color[4]; + struct wlr_texture *xbm_close_active_unpressed; struct wlr_texture *xbm_maximize_active_unpressed; struct wlr_texture *xbm_iconify_active_unpressed; diff --git a/src/osd.c b/src/osd.c index 6af99473..70d49639 100644 --- a/src/osd.c +++ b/src/osd.c @@ -8,6 +8,7 @@ #include "common/font.h" #include "config/rcxml.h" #include "labwc.h" +#include "theme.h" #define OSD_ITEM_HEIGHT (20) #define OSD_ITEM_WIDTH (600) @@ -73,6 +74,8 @@ void osd_update(struct server *server) { struct wlr_renderer *renderer = server->renderer; + struct theme *theme = server->theme; + int w = OSD_ITEM_WIDTH + 2 * OSD_BORDER_WIDTH; int h = get_osd_height(&server->views); @@ -81,11 +84,16 @@ osd_update(struct server *server) cairo_t *cairo = cairo_create(surf); /* background */ - set_source(cairo, (float[4]){1.0f, 1.0f, 1.0f, 1.0f}); + set_source(cairo, theme->osd_bg_color); cairo_rectangle(cairo, 0, 0, w, h); cairo_fill(cairo); - /* highlight current application */ + /* border */ + set_source(cairo, theme->osd_label_text_color); + cairo_rectangle(cairo, 0, 0, w, h); + cairo_stroke(cairo); + + /* highlight current window */ int y = OSD_BORDER_WIDTH; struct view *view; wl_list_for_each(view, &server->views, link) { @@ -93,17 +101,17 @@ osd_update(struct server *server) continue; } if (view == server->cycle_view) { - set_source(cairo, (float[4]){0.3f, 0.3f, 0.3f, 0.5f}); + set_source(cairo, theme->osd_label_text_color); cairo_rectangle(cairo, OSD_BORDER_WIDTH, y, OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT); - cairo_fill(cairo); + cairo_stroke(cairo); break; } y += OSD_ITEM_HEIGHT; } /* text */ - set_source(cairo, (float[4]){0.0f, 0.0f, 0.0f, 1.0f}); + set_source(cairo, theme->osd_label_text_color); PangoLayout *layout = pango_cairo_create_layout(cairo); pango_layout_set_width(layout, w * PANGO_SCALE); pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END); diff --git a/src/theme.c b/src/theme.c index 784fdfee..8525a79d 100644 --- a/src/theme.c +++ b/src/theme.c @@ -102,6 +102,9 @@ theme_builtin(struct theme *theme) parse_hexstr("#000000", theme->menu_items_text_color); parse_hexstr("#dddad6", theme->menu_items_active_bg_color); parse_hexstr("#000000", theme->menu_items_active_text_color); + + parse_hexstr("#dddad6", theme->osd_bg_color); + parse_hexstr("#000000", theme->osd_label_text_color); } static bool @@ -207,6 +210,13 @@ entry(struct theme *theme, const char *key, const char *value) if (match(key, "menu.items.active.text.color")) { parse_hexstr(value, theme->menu_items_active_text_color); } + + if (match(key, "osd.bg.color")) { + parse_hexstr(value, theme->osd_bg_color); + } + if (match(key, "osd.label.text.color")) { + parse_hexstr(value, theme->osd_label_text_color); + } } static void