rcxml: allow <theme><font> without place="" attribute

The construct below will set the font for all supported places. Currently
that's only ActiveWindow, but is likely to include InactiveWindow,
MenuHeader, MenuItem and OnScreenDisplay at some point.

<theme>
  <font>
    <name></name>
    <size></size>
  </font>
</theme>
This commit is contained in:
Johan Malm 2021-07-19 20:46:32 +01:00
parent ec2c67338a
commit 2e4f931469
2 changed files with 25 additions and 9 deletions

View file

@ -8,7 +8,7 @@
<theme>
<name></name>
<cornerRadius>8</cornerRadius>
<font place="ActiveWindow"><name>Sans</name><size>10</size></font>
<font><name>Sans</name><size>12</size></font>
</theme>
<focus>

View file

@ -80,15 +80,31 @@ fill_font(char *nodename, char *content, enum font_place place)
}
string_truncate_at_pattern(nodename, ".font.theme");
/* TODO: implement for all font places */
if (place != FONT_PLACE_ACTIVEWINDOW) {
return;
}
switch (place) {
case FONT_PLACE_UNKNOWN:
/*
* If <theme><font></font></theme> is used without a place=""
* attribute, we set all font variables
*/
if (!strcmp(nodename, "name")) {
rc.font_name_activewindow = strdup(content);
} else if (!strcmp(nodename, "size")) {
rc.font_size_activewindow = atoi(content);
}
break;
case FONT_PLACE_ACTIVEWINDOW:
if (!strcmp(nodename, "name")) {
rc.font_name_activewindow = strdup(content);
} else if (!strcmp(nodename, "size")) {
rc.font_size_activewindow = atoi(content);
}
break;
/* TODO: implement for all font places */
default:
break;
}
}
static enum font_place
@ -108,7 +124,7 @@ enum_font_place(const char *place)
static void
entry(xmlNode *node, char *nodename, char *content)
{
/* current <theme><font place=""></theme> */
/* current <theme><font place=""></font></theme> */
static enum font_place font_place = FONT_PLACE_UNKNOWN;
if (!nodename) {