diff options
author | Vicent Marti | 2008-08-13 23:07:26 +0000 |
---|---|---|
committer | Vicent Marti | 2008-08-13 23:07:26 +0000 |
commit | c4f2a691ce3feed23b28ba8b657e94baa9d2301b (patch) | |
tree | 4a1212087e6bccc2bf02e5a34cd1cac2b5265eb8 /gui/ThemeRenderer.cpp | |
parent | 80e059f2bb61f58e02d44d9dd125d23627d38b83 (diff) | |
download | scummvm-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.cpp | 39 |
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 } |