Index: xfa/fgas/font/fgas_stdfontmgr.cpp |
diff --git a/xfa/fgas/font/fgas_stdfontmgr.cpp b/xfa/fgas/font/fgas_stdfontmgr.cpp |
index fc839e9209e6c105483db9c9f9a4bc61c30505a9..00b1028a76e7973501b593b8dff4e58779798dee 100644 |
--- a/xfa/fgas/font/fgas_stdfontmgr.cpp |
+++ b/xfa/fgas/font/fgas_stdfontmgr.cpp |
@@ -13,9 +13,11 @@ |
#include "xfa/fgas/font/fgas_gefont.h" |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
+ |
IFGAS_FontMgr* IFGAS_FontMgr::Create(FX_LPEnumAllFonts pEnumerator) { |
return new CFGAS_StdFontMgrImp(pEnumerator); |
} |
+ |
CFGAS_StdFontMgrImp::CFGAS_StdFontMgrImp(FX_LPEnumAllFonts pEnumerator) |
: m_pEnumerator(pEnumerator), |
m_FontFaces(), |
@@ -74,6 +76,7 @@ CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByCodePage( |
} |
return NULL; |
} |
+ |
CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByCharset( |
uint8_t nCharset, |
uint32_t dwFontStyles, |
@@ -128,6 +131,7 @@ CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByLanguage( |
return GetDefFontByCodePage(FX_GetDefCodePageByLanguage(wLanguage), |
dwFontStyles, pszFontFamily); |
} |
+ |
CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(const FX_WCHAR* pszFontFamily, |
uint32_t dwFontStyles, |
uint16_t wCodePage) { |
@@ -159,6 +163,7 @@ CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(const FX_WCHAR* pszFontFamily, |
} |
return NULL; |
} |
+ |
CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(const uint8_t* pBuffer, |
int32_t iLength) { |
ASSERT(pBuffer && iLength > 0); |
@@ -207,6 +212,7 @@ CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(IFX_Stream* pFontStream, |
} |
return NULL; |
} |
+ |
CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(CFGAS_GEFont* pSrcFont, |
uint32_t dwFontStyles, |
uint16_t wCodePage) { |
@@ -258,6 +264,7 @@ void CFGAS_StdFontMgrImp::RemoveFont(CFX_MapPtrToPtr& fontMap, |
break; |
} |
} |
+ |
void CFGAS_StdFontMgrImp::RemoveFont(CFGAS_GEFont* pFont) { |
RemoveFont(m_CPFonts, pFont); |
RemoveFont(m_FamilyFonts, pFont); |
@@ -270,6 +277,7 @@ void CFGAS_StdFontMgrImp::RemoveFont(CFGAS_GEFont* pFont) { |
m_Fonts.RemoveAt(iFind, 1); |
} |
} |
+ |
FX_FONTDESCRIPTOR const* CFGAS_StdFontMgrImp::FindFont( |
const FX_WCHAR* pszFontFamily, |
uint32_t dwFontStyles, |
@@ -308,6 +316,7 @@ FX_FONTDESCRIPTOR const* CFGAS_StdFontMgrImp::FindFont( |
} |
return NULL; |
} |
+ |
FX_FONTDESCRIPTOR const* FX_DefFontMatcher(FX_LPFONTMATCHPARAMS pParams, |
const CFX_FontDescriptors& fonts) { |
FX_FONTDESCRIPTOR const* pBestFont = NULL; |
@@ -363,6 +372,7 @@ FX_FONTDESCRIPTOR const* FX_DefFontMatcher(FX_LPFONTMATCHPARAMS pParams, |
} |
return iBestSimilar < 1 ? NULL : pBestFont; |
} |
+ |
int32_t FX_GetSimilarValue(FX_FONTDESCRIPTOR const* pFont, |
uint32_t dwFontStyles) { |
int32_t iValue = 0; |
@@ -384,9 +394,11 @@ int32_t FX_GetSimilarValue(FX_FONTDESCRIPTOR const* pFont, |
} |
return iValue; |
} |
+ |
FX_LPMatchFont FX_GetDefFontMatchor() { |
return FX_DefFontMatcher; |
} |
+ |
uint32_t FX_GetGdiFontStyles(const LOGFONTW& lf) { |
uint32_t dwStyles = 0; |
if ((lf.lfPitchAndFamily & 0x03) == FIXED_PITCH) { |
@@ -404,6 +416,7 @@ uint32_t FX_GetGdiFontStyles(const LOGFONTW& lf) { |
} |
return dwStyles; |
} |
+ |
static int32_t CALLBACK FX_GdiFontEnumProc(ENUMLOGFONTEX* lpelfe, |
NEWTEXTMETRICEX* lpntme, |
DWORD dwFontType, |
@@ -427,6 +440,7 @@ static int32_t CALLBACK FX_GdiFontEnumProc(ENUMLOGFONTEX* lpelfe, |
FX_Free(pFont); |
return 1; |
} |
+ |
static void FX_EnumGdiFonts(CFX_FontDescriptors& fonts, |
const FX_WCHAR* pwsFaceName, |
FX_WCHAR wUnicode) { |
@@ -442,9 +456,11 @@ static void FX_EnumGdiFonts(CFX_FontDescriptors& fonts, |
(FONTENUMPROCW)FX_GdiFontEnumProc, (LPARAM)&fonts, 0); |
::ReleaseDC(NULL, hDC); |
} |
+ |
FX_LPEnumAllFonts FX_GetDefFontEnumerator() { |
return FX_EnumGdiFonts; |
} |
+ |
#else |
const FX_CHAR* g_FontFolders[] = { |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ |
@@ -457,11 +473,18 @@ const FX_CHAR* g_FontFolders[] = { |
#endif |
}; |
+CFX_FontDescriptor::CFX_FontDescriptor() |
+ : m_nFaceIndex(0), m_dwFontStyles(0), m_dwUsb(), m_dwCsb() {} |
Lei Zhang
2016/06/20 17:45:02
Does this actually initialize |m_dwUsb| and |m_dwC
Wei Li
2016/06/20 18:04:10
Yes, this will zero initialize the vars, same as =
|
+ |
+CFX_FontDescriptor::~CFX_FontDescriptor() {} |
+ |
CFX_FontSourceEnum_File::CFX_FontSourceEnum_File() { |
for (size_t i = 0; i < FX_ArraySize(g_FontFolders); ++i) |
m_FolderPaths.Add(g_FontFolders[i]); |
} |
+CFX_FontSourceEnum_File::~CFX_FontSourceEnum_File() {} |
+ |
CFX_ByteString CFX_FontSourceEnum_File::GetNextFile() { |
Restart: |
void* pCurHandle = |
@@ -522,6 +545,7 @@ Restart: |
} |
return bsName; |
} |
+ |
FX_POSITION CFX_FontSourceEnum_File::GetStartPosition() { |
m_wsNext = GetNextFile().UTF8Decode(); |
if (0 == m_wsNext.GetLength()) { |
@@ -600,11 +624,13 @@ FX_BOOL CFGAS_FontMgrImp::EnumFontsFromFiles() { |
return FALSE; |
return TRUE; |
} |
+ |
FX_BOOL CFGAS_FontMgrImp::EnumFonts() { |
if (EnumFontsFromFontMapper()) |
return TRUE; |
return EnumFontsFromFiles(); |
} |
+ |
void CFGAS_FontMgrImp::Release() { |
for (int32_t i = 0; i < m_InstalledFonts.GetSize(); i++) { |
delete m_InstalledFonts[i]; |
@@ -633,24 +659,28 @@ void CFGAS_FontMgrImp::Release() { |
} |
delete this; |
} |
+ |
CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByCodePage( |
uint16_t wCodePage, |
uint32_t dwFontStyles, |
const FX_WCHAR* pszFontFamily) { |
return nullptr; |
} |
+ |
CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByCharset( |
uint8_t nCharset, |
uint32_t dwFontStyles, |
const FX_WCHAR* pszFontFamily) { |
return nullptr; |
} |
+ |
CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByUnicode( |
FX_WCHAR wUnicode, |
uint32_t dwFontStyles, |
const FX_WCHAR* pszFontFamily) { |
return nullptr; |
} |
+ |
CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByLanguage( |
uint16_t wLanguage, |
uint32_t dwFontStyles, |
@@ -698,6 +728,7 @@ CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByCodePage( |
pFonts->Add(pFont); |
return pFont; |
} |
+ |
CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByCharset( |
uint8_t nCharset, |
uint32_t dwFontStyles, |
@@ -705,6 +736,7 @@ CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByCharset( |
return GetFontByCodePage(FX_GetCodePageFromCharset(nCharset), dwFontStyles, |
pszFontFamily); |
} |
+ |
CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByUnicode( |
FX_WCHAR wUnicode, |
uint32_t dwFontStyles, |
@@ -756,6 +788,7 @@ CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByUnicode( |
m_FailedUnicodes2NULL.SetAt(wUnicode, nullptr); |
return nullptr; |
} |
+ |
FX_BOOL CFGAS_FontMgrImp::VerifyUnicode(CFX_FontDescriptor* pDesc, |
FX_WCHAR wcUnicode) { |
IFX_FileRead* pFileRead = CreateFontStream(pDesc->m_wsFaceName.UTF8Encode()); |
@@ -933,6 +966,7 @@ IFX_FileRead* CFGAS_FontMgrImp::CreateFontStream( |
} |
return nullptr; |
} |
+ |
int32_t CFGAS_FontMgrImp::MatchFonts(CFX_FontDescriptorInfos& MatchedFonts, |
uint16_t wCodePage, |
uint32_t dwFontStyles, |
@@ -1078,6 +1112,7 @@ int32_t CFGAS_FontMgrImp::CalcPenalty(CFX_FontDescriptor* pInstalled, |
} |
return nPenalty; |
} |
+ |
void CFGAS_FontMgrImp::ClearFontCache() { |
FX_POSITION pos = m_Hash2CandidateList.GetStartPosition(); |
while (pos) { |
@@ -1094,6 +1129,7 @@ void CFGAS_FontMgrImp::ClearFontCache() { |
pFileRead->Release(); |
} |
} |
+ |
void CFGAS_FontMgrImp::RemoveFont(CFGAS_GEFont* pEFont) { |
if (NULL == pEFont) { |
return; |
@@ -1180,6 +1216,7 @@ void CFGAS_FontMgrImp::RegisterFaces(IFX_FileRead* pFontStream, |
FXFT_Done_Face(pFace); |
} while (index < num_faces); |
} |
+ |
uint32_t CFGAS_FontMgrImp::GetFlags(FXFT_Face pFace) { |
uint32_t flag = 0; |
if (FT_IS_FIXED_WIDTH(pFace)) { |
@@ -1200,10 +1237,12 @@ uint32_t CFGAS_FontMgrImp::GetFlags(FXFT_Face pFace) { |
} |
return flag; |
} |
+ |
#define GetUInt8(p) ((uint8_t)((p)[0])) |
#define GetUInt16(p) ((uint16_t)((p)[0] << 8 | (p)[1])) |
#define GetUInt32(p) \ |
((uint32_t)((p)[0] << 24 | (p)[1] << 16 | (p)[2] << 8 | (p)[3])) |
+ |
void CFGAS_FontMgrImp::GetNames(const uint8_t* name_table, |
CFX_WideStringArray& Names) { |
if (NULL == name_table) { |
@@ -1246,6 +1285,7 @@ struct FX_BIT2CHARSET { |
uint16_t wBit; |
uint16_t wCharset; |
}; |
+ |
FX_BIT2CHARSET g_FX_Bit2Charset1[16] = { |
{1 << 0, FX_CHARSET_ANSI}, |
{1 << 1, FX_CHARSET_MSWin_EasterEuropean}, |
@@ -1264,6 +1304,7 @@ FX_BIT2CHARSET g_FX_Bit2Charset1[16] = { |
{1 << 14, FX_CHARSET_Default}, |
{1 << 15, FX_CHARSET_Default}, |
}; |
+ |
FX_BIT2CHARSET g_FX_Bit2Charset2[16] = { |
{1 << 0, FX_CHARSET_Thai}, |
{1 << 1, FX_CHARSET_ShiftJIS}, |
@@ -1282,6 +1323,7 @@ FX_BIT2CHARSET g_FX_Bit2Charset2[16] = { |
{1 << 14, FX_CHARSET_OEM}, |
{1 << 15, FX_CHARSET_Symbol}, |
}; |
+ |
FX_BIT2CHARSET g_FX_Bit2Charset3[16] = { |
{1 << 0, FX_CHARSET_Default}, {1 << 1, FX_CHARSET_Default}, |
{1 << 2, FX_CHARSET_Default}, {1 << 3, FX_CHARSET_Default}, |
@@ -1292,6 +1334,7 @@ FX_BIT2CHARSET g_FX_Bit2Charset3[16] = { |
{1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default}, |
{1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_Default}, |
}; |
+ |
FX_BIT2CHARSET g_FX_Bit2Charset4[16] = { |
{1 << 0, FX_CHARSET_Default}, {1 << 1, FX_CHARSET_Default}, |
{1 << 2, FX_CHARSET_Default}, {1 << 3, FX_CHARSET_Default}, |
@@ -1302,12 +1345,14 @@ FX_BIT2CHARSET g_FX_Bit2Charset4[16] = { |
{1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default}, |
{1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_US}, |
}; |
+ |
#define CODEPAGERANGE_IMPLEMENT(n) \ |
for (int32_t i = 0; i < 16; i++) { \ |
if ((a##n & g_FX_Bit2Charset##n[i].wBit) != 0) { \ |
Charsets.Add(g_FX_Bit2Charset##n[i].wCharset); \ |
} \ |
} |
+ |
void CFGAS_FontMgrImp::GetCharsets(FXFT_Face pFace, |
CFX_ArrayTemplate<uint16_t>& Charsets) { |
Charsets.RemoveAll(); |
@@ -1326,6 +1371,7 @@ void CFGAS_FontMgrImp::GetCharsets(FXFT_Face pFace, |
Charsets.Add(FX_CHARSET_Default); |
} |
} |
+ |
#undef CODEPAGERANGE_IMPLEMENT |
void CFGAS_FontMgrImp::GetUSBCSB(FXFT_Face pFace, |
uint32_t* USB, |
@@ -1347,6 +1393,7 @@ void CFGAS_FontMgrImp::GetUSBCSB(FXFT_Face pFace, |
CSB[1] = 0; |
} |
} |
+ |
int32_t CFGAS_FontMgrImp::IsPartName(const CFX_WideString& Name1, |
const CFX_WideString& Name2) { |
if (Name1.Find(Name2.c_str()) != -1) { |
@@ -1354,4 +1401,5 @@ int32_t CFGAS_FontMgrImp::IsPartName(const CFX_WideString& Name1, |
} |
return 0; |
} |
+ |
#endif |