aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeNew.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2006-04-16 19:54:39 +0000
committerJohannes Schickel2006-04-16 19:54:39 +0000
commite9cbf5fcbd1af19d1936593d1de736c0e0e91f89 (patch)
treedb05f01ba83a3fc96dabb366f73cf53e2f7ff604 /gui/ThemeNew.cpp
parent74edd90aba15db1196b16b5eae918347670d11c8 (diff)
downloadscummvm-rg350-e9cbf5fcbd1af19d1936593d1de736c0e0e91f89.tar.gz
scummvm-rg350-e9cbf5fcbd1af19d1936593d1de736c0e0e91f89.tar.bz2
scummvm-rg350-e9cbf5fcbd1af19d1936593d1de736c0e0e91f89.zip
- Moves Graphics::loadFont to Graphics::NewFont::loadFont
- adds code for caching of fonts (just for Graphics::NewFont) - implements cache using in the modern theme for custom fonts - adds cache file for current normal font in the theme zip file svn-id: r21952
Diffstat (limited to 'gui/ThemeNew.cpp')
-rw-r--r--gui/ThemeNew.cpp102
1 files changed, 81 insertions, 21 deletions
diff --git a/gui/ThemeNew.cpp b/gui/ThemeNew.cpp
index 1a225c3ab8..11b737ffb1 100644
--- a/gui/ThemeNew.cpp
+++ b/gui/ThemeNew.cpp
@@ -1341,38 +1341,98 @@ void ThemeNew::deleteFonts() {
}
const Graphics::Font *ThemeNew::loadFont(const char *filename) {
- const Graphics::Font *font = 0;
-
+ const Graphics::NewFont *font = 0;
+ Common::String cacheFilename = genCacheFilename(filename);
Common::File fontFile;
- if (fontFile.open(filename)) {
- font = Graphics::loadFont(fontFile);
+
+ if (cacheFilename != "") {
+ if (fontFile.open(cacheFilename))
+ font = Graphics::NewFont::loadFromCache(fontFile);
if (font)
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;
+ }
+ unzClose(zipFile);
+#endif
+ if (font)
+ return font;
+ }
+
+ printf("normal font open!\n");
+ fflush(stdout);
+
+ // normal open
+ if (fontFile.open(filename)) {
+ font = Graphics::NewFont::loadFont(fontFile);
}
#ifdef USE_ZLIB
- 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::loadFont(stream);
-
- delete [] buffer;
- buffer = 0;
+ 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;
+ }
+ unzClose(zipFile);
}
- unzClose(zipFile);
#endif
+
+ if (font) {
+ if (cacheFilename != "") {
+ if (!Graphics::NewFont::cacheFontData(*font, cacheFilename)) {
+ warning("Couldn't create cache file for font '%s'", filename);
+ }
+ }
+ }
+
return font;
}
+Common::String ThemeNew::genCacheFilename(const char *filename) {
+ Common::String cacheName = filename;
+ for (int i = cacheName.size() - 1; i >= 0; --i) {
+ if (cacheName[i] == '.') {
+ while ((uint)i < cacheName.size() - 1) {
+ cacheName.deleteLastChar();
+ }
+
+ cacheName += "fcc";
+ return cacheName;
+ }
+ }
+
+ return "";
+}
+
#pragma mark -
OverlayColor ThemeNew::calcLuminance(OverlayColor col) {