mirror of https://github.com/OpenTTD/OpenTTD
(svn r25493) -Codechange: support for the safer variant of ICU's getFontTable
parent
6f359bc1f0
commit
0c14a586bd
|
@ -77,7 +77,7 @@ public:
|
||||||
virtual uint GetGlyphWidth(GlyphID key);
|
virtual uint GetGlyphWidth(GlyphID key);
|
||||||
virtual bool GetDrawGlyphShadow();
|
virtual bool GetDrawGlyphShadow();
|
||||||
virtual GlyphID MapCharToGlyph(WChar key) { return SPRITE_GLYPH | key; }
|
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 FontCache {
|
||||||
private:
|
private:
|
||||||
FT_Face face; ///< The font face associated with this font.
|
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. */
|
/** Container for information about a glyph. */
|
||||||
struct GlyphEntry {
|
struct GlyphEntry {
|
||||||
|
@ -229,7 +230,7 @@ public:
|
||||||
virtual uint GetGlyphWidth(GlyphID key);
|
virtual uint GetGlyphWidth(GlyphID key);
|
||||||
virtual bool GetDrawGlyphShadow();
|
virtual bool GetDrawGlyphShadow();
|
||||||
virtual GlyphID MapCharToGlyph(WChar key);
|
virtual GlyphID MapCharToGlyph(WChar key);
|
||||||
virtual const void *GetFontTable(uint32 tag);
|
virtual const void *GetFontTable(uint32 tag, size_t &length);
|
||||||
};
|
};
|
||||||
|
|
||||||
FT_Library _library = NULL;
|
FT_Library _library = NULL;
|
||||||
|
@ -363,8 +364,8 @@ FreeTypeFontCache::~FreeTypeFontCache()
|
||||||
FT_Done_Face(this->face);
|
FT_Done_Face(this->face);
|
||||||
this->ClearFontCache();
|
this->ClearFontCache();
|
||||||
|
|
||||||
for (SmallPair<uint32, const void *> *iter = this->font_tables.Begin(); iter != this->font_tables.End(); iter++) {
|
for (FontTable::iterator iter = this->font_tables.Begin(); iter != this->font_tables.End(); iter++) {
|
||||||
free(iter->second);
|
free(iter->second.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,10 +553,13 @@ GlyphID FreeTypeFontCache::MapCharToGlyph(WChar key)
|
||||||
return FT_Get_Char_Index(this->face, key);
|
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);
|
const FontTable::iterator iter = this->font_tables.Find(tag);
|
||||||
if (iter != this->font_tables.End()) return iter->second;
|
if (iter != this->font_tables.End()) {
|
||||||
|
length = iter->second.first;
|
||||||
|
return iter->second.second;
|
||||||
|
}
|
||||||
|
|
||||||
FT_ULong len = 0;
|
FT_ULong len = 0;
|
||||||
FT_Byte *result = NULL;
|
FT_Byte *result = NULL;
|
||||||
|
@ -566,8 +570,9 @@ const void *FreeTypeFontCache::GetFontTable(uint32 tag)
|
||||||
result = MallocT<FT_Byte>(len);
|
result = MallocT<FT_Byte>(len);
|
||||||
FT_Load_Sfnt_Table(this->face, tag, 0, result, &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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,9 +114,10 @@ public:
|
||||||
/**
|
/**
|
||||||
* Read a font table from the font.
|
* Read a font table from the font.
|
||||||
* @param tag The of the table to load.
|
* @param tag The of the table to load.
|
||||||
|
* @param length The length of the read data.
|
||||||
* @return The loaded table 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.
|
* Get the font cache of a given font size.
|
||||||
|
|
|
@ -76,7 +76,13 @@ float Font::getScaleFactorY() const
|
||||||
|
|
||||||
const void *Font::getFontTable(LETag tableTag) 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
|
LEGlyphID Font::mapCharToGlyph(LEUnicode32 ch) const
|
||||||
|
|
|
@ -45,6 +45,7 @@ public:
|
||||||
float getScaleFactorX() const;
|
float getScaleFactorX() const;
|
||||||
float getScaleFactorY() const;
|
float getScaleFactorY() const;
|
||||||
const void *getFontTable(LETag tableTag) const;
|
const void *getFontTable(LETag tableTag) const;
|
||||||
|
const void *getFontTable(LETag tableTag, size_t &length) const;
|
||||||
LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
|
LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
|
||||||
void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
|
void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
|
||||||
le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
|
le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
|
||||||
|
|
Loading…
Reference in New Issue