diff options
Diffstat (limited to 'gui/ThemeParser.cpp')
-rw-r--r-- | gui/ThemeParser.cpp | 50 |
1 files changed, 35 insertions, 15 deletions
diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index 70d81a962e..230dad8cc5 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -26,10 +26,10 @@ #include "gui/ThemeEngine.h" #include "gui/ThemeEval.h" #include "gui/ThemeParser.h" -#include "gui/gui-manager.h" #include "graphics/VectorRenderer.h" +#include "common/system.h" #include "common/tokenizer.h" namespace GUI { @@ -861,30 +861,50 @@ bool ThemeParser::resolutionCheck(const Common::String &resolution) { return true; Common::StringTokenizer globTokenizer(resolution, ", "); - Common::String cur, w, h; - bool definedRes = false; + Common::String cur; while (!globTokenizer.empty()) { - bool ignore = false; cur = globTokenizer.nextToken(); - if (cur[0] == '-') { - ignore = true; - cur.deleteChar(0); + bool lt; + int val; + + if (cur.size() < 5) { + warning("Invalid theme 'resolution' token '%s'", resolution.c_str()); + return false; + } + + if (cur[0] == 'x') { + val = g_system->getOverlayWidth(); + } else if (cur[0] == 'y') { + val = g_system->getOverlayHeight(); + } else { + warning("Error parsing theme 'resolution' token '%s'", resolution.c_str()); + return false; + } + + if (cur[1] == '<') { + lt = true; + } else if (cur[1] == '>') { + lt = false; } else { - definedRes = true; + warning("Error parsing theme 'resolution' token '%s'", resolution.c_str()); + return false; } - Common::StringTokenizer resTokenizer(cur, "x"); - w = resTokenizer.nextToken(); - h = resTokenizer.nextToken(); + int token = atoi(cur.c_str() + 2); - if ((w == "X" || atoi(w.c_str()) == g_system->getOverlayWidth()) && - (h == "Y" || atoi(h.c_str()) == g_system->getOverlayHeight())) - return !ignore; + // check inverse for unfulfilled requirements + if (lt) { + if (val >= token) + return false; + } else { + if (val <= token) + return false; + } } - return !definedRes; + return true; } } // End of namespace GUI |