Changeset - r20546:b6881fee3922
[Not reviewed]
master
0 2 0
frosch - 11 years ago 2013-07-07 12:07:06
frosch@openttd.org
(svn r25574) -Fix (r25570): Trouble with initialisation order of static members of Layouter and FontCache.
2 files changed with 13 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/gfx_layout.cpp
Show inline comments
 
@@ -22,7 +22,7 @@
 

	
 

	
 
/** Cache of ParagraphLayout lines. */
 
Layouter::LineCache Layouter::linecache;
 
Layouter::LineCache *Layouter::linecache;
 

	
 
/** Cache of Font instances. */
 
Layouter::FontColourMap Layouter::fonts[FS_END];
 
@@ -550,10 +550,15 @@ void Layouter::ResetFontCache(FontSize s
 
 */
 
Layouter::LineCacheItem &Layouter::GetCachedParagraphLayout(const char *str, size_t len, const FontState &state)
 
{
 
	if (linecache == NULL) {
 
		/* Create linecache on first access to avoid trouble with initialisation order of static variables. */
 
		linecache = new LineCache();
 
	}
 

	
 
	LineCacheKey key;
 
	key.state_before = state;
 
	key.str.assign(str, len);
 
	return linecache[key];
 
	return (*linecache)[key];
 
}
 

	
 
/**
 
@@ -561,7 +566,7 @@ Layouter::LineCacheItem &Layouter::GetCa
 
 */
 
void Layouter::ResetLineCache()
 
{
 
	linecache.clear();
 
	if (linecache != NULL) linecache->clear();
 
}
 

	
 
/**
 
@@ -569,6 +574,8 @@ void Layouter::ResetLineCache()
 
 */
 
void Layouter::ReduceLineCache()
 
{
 
	/* TODO LRU cache would be fancy, but not exactly necessary */
 
	if (linecache.size() > 4096) ResetLineCache();
 
	if (linecache != NULL) {
 
		/* TODO LRU cache would be fancy, but not exactly necessary */
 
		if (linecache->size() > 4096) ResetLineCache();
 
	}
 
}
src/gfx_layout.h
Show inline comments
 
@@ -198,7 +198,7 @@ class Layouter : public AutoDeleteSmallV
 
		~LineCacheItem() { delete layout; }
 
	};
 
	typedef std::map<LineCacheKey, LineCacheItem> LineCache;
 
	static LineCache linecache;
 
	static LineCache *linecache;
 

	
 
	static LineCacheItem &GetCachedParagraphLayout(const char *str, size_t len, const FontState &state);
 

	
0 comments (0 inline, 0 general)