aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/ThemeParser.cpp')
-rw-r--r--gui/ThemeParser.cpp47
1 files changed, 32 insertions, 15 deletions
diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp
index db45b5a995..9ccdedd564 100644
--- a/gui/ThemeParser.cpp
+++ b/gui/ThemeParser.cpp
@@ -176,8 +176,15 @@ bool ThemeParser::parserCallback_font(ParserNode *node) {
return true;
}
+ // Default to a point size of 12.
+ int pointsize = 12;
+ if (node->values.contains("point_size")) {
+ if (sscanf(node->values["point_size"].c_str(), "%d", &pointsize) != 1 || pointsize <= 0)
+ return parserError(Common::String::format("Font \"%s\" has invalid point size \"%s\"", node->values["id"].c_str(), node->values["point_size"].c_str()));
+ }
+
TextData textDataId = parseTextDataId(node->values["id"]);
- if (!_theme->addFont(textDataId, node->values["file"]))
+ if (!_theme->addFont(textDataId, node->values["file"], node->values["scalable_file"], pointsize))
return parserError("Error loading Font in theme engine.");
return true;
@@ -379,7 +386,7 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst
* theme description format.
* @param force Sets if the key is optional or necessary.
*/
-#define __PARSER_ASSIGN_INT(struct_name, key_name, force) \
+#define PARSER_ASSIGN_INT(struct_name, key_name, force) \
if (stepNode->values.contains(key_name)) { \
if (!parseIntegerKey(stepNode->values[key_name], 1, &x)) \
return parserError("Error parsing key value for '" + Common::String(key_name) + "'."); \
@@ -398,7 +405,7 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst
* @param key_name Name as STRING of the key identifier as it appears in the
* theme description format.
*/
-#define __PARSER_ASSIGN_RGB(struct_name, key_name) \
+#define PARSER_ASSIGN_RGB(struct_name, key_name) \
if (stepNode->values.contains(key_name)) { \
val = stepNode->values[key_name]; \
if (_palette.contains(val)) { \
@@ -415,16 +422,16 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst
drawstep->struct_name.set = true; \
}
- __PARSER_ASSIGN_INT(stroke, "stroke", false);
- __PARSER_ASSIGN_INT(bevel, "bevel", false);
- __PARSER_ASSIGN_INT(shadow, "shadow", false);
- __PARSER_ASSIGN_INT(factor, "gradient_factor", false);
+ PARSER_ASSIGN_INT(stroke, "stroke", false);
+ PARSER_ASSIGN_INT(bevel, "bevel", false);
+ PARSER_ASSIGN_INT(shadow, "shadow", false);
+ PARSER_ASSIGN_INT(factor, "gradient_factor", false);
- __PARSER_ASSIGN_RGB(fgColor, "fg_color");
- __PARSER_ASSIGN_RGB(bgColor, "bg_color");
- __PARSER_ASSIGN_RGB(gradColor1, "gradient_start");
- __PARSER_ASSIGN_RGB(gradColor2, "gradient_end");
- __PARSER_ASSIGN_RGB(bevelColor, "bevel_color");
+ PARSER_ASSIGN_RGB(fgColor, "fg_color");
+ PARSER_ASSIGN_RGB(bgColor, "bg_color");
+ PARSER_ASSIGN_RGB(gradColor1, "gradient_start");
+ PARSER_ASSIGN_RGB(gradColor2, "gradient_end");
+ PARSER_ASSIGN_RGB(bevelColor, "bevel_color");
if (functionSpecific) {
assert(stepNode->values.contains("func"));
@@ -444,7 +451,7 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst
if (stepNode->values.contains("radius") && stepNode->values["radius"] == "auto") {
drawstep->radius = 0xFF;
} else {
- __PARSER_ASSIGN_INT(radius, "radius", true);
+ PARSER_ASSIGN_INT(radius, "radius", true);
}
}
@@ -544,9 +551,19 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst
else
return parserError("'" + stepNode->values["fill"] + "' is not a valid fill mode for a shape.");
}
+
+ if (stepNode->values.contains("padding")) {
+ val = stepNode->values["padding"];
+ int pr, pt, pl, pb;
+ if (parseIntegerKey(val, 4, &pl, &pt, &pr, &pb))
+ drawstep->padding.left = pl,
+ drawstep->padding.top = pt,
+ drawstep->padding.right = pr,
+ drawstep->padding.bottom = pb;
+ }
-#undef __PARSER_ASSIGN_INT
-#undef __PARSER_ASSIGN_RGB
+#undef PARSER_ASSIGN_INT
+#undef PARSER_ASSIGN_RGB
return true;
}