FT_New_Face is a quite heavy function and shouldn't be called for every StringWidth, StringHeight and DrawString call. We now keep it open in FontStyle and destroy it there too.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12006 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -140,7 +140,9 @@ public:
|
|||||||
|
|
||||||
const char *GetPath(void);
|
const char *GetPath(void);
|
||||||
font_height GetHeight(const float &size);
|
font_height GetHeight(const float &size);
|
||||||
|
|
||||||
|
FT_Face GetFTFace() const { return fFTFace; }
|
||||||
|
|
||||||
// TODO: Re-enable when I understand how the FT2 Cache system changed from
|
// TODO: Re-enable when I understand how the FT2 Cache system changed from
|
||||||
// 2.1.4 to 2.1.8
|
// 2.1.4 to 2.1.8
|
||||||
// int16 ConvertToUnicode(uint16 c);
|
// int16 ConvertToUnicode(uint16 c);
|
||||||
@@ -154,6 +156,7 @@ protected:
|
|||||||
bool is_fixedwidth, is_scalable, has_kerning, has_bitmaps;
|
bool is_fixedwidth, is_scalable, has_kerning, has_bitmaps;
|
||||||
int32 tunedcount;
|
int32 tunedcount;
|
||||||
CachedFace cachedface;
|
CachedFace cachedface;
|
||||||
|
FT_Face fFTFace;
|
||||||
uint8 format;
|
uint8 format;
|
||||||
BRect fbounds;
|
BRect fbounds;
|
||||||
uint16 fID;
|
uint16 fID;
|
||||||
|
|||||||
@@ -64,13 +64,15 @@ public:
|
|||||||
void SetRotation(const float &value) { frotation=value; }
|
void SetRotation(const float &value) { frotation=value; }
|
||||||
void SetFace(const uint32 &value) { fFace=value; }
|
void SetFace(const uint32 &value) { fFace=value; }
|
||||||
|
|
||||||
bool IsFixedWidth(void) { return fStyle->IsFixedWidth(); }
|
bool IsFixedWidth(void) const { return fStyle->IsFixedWidth(); }
|
||||||
bool IsScalable(void) { return fStyle->IsScalable(); }
|
bool IsScalable(void) const { return fStyle->IsScalable(); }
|
||||||
bool HasKerning(void) { return fStyle->HasKerning(); }
|
bool HasKerning(void) const { return fStyle->HasKerning(); }
|
||||||
bool HasTuned(void) { return fStyle->HasTuned(); }
|
bool HasTuned(void) const { return fStyle->HasTuned(); }
|
||||||
int32 TunedCount(void) { return fStyle->TunedCount(); }
|
int32 TunedCount(void) const { return fStyle->TunedCount(); }
|
||||||
uint16 GlyphCount(void) { return fStyle->GlyphCount(); }
|
uint16 GlyphCount(void) const { return fStyle->GlyphCount(); }
|
||||||
uint16 CharMapCount(void) { return fStyle->CharMapCount(); }
|
uint16 CharMapCount(void) const { return fStyle->CharMapCount(); }
|
||||||
|
|
||||||
|
FT_Face GetFTFace() const { return fStyle->GetFTFace(); };
|
||||||
|
|
||||||
const char *GetStyle(void) const;
|
const char *GetStyle(void) const;
|
||||||
const char *GetFamily(void) const;
|
const char *GetFamily(void) const;
|
||||||
|
|||||||
@@ -33,10 +33,11 @@ FTC_Manager ftmanager;
|
|||||||
/*!
|
/*!
|
||||||
\brief Constructor
|
\brief Constructor
|
||||||
\param filepath path to a font file
|
\param filepath path to a font file
|
||||||
\param face FreeType handle for the font file after it is loaded - for its info only
|
\param face FreeType handle for the font file after it is loaded - it will be kept open until the FontStyle is destroied
|
||||||
*/
|
*/
|
||||||
FontStyle::FontStyle(const char *filepath, FT_Face face)
|
FontStyle::FontStyle(const char *filepath, FT_Face face)
|
||||||
{
|
{
|
||||||
|
fFTFace = face;
|
||||||
fName=face->style_name;
|
fName=face->style_name;
|
||||||
cachedface=new CachedFaceRec;
|
cachedface=new CachedFaceRec;
|
||||||
cachedface->file_path=filepath;
|
cachedface->file_path=filepath;
|
||||||
|
|||||||
@@ -286,7 +286,9 @@ status_t FontServer::ScanDirectory(const char *fontspath)
|
|||||||
else
|
else
|
||||||
validcount++;
|
validcount++;
|
||||||
|
|
||||||
FT_Done_Face(face);
|
// FT_Face is kept open in FontStyle and will be unset in the
|
||||||
|
// FontStyle destructor
|
||||||
|
|
||||||
} // end for(i<refcount)
|
} // end for(i<refcount)
|
||||||
|
|
||||||
dir.Unset();
|
dir.Unset();
|
||||||
|
|||||||
Reference in New Issue
Block a user