]> git.mdlowis.com Git - proto/labwc.git/commitdiff
Config: add OSD font configuration
authorARDiDo <90479315+ARDiDo@users.noreply.github.com>
Mon, 6 Dec 2021 22:44:28 +0000 (17:44 -0500)
committerARDiDo <90479315+ARDiDo@users.noreply.github.com>
Mon, 6 Dec 2021 22:44:28 +0000 (17:44 -0500)
docs/labwc-config.5.scd
docs/rc.xml.all
include/config/rcxml.h
src/config/rcxml.c
src/osd.c

index fcfed2e6535f564e18d6aafb8f7b5153938b71f0..ecfbf1580f249ab82e72e3d0c4bd3791af1e3c12 100644 (file)
@@ -54,6 +54,7 @@ Configuration must be wrapped in a <labwc_config> 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.
 
index 28b547e88e2464120dc9dab16a619c7790453524..1400910b0531a1773661880346778fd9caa08f1e 100644 (file)
@@ -21,6 +21,7 @@
     <cornerRadius>8</cornerRadius>
     <font place="ActiveWindow"><name>sans</name><size>10</size></font>
     <font place="MenuItem"><name>sans</name><size>10</size></font>
+    <font place="OSD"><name>sans</name><size>10</size></font>
   </theme>
 
   <focus>
index 39d1e5c090884b40c850d6562d4c206fda0aa0f5..6fb1fd47b8b6e5e2ceb66a8634103ab30657bea1 100644 (file)
@@ -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;
index 42b9564dee798324c8afa249d43cb45750921e62..55f4628396768d833dbd7af49cbe7e3e5a3f2b98 100644 (file)
@@ -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;
index 4b987ef2433ef7ff3b3f62024cad7ede4d989261..e2b7d8082ffa897ff74c9e1d029ac3eddaf840bc 100644 (file)
--- 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) {