GError GFontsImpExp::DoRead(const GChar8 *FullFileName, GElement& Element, const GDynArray<GImpExpOption>& ParsedOptions) { GString metricsFile; GBool outerCCW = G_TRUE; GReal scale = 1; // a value of 0 indicates a normalization to square EM [0;1] // check each option GDynArray<GImpExpOption>::const_iterator it = ParsedOptions.begin(); for (; it != ParsedOptions.end(); ++it) { if (StrUtils::SameText(it->OptionName, "outerccw")) { if (StrUtils::SameText(it->OptionValue, "false")) outerCCW = G_FALSE; } else if (StrUtils::SameText(it->OptionName, "metricsfile")) metricsFile = it->OptionValue; else if (StrUtils::SameText(it->OptionName, "scale")) scale = (GReal)StrUtils::ToDouble(it->OptionValue); } // init freetype2 library InitFTLibrary(); // read the font GError err = ReadFont(FullFileName, Element, outerCCW, metricsFile, scale); // destroy freetype2 library FT_Done_FreeType(gFontLibrary); gFontLibraryInitialized = G_FALSE; return err; }
FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name, int weight, FX_BOOL bItalic, uint8_t* pData, uint32_t size, int face_index) { CTTFontDesc* pFontDesc = new CTTFontDesc; pFontDesc->m_Type = 1; pFontDesc->m_SingleFace.m_pFace = nullptr; pFontDesc->m_SingleFace.m_bBold = weight; pFontDesc->m_SingleFace.m_bItalic = bItalic; pFontDesc->m_pFontData = pData; pFontDesc->m_RefCount = 1; InitFTLibrary(); FXFT_Library library = m_FTLibrary; int ret = FXFT_New_Memory_Face(library, pData, size, face_index, &pFontDesc->m_SingleFace.m_pFace); if (ret) { delete pFontDesc; return nullptr; } ret = FXFT_Set_Pixel_Sizes(pFontDesc->m_SingleFace.m_pFace, 64, 64); if (ret) { delete pFontDesc; return nullptr; } m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)] = pFontDesc; return pFontDesc->m_SingleFace.m_pFace; }
FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index) { InitFTLibrary(); FXFT_Library library = m_FTLibrary; FXFT_Face face = nullptr; if (FXFT_New_Face(library, filename, face_index, &face)) return nullptr; return FXFT_Set_Pixel_Sizes(face, 64, 64) ? nullptr : face; }
FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData, uint32_t size, int face_index) { InitFTLibrary(); FXFT_Library library = m_FTLibrary; FXFT_Face face = nullptr; if (FXFT_New_Memory_Face(library, pData, size, face_index, &face)) return nullptr; return FXFT_Set_Pixel_Sizes(face, 64, 64) ? nullptr : face; }
FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, uint32_t flags, int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont) { InitFTLibrary(); return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight, italic_angle, CharsetCP, pSubstFont); }