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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
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);
}