From 859495a8be3eeb0fbd04cf05d2d3e2fae9bee39e Mon Sep 17 00:00:00 2001 From: ARDiDo <90479315+ARDiDo@users.noreply.github.com> Date: Mon, 6 Dec 2021 17:44:28 -0500 Subject: [PATCH] Config: add OSD font configuration --- docs/labwc-config.5.scd | 1 + docs/rc.xml.all | 1 + include/config/rcxml.h | 2 ++ src/config/rcxml.c | 17 +++++++++++++++++ src/osd.c | 15 +++++++-------- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/docs/labwc-config.5.scd b/docs/labwc-config.5.scd index fcfed2e6..ecfbf158 100644 --- a/docs/labwc-config.5.scd +++ b/docs/labwc-config.5.scd @@ -54,6 +54,7 @@ Configuration must be wrapped in a root-node. Places can be any of: - ActiveWindow - titlebar of active window - MenuItem - menu item (currently only root menu) + - OSD - items in the on screen display If no place attribute is provided, the setting will be applied to all places. diff --git a/docs/rc.xml.all b/docs/rc.xml.all index 28b547e8..1400910b 100644 --- a/docs/rc.xml.all +++ b/docs/rc.xml.all @@ -21,6 +21,7 @@ 8 sans10 sans10 + sans10 diff --git a/include/config/rcxml.h b/include/config/rcxml.h index 39d1e5c0..6fb1fd47 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -25,8 +25,10 @@ struct rcxml { int corner_radius; char *font_name_activewindow; char *font_name_menuitem; + char *font_name_osd; int font_size_activewindow; int font_size_menuitem; + int font_size_osd; /* keyboard */ int repeat_rate; diff --git a/src/config/rcxml.c b/src/config/rcxml.c index 42b9564d..55f46283 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -34,6 +34,7 @@ enum font_place { FONT_PLACE_UNKNOWN = 0, FONT_PLACE_ACTIVEWINDOW, FONT_PLACE_MENUITEM, + FONT_PLACE_OSD, /* TODO: Add all places based on Openbox's rc.xml */ }; @@ -206,9 +207,11 @@ fill_font(char *nodename, char *content, enum font_place place) if (!strcmp(nodename, "name")) { rc.font_name_activewindow = strdup(content); rc.font_name_menuitem = strdup(content); + rc.font_name_osd = strdup(content); } else if (!strcmp(nodename, "size")) { rc.font_size_activewindow = atoi(content); rc.font_size_menuitem = atoi(content); + rc.font_size_osd = atoi(content); } break; case FONT_PLACE_ACTIVEWINDOW: @@ -225,6 +228,13 @@ fill_font(char *nodename, char *content, enum font_place place) rc.font_size_menuitem = atoi(content); } break; + case FONT_PLACE_OSD: + if (!strcmp(nodename, "name")) { + rc.font_name_osd = strdup(content); + } else if (!strcmp(nodename, "size")) { + rc.font_size_osd = atoi(content); + } + break; /* TODO: implement for all font places */ @@ -243,6 +253,8 @@ enum_font_place(const char *place) return FONT_PLACE_ACTIVEWINDOW; } else if (!strcasecmp(place, "MenuItem")) { return FONT_PLACE_MENUITEM; + } else if (!strcasecmp(place, "OSD")) { + return FONT_PLACE_OSD; } return FONT_PLACE_UNKNOWN; } @@ -418,6 +430,7 @@ rcxml_init() rc.corner_radius = 8; rc.font_size_activewindow = 10; rc.font_size_menuitem = 10; + rc.font_size_osd = 10; rc.doubleclick_time = 500; rc.repeat_rate = 25; rc.repeat_delay = 600; @@ -525,6 +538,9 @@ post_processing(void) if (!rc.font_name_menuitem) { rc.font_name_menuitem = strdup("sans"); } + if (!rc.font_name_osd) { + rc.font_name_osd = strdup("sans"); + } if (!wl_list_length(&rc.libinput_categories)) { /* So we still allow tap to click by default */ struct libinput_category *l = libinput_category_create(); @@ -602,6 +618,7 @@ rcxml_finish(void) { zfree(rc.font_name_activewindow); zfree(rc.font_name_menuitem); + zfree(rc.font_name_osd); zfree(rc.theme_name); struct keybind *k, *k_tmp; diff --git a/src/osd.c b/src/osd.c index 4b987ef2..e2b7d808 100644 --- a/src/osd.c +++ b/src/osd.c @@ -119,9 +119,13 @@ osd_update(struct server *server) pango_layout_set_width(layout, w * PANGO_SCALE); pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END); - /* TODO: use font description from config */ - PangoFontDescription *desc = - pango_font_description_from_string("sans 10"); + struct font font = { + .name = rc.font_name_osd, + .size = rc.font_size_osd, + }; + PangoFontDescription *desc = pango_font_description_new(); + pango_font_description_set_family(desc, font.name); + pango_font_description_set_size(desc, font.size * PANGO_SCALE); pango_layout_set_font_description(layout, desc); pango_font_description_free(desc); @@ -136,11 +140,6 @@ osd_update(struct server *server) buf_init(&buf); y = OSD_BORDER_WIDTH; - /* vertically center align */ - struct font font = { - .name = "sans", - .size = 10, - }; y += (OSD_ITEM_HEIGHT - font_height(&font)) / 2; wl_list_for_each(view, &server->views, link) { -- 2.52.0