aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/cache.cpp
diff options
context:
space:
mode:
authorMartin Kiewitz2010-01-31 17:45:22 +0000
committerMartin Kiewitz2010-01-31 17:45:22 +0000
commitaaf756e7364658bcde053932907bbf009e1762ab (patch)
tree1f5ac575c4e5c97de6a28fd8b1856c42a6336328 /engines/sci/graphics/cache.cpp
parent3b411f65767256f3d55fd361a253d06f6426654c (diff)
downloadscummvm-rg350-aaf756e7364658bcde053932907bbf009e1762ab.tar.gz
scummvm-rg350-aaf756e7364658bcde053932907bbf009e1762ab.tar.bz2
scummvm-rg350-aaf756e7364658bcde053932907bbf009e1762ab.zip
SCI: implemented font caching
svn-id: r47762
Diffstat (limited to 'engines/sci/graphics/cache.cpp')
-rw-r--r--engines/sci/graphics/cache.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/engines/sci/graphics/cache.cpp b/engines/sci/graphics/cache.cpp
index 8d153e8472..a1330797d4 100644
--- a/engines/sci/graphics/cache.cpp
+++ b/engines/sci/graphics/cache.cpp
@@ -41,10 +41,20 @@ GfxCache::GfxCache(ResourceManager *resMan, GfxScreen *screen, GfxPalette *palet
}
GfxCache::~GfxCache() {
- purgeCache();
+ purgeFontCache();
+ purgeViewCache();
}
-void GfxCache::purgeCache() {
+void GfxCache::purgeFontCache() {
+ for (FontCache::iterator iter = _cachedFonts.begin(); iter != _cachedFonts.end(); ++iter) {
+ delete iter->_value;
+ iter->_value = 0;
+ }
+
+ _cachedFonts.clear();
+}
+
+void GfxCache::purgeViewCache() {
for (ViewCache::iterator iter = _cachedViews.begin(); iter != _cachedViews.end(); ++iter) {
delete iter->_value;
iter->_value = 0;
@@ -53,9 +63,19 @@ void GfxCache::purgeCache() {
_cachedViews.clear();
}
+Font *GfxCache::getFont(GuiResourceId fontId) {
+ if (_cachedFonts.size() >= MAX_CACHED_FONTS)
+ purgeFontCache();
+
+ if (!_cachedViews.contains(fontId))
+ _cachedFonts[fontId] = new Font(_resMan, _screen, fontId);
+
+ return _cachedFonts[fontId];
+}
+
View *GfxCache::getView(GuiResourceId viewId) {
if (_cachedViews.size() >= MAX_CACHED_VIEWS)
- purgeCache();
+ purgeViewCache();
if (!_cachedViews.contains(viewId))
_cachedViews[viewId] = new View(_resMan, _screen, _palette, viewId);