MAINT-8146 Fixed Installing viewer to non default path results in incorrect fonts loading
parent
0af4e93e76
commit
fadb3792ca
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue