diff options
| author | Max Horn | 2008-09-05 22:12:46 +0000 | 
|---|---|---|
| committer | Max Horn | 2008-09-05 22:12:46 +0000 | 
| commit | 2cb285c9a0c068c4f1ed77c351b5f553fd7df0be (patch) | |
| tree | 46dcc7a85a9748d136259151edf455e211e82bde /gui | |
| parent | b00f8dc2ed09c828747574a23a7538bb068931f5 (diff) | |
| download | scummvm-rg350-2cb285c9a0c068c4f1ed77c351b5f553fd7df0be.tar.gz scummvm-rg350-2cb285c9a0c068c4f1ed77c351b5f553fd7df0be.tar.bz2 scummvm-rg350-2cb285c9a0c068c4f1ed77c351b5f553fd7df0be.zip  | |
Added simple ZipArchive class, and changed some GUI code to use it, instead of the ugly C API to the unzip code
svn-id: r34370
Diffstat (limited to 'gui')
| -rw-r--r-- | gui/theme.cpp | 104 | 
1 files changed, 24 insertions, 80 deletions
diff --git a/gui/theme.cpp b/gui/theme.cpp index 5d1ce05fd4..df388d60ab 100644 --- a/gui/theme.cpp +++ b/gui/theme.cpp @@ -26,6 +26,7 @@  #include "gui/eval.h"  #include "common/file.h" +#include "common/archive.h"  #include "common/unzip.h"  namespace GUI { @@ -69,24 +70,11 @@ const Graphics::Font *Theme::loadFont(const char *filename) {  			return font;  #ifdef USE_ZLIB -		unzFile zipFile = unzOpen((_stylefile + ".zip").c_str()); -		if (zipFile && unzLocateFile(zipFile, cacheFilename.c_str(), 2) == UNZ_OK) { -			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); -			Common::MemoryReadStream stream(buffer, fileInfo.uncompressed_size+1); - -			font = Graphics::NewFont::loadFromCache(stream); - -			delete[] buffer; -			buffer = 0; +		ZipArchive zipArchive(_stylefile + ".zip"); +		if (zipArchive.hasFile(cacheFilename)) { +			Common::FilePtr stream(zipArchive.openFile(cacheFilename)); +			font = Graphics::NewFont::loadFromCache(*stream.get());  		} -		unzClose(zipFile);  #endif  		if (font)  			return font; @@ -99,24 +87,11 @@ const Graphics::Font *Theme::loadFont(const char *filename) {  #ifdef USE_ZLIB  	if (!font) { -		unzFile zipFile = unzOpen((_stylefile + ".zip").c_str()); -		if (zipFile && unzLocateFile(zipFile, filename, 2) == UNZ_OK) { -			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); -			Common::MemoryReadStream stream(buffer, fileInfo.uncompressed_size+1); - -			font = Graphics::NewFont::loadFont(stream); - -			delete[] buffer; -			buffer = 0; +		ZipArchive zipArchive(_stylefile + ".zip"); +		if (zipArchive.hasFile(filename)) { +			Common::FilePtr stream(zipArchive.openFile(filename)); +			font = Graphics::NewFont::loadFont(*stream.get());  		} -		unzClose(zipFile);  	}  #endif @@ -158,37 +133,20 @@ bool Theme::loadConfigFile(const Common::String &stylefile) {  	if (ConfMan.hasKey("extrapath"))  		Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath")); -	if (!_configFile.loadFromFile(stylefile + ".ini")) { +	if (_configFile.loadFromFile(stylefile + ".ini")) +		return true; +  #ifdef USE_ZLIB -		// Maybe find a nicer solution to this -		unzFile zipFile = unzOpen((stylefile + ".zip").c_str()); -		if (zipFile && unzLocateFile(zipFile, (stylefile + ".ini").c_str(), 2) == UNZ_OK) { -			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); -			Common::MemoryReadStream stream(buffer, fileInfo.uncompressed_size+1); -			if (!_configFile.loadFromStream(stream)) { -				unzClose(zipFile); -				return false; -			} -			delete[] buffer; -			buffer = 0; -		} else { -			unzClose(zipFile); -			return false; -		} -		unzClose(zipFile); -#else -		return false; -#endif +	// Maybe find a nicer solution to this +	ZipArchive zipArchive(stylefile + ".zip"); +	if (zipArchive.hasFile(stylefile + ".ini")) { +		Common::FilePtr stream(zipArchive.openFile(stylefile + ".ini")); +		if (_configFile.loadFromStream(*stream.get())) +			return true;  	} +#endif -	return true; +	return false;  }  bool Theme::themeConfigUseable(const Common::String &stylefile, const Common::String &style, Common::String *cStyle, Common::ConfigFile *cfg) { @@ -210,30 +168,16 @@ bool Theme::themeConfigUseable(const Common::String &stylefile, const Common::St  	if (!file.open(stylefile + ".ini")) {  #ifdef USE_ZLIB  		// Maybe find a nicer solution to this -		unzFile zipFile = unzOpen((stylefile + ".zip").c_str()); -		if (zipFile && unzLocateFile(zipFile, (stylefile + ".ini").c_str(), 2) == UNZ_OK) { +		ZipArchive zipArchive(stylefile + ".zip"); +		if (zipArchive.hasFile(stylefile + ".ini")) {  			if (!style.empty() || cStyle || cfg) { -				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); -				Common::MemoryReadStream stream(buffer, fileInfo.uncompressed_size+1); -				if (!cfg->loadFromStream(stream)) { -					unzClose(zipFile); +				Common::FilePtr stream(zipArchive.openFile(stylefile + ".ini")); +				if (!cfg->loadFromStream(*stream.get()))  					return false; -				} -				delete[] buffer; -				buffer = 0;  			}  		} else { -			unzClose(zipFile);  			return false;  		} -		unzClose(zipFile);  #else  		return false;  #endif  | 
