[Scummvm-cvs-logs] SF.net SVN: scummvm:[33824] scummvm/branches/gsoc2008-gui/gui
Tanoku at users.sourceforge.net
Tanoku at users.sourceforge.net
Wed Aug 13 14:08:15 CEST 2008
Revision: 33824
http://scummvm.svn.sourceforge.net/scummvm/?rev=33824&view=rev
Author: Tanoku
Date: 2008-08-13 12:08:14 +0000 (Wed, 13 Aug 2008)
Log Message:
-----------
Improved theme loading.
Added support for multiple STX files.
Modified Paths:
--------------
scummvm/branches/gsoc2008-gui/gui/ThemeRenderer.cpp
scummvm/branches/gsoc2008-gui/gui/themes/scummodern.zip
Modified: scummvm/branches/gsoc2008-gui/gui/ThemeRenderer.cpp
===================================================================
--- scummvm/branches/gsoc2008-gui/gui/ThemeRenderer.cpp 2008-08-13 12:01:59 UTC (rev 33823)
+++ scummvm/branches/gsoc2008-gui/gui/ThemeRenderer.cpp 2008-08-13 12:08:14 UTC (rev 33824)
@@ -412,43 +412,52 @@
bool ThemeRenderer::loadThemeXML(Common::String themeName) {
assert(_parser);
-
- if (!parser()->loadFile(themeName + ".stx")){
+
#ifdef USE_ZLIB
- unzFile zipFile = unzOpen((themeName + ".zip").c_str());
-
- if (zipFile && unzLocateFile(zipFile, (themeName + ".stx").c_str(), 2) == UNZ_OK) {
-
+ unzFile zipFile = unzOpen((themeName + ".zip").c_str());
+ char fileNameBuffer[32];
+ int parseCount = 0;
+
+ if (zipFile && unzGoToFirstFile(zipFile) == UNZ_OK) {
+ while (true) {
unz_file_info fileInfo;
unzOpenCurrentFile(zipFile);
- unzGetCurrentFileInfo(zipFile, &fileInfo, NULL, 0, NULL, 0, NULL, 0);
- uint8 *buffer = new uint8[fileInfo.uncompressed_size+1];
- assert(buffer);
- memset(buffer, 0, (fileInfo.uncompressed_size+1)*sizeof(uint8));
- unzReadCurrentFile(zipFile, buffer, fileInfo.uncompressed_size);
- unzCloseCurrentFile(zipFile);
+ unzGetCurrentFileInfo(zipFile, &fileInfo, fileNameBuffer, 32, NULL, 0, NULL, 0);
+
+ if (matchString(fileNameBuffer, "*.stx")) {
+ uint8 *buffer = new uint8[fileInfo.uncompressed_size+1];
+ assert(buffer);
+ memset(buffer, 0, (fileInfo.uncompressed_size+1)*sizeof(uint8));
+ unzReadCurrentFile(zipFile, buffer, fileInfo.uncompressed_size);
- Common::MemoryReadStream *stream = new Common::MemoryReadStream(buffer, fileInfo.uncompressed_size+1, true);
-
- if (!parser()->loadStream(stream)) {
- unzClose(zipFile);
- delete stream;
- return false;
+ 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 %s", fileNameBuffer);
+ unzClose(zipFile);
+ delete stream;
+ return false;
+ }
+
+ parseCount++;
}
-
-// delete[] buffer;
- buffer = 0;
- } else {
- unzClose(zipFile);
- return false;
+
+ unzCloseCurrentFile(zipFile);
+
+ if (unzGoToNextFile(zipFile) == UNZ_END_OF_LIST_OF_FILE)
+ break;
}
- unzClose(zipFile);
+ } 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);
#else
- return false;
+ return (parser()->loadFile(themeName + ".stx") && parser()->parse());
#endif
- }
-
- return parser()->parse();
}
bool ThemeRenderer::isWidgetCached(DrawData type, const Common::Rect &r) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list