aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeRenderer.cpp
diff options
context:
space:
mode:
authorVicent Marti2008-08-13 23:07:26 +0000
committerVicent Marti2008-08-13 23:07:26 +0000
commitc4f2a691ce3feed23b28ba8b657e94baa9d2301b (patch)
tree4a1212087e6bccc2bf02e5a34cd1cac2b5265eb8 /gui/ThemeRenderer.cpp
parent80e059f2bb61f58e02d44d9dd125d23627d38b83 (diff)
downloadscummvm-rg350-c4f2a691ce3feed23b28ba8b657e94baa9d2301b.tar.gz
scummvm-rg350-c4f2a691ce3feed23b28ba8b657e94baa9d2301b.tar.bz2
scummvm-rg350-c4f2a691ce3feed23b28ba8b657e94baa9d2301b.zip
Finished theme loading support.
Added "themerc" file to default theme. svn-id: r33851
Diffstat (limited to 'gui/ThemeRenderer.cpp')
-rw-r--r--gui/ThemeRenderer.cpp39
1 files changed, 23 insertions, 16 deletions
diff --git a/gui/ThemeRenderer.cpp b/gui/ThemeRenderer.cpp
index 00a07909b0..f323807903 100644
--- a/gui/ThemeRenderer.cpp
+++ b/gui/ThemeRenderer.cpp
@@ -383,7 +383,6 @@ bool ThemeRenderer::loadTheme(Common::String fileName) {
}
}
- _themeName = "DEBUG - A Theme name";
_themeOk = true;
return true;
}
@@ -412,9 +411,10 @@ bool ThemeRenderer::loadDefaultXML() {
bool ThemeRenderer::loadThemeXML(Common::String themeName) {
assert(_parser);
+ _themeName.clear();
#ifdef USE_ZLIB
- unzFile zipFile = unzOpen((themeName + ".zip").c_str());
+ unzFile zipFile = unzOpen(themeName.c_str());
char fileNameBuffer[32];
int parseCount = 0;
@@ -424,7 +424,7 @@ bool ThemeRenderer::loadThemeXML(Common::String themeName) {
unzOpenCurrentFile(zipFile);
unzGetCurrentFileInfo(zipFile, &fileInfo, fileNameBuffer, 32, NULL, 0, NULL, 0);
- if (matchString(fileNameBuffer, "*.stx")) {
+ if (matchString(fileNameBuffer, "*.stx") || !strcmp(fileNameBuffer, "THEMERC")) {
uint8 *buffer = new uint8[fileInfo.uncompressed_size+1];
assert(buffer);
memset(buffer, 0, (fileInfo.uncompressed_size+1)*sizeof(uint8));
@@ -432,31 +432,38 @@ bool ThemeRenderer::loadThemeXML(Common::String themeName) {
Common::MemoryReadStream *stream = new Common::MemoryReadStream(buffer, fileInfo.uncompressed_size+1, true);
- if (parser()->loadStream(stream) == false || parser()->parse() == false) {
- warning("Failed to load stream for zipped file '%s'", fileNameBuffer);
- unzClose(zipFile);
+ if (!strcmp(fileNameBuffer, "THEMERC")) {
+ char stxHeader[128];
+ stream->readLine(stxHeader, 128);
+
+ if (!themeConfigParseHeader(stxHeader, _themeName))
+ error("Corrupted 'THEMERC' file");
+
delete stream;
- return false;
+
+ } else {
+ parseCount++;
+
+ if (parser()->loadStream(stream) == false || parser()->parse() == false) {
+ warning("Failed to load stream for zipped file '%s'", fileNameBuffer);
+ unzClose(zipFile);
+ delete stream;
+ return false;
+ }
}
-
- parseCount++;
- }
+ }
unzCloseCurrentFile(zipFile);
if (unzGoToNextFile(zipFile) != UNZ_OK)
break;
}
- } else if (parser()->loadFile(themeName + ".stx") && parser()->parse()) {
- parseCount++;
- } else {
- warning("No theme files for '%s' found.", themeName.c_str());
}
unzClose(zipFile);
- return (parseCount > 0);
+ return (parseCount > 0 && _themeName.empty() == false);
#else
- return (parser()->loadFile(themeName + ".stx") && parser()->parse());
+ return false;
#endif
}