aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeClassic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/ThemeClassic.cpp')
-rw-r--r--gui/ThemeClassic.cpp96
1 files changed, 79 insertions, 17 deletions
diff --git a/gui/ThemeClassic.cpp b/gui/ThemeClassic.cpp
index babb03b24d..b4353c9f28 100644
--- a/gui/ThemeClassic.cpp
+++ b/gui/ThemeClassic.cpp
@@ -20,19 +20,23 @@
*/
#include "gui/theme.h"
+#include "gui/eval.h"
+
+#define THEME_VERSION 1
namespace GUI {
ThemeClassic::ThemeClassic(OSystem *system) : Theme() {
+ _stylefile = "classic";
_system = system;
_initOk = false;
+ _font = 0;
memset(&_screen, 0, sizeof(_screen));
#ifndef CT_NO_TRANSPARENCY
memset(&_dialog, 0, sizeof(_dialog));
#endif
_font = 0;
-
- // Maybe change this filename
- _configFile.loadFromFile("classic.ini");
+
+ loadConfigFile(_stylefile);
}
ThemeClassic::~ThemeClassic() {
@@ -45,22 +49,29 @@ bool ThemeClassic::init() {
if (_screen.pixels) {
_initOk = true;
clearAll();
- _bgcolor = _system->RGBToColor(0, 0, 0);
- _color = _system->RGBToColor(104, 104, 104);
- _shadowcolor = _system->RGBToColor(64, 64, 64);
- _textcolor = _system->RGBToColor(32, 160, 32);
- _textcolorhi = _system->RGBToColor(0, 255, 0);
+ resetDrawArea();
+ }
+
+ if (isThemeLoadingRequired()) {
+ loadTheme(_defaultConfig);
+ loadTheme(_configFile, false);
+
+ setupConfig();
+ }
+
+ _bgcolor = _system->RGBToColor(_colors[kBGColor][0], _colors[kBGColor][1], _colors[kBGColor][2]);
+ _color = _system->RGBToColor(_colors[kColor][0], _colors[kColor][1], _colors[kColor][2]);
+ _shadowcolor = _system->RGBToColor(_colors[kShadowColor][0], _colors[kShadowColor][1], _colors[kShadowColor][2]);
+ _textcolor = _system->RGBToColor(_colors[kTextColor][0], _colors[kTextColor][1], _colors[kTextColor][2]);
+ _textcolorhi = _system->RGBToColor(_colors[kTextColorHi][0], _colors[kTextColorHi][1], _colors[kTextColorHi][2]);
+ if (_fontName == "builtin") {
if (_screen.w >= 400 && _screen.h >= 300) {
_font = FontMan.getFontByUsage(Graphics::FontManager::kBigGUIFont);
} else {
_font = FontMan.getFontByUsage(Graphics::FontManager::kGUIFont);
}
- resetDrawArea();
}
- if (isThemeLoadingRequired())
- loadTheme(_defaultConfig);
-
return true;
}
@@ -74,11 +85,6 @@ void ThemeClassic::deinit() {
void ThemeClassic::refresh() {
init();
- _bgcolor = _system->RGBToColor(0, 0, 0);
- _color = _system->RGBToColor(104, 104, 104);
- _shadowcolor = _system->RGBToColor(64, 64, 64);
- _textcolor = _system->RGBToColor(32, 160, 32);
- _textcolorhi = _system->RGBToColor(0, 255, 0);
if (_enabled)
_system->showOverlay();
}
@@ -615,5 +621,61 @@ void ThemeClassic::blendScreenToDialog() {
}
}
#endif
+
+void ThemeClassic::setupConfig() {
+ if (_configFile.hasSection("theme")) {
+ loadConfig();
+ return;
+ }
+
+ static const uint8 colors[][3] = {
+ { 104, 104, 104 },
+ { 64, 64, 64 },
+ { 0, 0, 0, },
+ { 32, 160, 32 },
+ { 0, 255, 0 }
+ };
+
+ memcpy(_colors, colors, sizeof(colors));
+}
+
+bool ThemeClassic::loadConfig() {
+ Common::String temp;
+ _configFile.getKey("version", "theme", temp);
+ if (atoi(temp.c_str()) != THEME_VERSION) {
+ // TODO: improve this detection and handle it nicer
+ warning("Theme config uses a different version (you have: '%s', needed is: '%d')", temp.c_str(), THEME_VERSION);
+ return false;
+ }
+
+ temp.clear();
+ _configFile.getKey("type", "theme", temp);
+ if (0 != temp.compareToIgnoreCase("classic")) {
+ warning("Theme config is not for the classic style theme");
+ return false;
+ }
+
+ getColorFromConfig("color", _colors[kColor][0], _colors[kColor][1], _colors[kColor][2]);
+ getColorFromConfig("shadowcolor", _colors[kShadowColor][0], _colors[kShadowColor][1], _colors[kShadowColor][2]);
+ getColorFromConfig("bgcolor", _colors[kBGColor][0], _colors[kBGColor][1], _colors[kBGColor][2]);
+ getColorFromConfig("textcolor", _colors[kTextColor][0], _colors[kTextColor][1], _colors[kTextColor][2]);
+ getColorFromConfig("textcolorhi", _colors[kTextColorHi][0], _colors[kTextColorHi][1], _colors[kTextColorHi][2]);
+
+ temp.clear();
+ temp = _evaluator->getStringVar("font");
+ if (temp.empty() || temp.compareToIgnoreCase("builtin")) {
+ if (_fontName != "builtin")
+ delete _font;
+ _fontName = "builtin";
+ } else if (temp != _fontName) {
+ if (_fontName != "builtin")
+ delete _font;
+ _font = loadFont(temp.c_str());
+ _fontName = temp;
+ }
+
+ return true;
+}
+
} // end of namespace GUI