FX_FONTDESCRIPTOR const* FX_DefFontMatcher(FX_LPFONTMATCHPARAMS pParams, const CFX_FontDescriptors& fonts) { FX_FONTDESCRIPTOR const* pBestFont = nullptr; int32_t iBestSimilar = 0; FX_BOOL bMatchStyle = (pParams->dwMatchFlags & FX_FONTMATCHPARA_MacthStyle) > 0; int32_t iCount = fonts.GetSize(); for (int32_t i = 0; i < iCount; ++i) { FX_FONTDESCRIPTOR const* pFont = fonts.GetPtrAt(i); if ((pFont->dwFontStyles & FX_FONTSTYLE_BoldItalic) == FX_FONTSTYLE_BoldItalic) { continue; } if (pParams->pwsFamily) { if (FXSYS_wcsicmp(pParams->pwsFamily, pFont->wsFontFace)) { continue; } if (pFont->uCharSet == FX_CHARSET_Symbol) { return pFont; } } if (pFont->uCharSet == FX_CHARSET_Symbol) { continue; } if (pParams->wCodePage != 0xFFFF) { if (FX_GetCodePageFromCharset(pFont->uCharSet) != pParams->wCodePage) { continue; } } else { if (pParams->dwUSB < 128) { uint32_t dwByte = pParams->dwUSB / 32; uint32_t dwUSB = 1 << (pParams->dwUSB % 32); if ((pFont->FontSignature.fsUsb[dwByte] & dwUSB) == 0) { continue; } } } if (bMatchStyle) { if ((pFont->dwFontStyles & 0x0F) == (pParams->dwFontStyles & 0x0F)) return pFont; continue; } if (pParams->pwsFamily) { if (FXSYS_wcsicmp(pParams->pwsFamily, pFont->wsFontFace) == 0) { return pFont; } } int32_t iSimilarValue = FX_GetSimilarValue(pFont, pParams->dwFontStyles); if (iBestSimilar < iSimilarValue) { iBestSimilar = iSimilarValue; pBestFont = pFont; } } return iBestSimilar < 1 ? nullptr : pBestFont; }
int CFX_WideString::CompareNoCase(const FX_WCHAR* lpsz) const { if (m_pData == NULL) { return (lpsz == NULL || lpsz[0] == 0) ? 0 : -1; } return FXSYS_wcsicmp(m_pData->m_String, lpsz); }