Changeset - r20478:8c1e52fed405
[Not reviewed]
master
0 4 0
rubidium - 11 years ago 2013-06-27 21:21:47
rubidium@openttd.org
(svn r25493) -Codechange: support for the safer variant of ICU's getFontTable
4 files changed with 24 insertions and 11 deletions:
0 comments (0 inline, 0 general)
src/fontcache.cpp
Show inline comments
 
@@ -77,7 +77,7 @@ public:
 
	virtual uint GetGlyphWidth(GlyphID key);
 
	virtual bool GetDrawGlyphShadow();
 
	virtual GlyphID MapCharToGlyph(WChar key) { return SPRITE_GLYPH | key; }
 
	virtual const void *GetFontTable(uint32 tag) { return NULL; }
 
	virtual const void *GetFontTable(uint32 tag, size_t &length) { length = 0; return NULL; }
 
};
 

	
 
/**
 
@@ -191,7 +191,8 @@ class FreeTypeFontCache : public FontCac
 
private:
 
	FT_Face face;  ///< The font face associated with this font.
 

	
 
	SmallMap<uint32, const void*> font_tables; ///< Cached font tables.
 
	typedef SmallMap<uint32, SmallPair<size_t, const void*>> FontTable; ///< Table with font table cache
 
	FontTable font_tables; ///< Cached font tables.
 

	
 
	/** Container for information about a glyph. */
 
	struct GlyphEntry {
 
@@ -229,7 +230,7 @@ public:
 
	virtual uint GetGlyphWidth(GlyphID key);
 
	virtual bool GetDrawGlyphShadow();
 
	virtual GlyphID MapCharToGlyph(WChar key);
 
	virtual const void *GetFontTable(uint32 tag);
 
	virtual const void *GetFontTable(uint32 tag, size_t &length);
 
};
 

	
 
FT_Library _library = NULL;
 
@@ -363,8 +364,8 @@ FreeTypeFontCache::~FreeTypeFontCache()
 
	FT_Done_Face(this->face);
 
	this->ClearFontCache();
 

	
 
	for (SmallPair<uint32, const void *> *iter = this->font_tables.Begin(); iter != this->font_tables.End(); iter++) {
 
		free(iter->second);
 
	for (FontTable::iterator iter = this->font_tables.Begin(); iter != this->font_tables.End(); iter++) {
 
		free(iter->second.second);
 
	}
 
}
 

	
 
@@ -552,10 +553,13 @@ GlyphID FreeTypeFontCache::MapCharToGlyp
 
	return FT_Get_Char_Index(this->face, key);
 
}
 

	
 
const void *FreeTypeFontCache::GetFontTable(uint32 tag)
 
const void *FreeTypeFontCache::GetFontTable(uint32 tag, size_t &length)
 
{
 
	const SmallPair<uint32, const void *> *iter = this->font_tables.Find(tag);
 
	if (iter != this->font_tables.End()) return iter->second;
 
	const FontTable::iterator iter = this->font_tables.Find(tag);
 
	if (iter != this->font_tables.End()) {
 
		length = iter->second.first;
 
		return iter->second.second;
 
	}
 

	
 
	FT_ULong len = 0;
 
	FT_Byte *result = NULL;
 
@@ -566,8 +570,9 @@ const void *FreeTypeFontCache::GetFontTa
 
		result = MallocT<FT_Byte>(len);
 
		FT_Load_Sfnt_Table(this->face, tag, 0, result, &len);
 
	}
 
	length = len;
 

	
 
	this->font_tables.Insert(tag, result);
 
	this->font_tables.Insert(tag, SmallPair<size_t, const void *>(length, result));
 
	return result;
 
}
 

	
src/fontcache.h
Show inline comments
 
@@ -114,9 +114,10 @@ public:
 
	/**
 
	 * Read a font table from the font.
 
	 * @param tag The of the table to load.
 
	 * @param length The length of the read data.
 
	 * @return The loaded table data.
 
	 */
 
	virtual const void *GetFontTable(uint32 tag) = 0;
 
	virtual const void *GetFontTable(uint32 tag, size_t &length) = 0;
 

	
 
	/**
 
	 * Get the font cache of a given font size.
src/gfx_layout.cpp
Show inline comments
 
@@ -76,7 +76,13 @@ float Font::getScaleFactorY() const
 

	
 
const void *Font::getFontTable(LETag tableTag) const
 
{
 
	return this->fc->GetFontTable(tableTag);
 
	size_t length;
 
	return this->getFontTable(tableTag, length);
 
}
 

	
 
const void *Font::getFontTable(LETag tableTag, size_t &length) const
 
{
 
	return this->fc->GetFontTable(tableTag, length);
 
}
 

	
 
LEGlyphID Font::mapCharToGlyph(LEUnicode32 ch) const
src/gfx_layout.h
Show inline comments
 
@@ -45,6 +45,7 @@ public:
 
	float getScaleFactorX() const;
 
	float getScaleFactorY() const;
 
	const void *getFontTable(LETag tableTag) const;
 
	const void *getFontTable(LETag tableTag, size_t &length) const;
 
	LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
 
	void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
 
	le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
0 comments (0 inline, 0 general)