INT32 ATMFontMan::DeInstallFont(TCHAR *pMenuName, WORD Style) { INT32 err = BeginFontChange(); if (err==ATM_NOERR) err = RemoveFont(pMenuName, Style); EndFontChange(); return err; }
void CFGAS_FontMgr::RemoveFont(CFGAS_GEFont* pFont) { RemoveFont(m_CPFonts, pFont); RemoveFont(m_FamilyFonts, pFont); RemoveFont(m_UnicodeFonts, pFont); RemoveFont(m_BufferFonts, pFont); RemoveFont(m_StreamFonts, pFont); RemoveFont(m_DeriveFonts, pFont); int32_t iFind = m_Fonts.Find(pFont); if (iFind > -1) m_Fonts.RemoveAt(iFind, 1); }
BOOL FreeTypeFontEngine::RemoveFont(LPCWSTR FontName) { if (!FontName) return false; LOGFONTW* fontarray = GetFontNameFromFile(FontName); LOGFONTW* c_fontarray = fontarray; //记录原始指针 if (!fontarray) return false; FTC_FaceID fid = NULL; BOOL bIsFontLoaded, bIsFontFileLoaded = false; COwnedCriticalSectionLock __lock2(2, COwnedCriticalSectionLock::OCS_DC); //获取所有权,现在要处理DC,禁止所有绘图函数访问 CCriticalSectionLock __lock(CCriticalSectionLock::CS_MANAGER); while (*(char*)fontarray) { bIsFontLoaded = false; FreeTypeFontInfo* result = FindFont(fontarray->lfFaceName, fontarray->lfWeight, !!fontarray->lfItalic, false, &bIsFontLoaded); if (result) { fid = (FTC_FaceID)result->GetId(); if (bIsFontLoaded) //该字体已经被使用过 { RemoveFont(result); //枚举字体信息全部删除 bIsFontFileLoaded = true; //设置字体文件也被使用过 } else RemoveThisFont(result, fontarray); CCriticalSectionLock __lock(CCriticalSectionLock::CS_FONTENG); FTC_Manager_RemoveFaceID(cache_man, fid); m_mfontList[(int)fid-1]=NULL; } fontarray++; } free(c_fontarray); //利用原始指针释放 if (bIsFontFileLoaded) //若字体文件被使用过,则需要清楚所有DC { CTLSDCArray::iterator iter = TLSDCArray.begin(); while (iter!=TLSDCArray.end()) { ((CBitmapCache*)*iter)->~CBitmapCache(); //清除掉所有使用中的DC ++iter; } } return true; }
void CPDF_InterForm::RemoveFormFont(CFX_ByteString csNameTag) { RemoveFont(m_pFormDict, csNameTag); }
void CPDF_InterForm::RemoveFormFont(const CPDF_Font* pFont) { RemoveFont(m_pFormDict, pFont); }