Config: add OSD font configuration

This commit is contained in:
ARDiDo 2021-12-06 17:44:28 -05:00
parent 238062a859
commit 859495a8be
5 changed files with 28 additions and 8 deletions

View file

@ -54,6 +54,7 @@ Configuration must be wrapped in a <labwc_config> root-node.
Places can be any of: Places can be any of:
- ActiveWindow - titlebar of active window - ActiveWindow - titlebar of active window
- MenuItem - menu item (currently only root menu) - 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 If no place attribute is provided, the setting will be applied to all
places. places.

View file

@ -21,6 +21,7 @@
<cornerRadius>8</cornerRadius> <cornerRadius>8</cornerRadius>
<font place="ActiveWindow"><name>sans</name><size>10</size></font> <font place="ActiveWindow"><name>sans</name><size>10</size></font>
<font place="MenuItem"><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> </theme>
<focus> <focus>

View file

@ -25,8 +25,10 @@ struct rcxml {
int corner_radius; int corner_radius;
char *font_name_activewindow; char *font_name_activewindow;
char *font_name_menuitem; char *font_name_menuitem;
char *font_name_osd;
int font_size_activewindow; int font_size_activewindow;
int font_size_menuitem; int font_size_menuitem;
int font_size_osd;
/* keyboard */ /* keyboard */
int repeat_rate; int repeat_rate;

View file

@ -34,6 +34,7 @@ enum font_place {
FONT_PLACE_UNKNOWN = 0, FONT_PLACE_UNKNOWN = 0,
FONT_PLACE_ACTIVEWINDOW, FONT_PLACE_ACTIVEWINDOW,
FONT_PLACE_MENUITEM, FONT_PLACE_MENUITEM,
FONT_PLACE_OSD,
/* TODO: Add all places based on Openbox's rc.xml */ /* 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")) { if (!strcmp(nodename, "name")) {
rc.font_name_activewindow = strdup(content); rc.font_name_activewindow = strdup(content);
rc.font_name_menuitem = strdup(content); rc.font_name_menuitem = strdup(content);
rc.font_name_osd = strdup(content);
} else if (!strcmp(nodename, "size")) { } else if (!strcmp(nodename, "size")) {
rc.font_size_activewindow = atoi(content); rc.font_size_activewindow = atoi(content);
rc.font_size_menuitem = atoi(content); rc.font_size_menuitem = atoi(content);
rc.font_size_osd = atoi(content);
} }
break; break;
case FONT_PLACE_ACTIVEWINDOW: case FONT_PLACE_ACTIVEWINDOW:
@ -225,6 +228,13 @@ fill_font(char *nodename, char *content, enum font_place place)
rc.font_size_menuitem = atoi(content); rc.font_size_menuitem = atoi(content);
} }
break; 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 */ /* TODO: implement for all font places */
@ -243,6 +253,8 @@ enum_font_place(const char *place)
return FONT_PLACE_ACTIVEWINDOW; return FONT_PLACE_ACTIVEWINDOW;
} else if (!strcasecmp(place, "MenuItem")) { } else if (!strcasecmp(place, "MenuItem")) {
return FONT_PLACE_MENUITEM; return FONT_PLACE_MENUITEM;
} else if (!strcasecmp(place, "OSD")) {
return FONT_PLACE_OSD;
} }
return FONT_PLACE_UNKNOWN; return FONT_PLACE_UNKNOWN;
} }
@ -418,6 +430,7 @@ rcxml_init()
rc.corner_radius = 8; rc.corner_radius = 8;
rc.font_size_activewindow = 10; rc.font_size_activewindow = 10;
rc.font_size_menuitem = 10; rc.font_size_menuitem = 10;
rc.font_size_osd = 10;
rc.doubleclick_time = 500; rc.doubleclick_time = 500;
rc.repeat_rate = 25; rc.repeat_rate = 25;
rc.repeat_delay = 600; rc.repeat_delay = 600;
@ -525,6 +538,9 @@ post_processing(void)
if (!rc.font_name_menuitem) { if (!rc.font_name_menuitem) {
rc.font_name_menuitem = strdup("sans"); rc.font_name_menuitem = strdup("sans");
} }
if (!rc.font_name_osd) {
rc.font_name_osd = strdup("sans");
}
if (!wl_list_length(&rc.libinput_categories)) { if (!wl_list_length(&rc.libinput_categories)) {
/* So we still allow tap to click by default */ /* So we still allow tap to click by default */
struct libinput_category *l = libinput_category_create(); struct libinput_category *l = libinput_category_create();
@ -602,6 +618,7 @@ rcxml_finish(void)
{ {
zfree(rc.font_name_activewindow); zfree(rc.font_name_activewindow);
zfree(rc.font_name_menuitem); zfree(rc.font_name_menuitem);
zfree(rc.font_name_osd);
zfree(rc.theme_name); zfree(rc.theme_name);
struct keybind *k, *k_tmp; struct keybind *k, *k_tmp;

View file

@ -119,9 +119,13 @@ osd_update(struct server *server)
pango_layout_set_width(layout, w * PANGO_SCALE); pango_layout_set_width(layout, w * PANGO_SCALE);
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END); pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
/* TODO: use font description from config */ struct font font = {
PangoFontDescription *desc = .name = rc.font_name_osd,
pango_font_description_from_string("sans 10"); .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_layout_set_font_description(layout, desc);
pango_font_description_free(desc); pango_font_description_free(desc);
@ -136,11 +140,6 @@ osd_update(struct server *server)
buf_init(&buf); buf_init(&buf);
y = OSD_BORDER_WIDTH; y = OSD_BORDER_WIDTH;
/* vertically center align */
struct font font = {
.name = "sans",
.size = 10,
};
y += (OSD_ITEM_HEIGHT - font_height(&font)) / 2; y += (OSD_ITEM_HEIGHT - font_height(&font)) / 2;
wl_list_for_each(view, &server->views, link) { wl_list_for_each(view, &server->views, link) {