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> <theme>
<name></name> <name></name>
<cornerRadius>8</cornerRadius> <cornerRadius>8</cornerRadius>
<font place="ActiveWindow"><name>Sans</name><size>10</size></font> <font><name>Sans</name><size>12</size></font>
</theme> </theme>
<focus> <focus>

View file

@ -80,14 +80,30 @@ fill_font(char *nodename, char *content, enum font_place place)
} }
string_truncate_at_pattern(nodename, ".font.theme"); string_truncate_at_pattern(nodename, ".font.theme");
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 */ /* TODO: implement for all font places */
if (place != FONT_PLACE_ACTIVEWINDOW) {
return; default:
} break;
if (!strcmp(nodename, "name")) {
rc.font_name_activewindow = strdup(content);
} else if (!strcmp(nodename, "size")) {
rc.font_size_activewindow = atoi(content);
} }
} }
@ -108,7 +124,7 @@ enum_font_place(const char *place)
static void static void
entry(xmlNode *node, char *nodename, char *content) 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; static enum font_place font_place = FONT_PLACE_UNKNOWN;
if (!nodename) { if (!nodename) {