aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeParser.cpp
diff options
context:
space:
mode:
authorMax Horn2009-01-18 14:48:00 +0000
committerMax Horn2009-01-18 14:48:00 +0000
commitc9e97bf6f9e5de0c7b1bf8bf8292661b2ea1e353 (patch)
treed7233f66570ce89e97cc94b4da535120a9f8211e /gui/ThemeParser.cpp
parentc69638d915ddcd6df2c87fed1a969a1ae51fd379 (diff)
downloadscummvm-rg350-c9e97bf6f9e5de0c7b1bf8bf8292661b2ea1e353.tar.gz
scummvm-rg350-c9e97bf6f9e5de0c7b1bf8bf8292661b2ea1e353.tar.bz2
scummvm-rg350-c9e97bf6f9e5de0c7b1bf8bf8292661b2ea1e353.zip
GUI: Some cleanup and renaming; moved some parsing code from ThemeEngine to ThemeParser
svn-id: r35898
Diffstat (limited to 'gui/ThemeParser.cpp')
-rw-r--r--gui/ThemeParser.cpp42
1 files changed, 37 insertions, 5 deletions
diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp
index 72f841a7a9..fcba466dc4 100644
--- a/gui/ThemeParser.cpp
+++ b/gui/ThemeParser.cpp
@@ -38,6 +38,31 @@
namespace GUI {
+struct TextDataInfo {
+ TextData id;
+ const char *name;
+};
+
+static const TextDataInfo kTextDataDefaults[] = {
+ {kTextDataDefault, "text_default"},
+ {kTextDataHover, "text_hover"},
+ {kTextDataDisabled, "text_disabled"},
+ {kTextDataInverted, "text_inverted"},
+ {kTextDataButton, "text_button"},
+ {kTextDataButtonHover, "text_button_hover"},
+ {kTextDataNormalFont, "text_normal"}
+};
+
+
+static TextData parseTextDataId(const Common::String &name) {
+ for (int i = 0; i < kTextDataMAX; ++i)
+ if (name.compareToIgnoreCase(kTextDataDefaults[i].name) == 0)
+ return kTextDataDefaults[i].id;
+
+ return kTextDataNone;
+}
+
+
ThemeParser::ThemeParser(ThemeEngine *parent) : XMLParser() {
_drawFunctions["circle"] = &Graphics::VectorRenderer::drawCallback_CIRCLE;
@@ -134,7 +159,8 @@ bool ThemeParser::parserCallback_font(ParserNode *node) {
else if (!parseIntegerKey(node->values["color"].c_str(), 3, &red, &green, &blue))
return parserError("Error parsing color value for font definition.");
- if (!_theme->addFont(node->values["id"], node->values["file"], red, green, blue))
+ TextData textDataId = parseTextDataId(node->values["id"]);
+ if (!_theme->addFont(textDataId, node->values["file"], red, green, blue))
return parserError("Error loading Font in theme engine.");
return true;
@@ -186,7 +212,8 @@ bool ThemeParser::parserCallback_text(ParserNode *node) {
alignH = Graphics::kTextAlignRight;
else if (node->values["horizontal_align"] == "center")
alignH = Graphics::kTextAlignCenter;
- else return parserError("Invalid value for text alignment.");
+ else
+ return parserError("Invalid value for text alignment.");
if (node->values["vertical_align"] == "top")
alignV = GUI::ThemeEngine::kTextAlignVTop;
@@ -194,10 +221,14 @@ bool ThemeParser::parserCallback_text(ParserNode *node) {
alignV = GUI::ThemeEngine::kTextAlignVCenter;
else if (node->values["vertical_align"] == "bottom")
alignV = GUI::ThemeEngine::kTextAlignVBottom;
- else return parserError("Invalid value for text alignment.");
+ else
+ return parserError("Invalid value for text alignment.");
+
+ Common::String id = getParentNode(node)->values["id"];
+ TextData textDataId = parseTextDataId(node->values["font"]);
- if (!_theme->addTextData(getParentNode(node)->values["id"], node->values["font"], alignH, alignV))
- return parserError("Error adding Text Data for '%s'.", getParentNode(node)->values["id"].c_str());
+ if (!_theme->addTextData(id, textDataId, alignH, alignV))
+ return parserError("Error adding Text Data for '%s'.", id.c_str());
return true;
}
@@ -506,6 +537,7 @@ bool ThemeParser::parserCallback_widget(ParserNode *node) {
return parserError("Error parsing Layout properties of '%s'.", var.c_str());
} else {
+ // FIXME: Shouldn't we distinguish the name/id and the label of a widget?
var = node->values["name"];
int width = -1;
int height = -1;