void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset) { if (!m_pFontInfo) return; m_FaceArray.push_back({name, static_cast<uint32_t>(charset)}); if (name == m_LastFamily) return; const uint8_t* ptr = name.raw_str(); bool bLocalized = false; for (int i = 0; i < name.GetLength(); i++) { if (ptr[i] > 0x80) { bLocalized = true; break; } } if (bLocalized) { void* hFont = m_pFontInfo->GetFont(name.c_str()); if (!hFont) { int iExact; hFont = m_pFontInfo->MapFont(0, 0, FXFONT_DEFAULT_CHARSET, 0, name.c_str(), iExact); if (!hFont) return; } CFX_ByteString new_name = GetPSNameFromTT(hFont); if (!new_name.IsEmpty()) m_LocalizedTTFonts.push_back(std::make_pair(new_name, name)); m_pFontInfo->DeleteFont(hFont); } m_InstalledTTFonts.push_back(name); m_LastFamily = name; }
void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset) { if (m_pFontInfo == NULL) { return; } if (m_CharsetArray.Find((FX_DWORD)charset) == -1) { m_CharsetArray.Add((FX_DWORD)charset); m_FaceArray.Add(name); } if (name == m_LastFamily) { return; } FX_LPCBYTE ptr = name; FX_BOOL bLocalized = FALSE; for (int i = 0; i < name.GetLength(); i ++) if (ptr[i] > 0x80) { bLocalized = TRUE; break; } if (bLocalized) { void* hFont = m_pFontInfo->GetFont(name); if (hFont == NULL) { FX_BOOL bExact; hFont = m_pFontInfo->MapFont(0, 0, FXFONT_DEFAULT_CHARSET, 0, name, bExact); if (hFont == NULL) { return; } } CFX_ByteString new_name = GetPSNameFromTT(hFont); if (!new_name.IsEmpty()) { new_name.Insert(0, ' '); m_InstalledTTFonts.Add(new_name); } m_pFontInfo->DeleteFont(hFont); } m_InstalledTTFonts.Add(name); m_LastFamily = name; }