[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