MAINT-8146 Fixed Installing viewer to non default path results in incorrect fonts loading

meow-7.2.2
andreykproductengine 2018-01-09 20:31:21 +02:00
parent 0af4e93e76
commit fadb3792ca
3 changed files with 65 additions and 3 deletions

View File

@ -106,6 +106,8 @@ LLFontFreetype::LLFontFreetype()
mAscender(0.f),
mDescender(0.f),
mLineHeight(0.f),
pFontBuffer(NULL),
mBufferSize(0),
mIsFallback(FALSE),
mFTFace(NULL),
mRenderGlyphCount(0),
@ -128,6 +130,8 @@ LLFontFreetype::~LLFontFreetype()
mCharGlyphInfoMap.clear();
delete mFontBitmapCachep;
delete pFontBuffer;
disclaimMem(mBufferSize);
// mFallbackFonts cleaned up by LLPointer destructor
}
@ -143,13 +147,64 @@ BOOL LLFontFreetype::loadFace(const std::string& filename, F32 point_size, F32 v
int error;
#ifdef LL_WINDOWS
if (mBufferSize > 0)
{
delete pFontBuffer;
disclaimMem(mBufferSize);
pFontBuffer = NULL;
mBufferSize = 0;
}
S32 file_size = 0;
LLFILE* file = LLFile::fopen(filename, "rb");
if (!file)
{
return FALSE;
}
if (!fseek(file, 0, SEEK_END))
{
file_size = ftell(file);
fseek(file, 0, SEEK_SET);
}
// Don't delete before FT_Done_Face
pFontBuffer = new(std::nothrow) U8[file_size];
if (!pFontBuffer)
{
fclose(file);
return FALSE;
}
mBufferSize = fread(pFontBuffer, 1, file_size, file);
fclose(file);
if (mBufferSize != file_size)
{
delete pFontBuffer;
mBufferSize = 0;
return FALSE;
}
error = FT_New_Memory_Face( gFTLibrary,
(FT_Byte*) pFontBuffer,
mBufferSize,
0,
&mFTFace);
#else
error = FT_New_Face( gFTLibrary,
filename.c_str(),
0,
&mFTFace );
&mFTFace);
#endif
if (error)
if (error)
{
delete pFontBuffer;
pFontBuffer = NULL;
mBufferSize = 0;
return FALSE;
}
@ -166,10 +221,15 @@ BOOL LLFontFreetype::loadFace(const std::string& filename, F32 point_size, F32 v
{
// Clean up freetype libs.
FT_Done_Face(mFTFace);
delete pFontBuffer;
pFontBuffer = NULL;
mBufferSize = 0;
mFTFace = NULL;
return FALSE;
}
claimMem(mBufferSize);
F32 y_max, y_min, x_max, x_min;
F32 ems_per_unit = 1.f/ mFTFace->units_per_EM;
F32 pixels_per_unit = pixels_per_em * ems_per_unit;

View File

@ -158,6 +158,8 @@ private:
F32 mLineHeight;
LLFT_Face mFTFace;
U8* pFontBuffer;
S32 mBufferSize;
BOOL mIsFallback;
font_vector_t mFallbackFonts; // A list of fallback fonts to look for glyphs in (for Unicode chars)

View File

@ -447,7 +447,7 @@ LLFontGL *LLFontRegistry::createFont(const LLFontDescriptor& desc)
if (!fontp->loadFace(font_path, extra_scale * point_size,
LLFontGL::sVertDPI, LLFontGL::sHorizDPI, 2, is_fallback))
{
LL_INFOS_ONCE("LLFontRegistry") << "Couldn't load font " << *file_name_it << LL_ENDL;
LL_INFOS_ONCE("LLFontRegistry") << "Couldn't load font " << *file_name_it << " from path " << local_path << LL_ENDL;
delete fontp;
fontp = NULL;
}