Chromium Code Reviews| Index: core/fxge/ge/cfx_fontmapper.cpp |
| diff --git a/core/fxge/ge/cfx_fontmapper.cpp b/core/fxge/ge/cfx_fontmapper.cpp |
| index 9486932f61d441101c176d00047c172d82f393b1..73ad2b9767427e777139e866f4f814367b3717d4 100644 |
| --- a/core/fxge/ge/cfx_fontmapper.cpp |
| +++ b/core/fxge/ge/cfx_fontmapper.cpp |
| @@ -6,6 +6,10 @@ |
| #include "core/fxge/include/cfx_fontmapper.h" |
| +#include <memory> |
| +#include <utility> |
| +#include <vector> |
| + |
| #include "core/fxge/include/ifx_systemfontinfo.h" |
| #include "core/fxge/include/fx_font.h" |
| @@ -161,14 +165,16 @@ const struct CODEPAGE_MAP { |
| int CompareFontFamilyString(const void* key, const void* element) { |
| CFX_ByteString str_key((const FX_CHAR*)key); |
| - if (str_key.Find(((AltFontFamily*)element)->m_pFontName) != -1) |
| + const AltFontFamily* family = reinterpret_cast<const AltFontFamily*>(element); |
| + if (str_key.Find(family->m_pFontName) != -1) |
| return 0; |
| - return FXSYS_stricmp((const FX_CHAR*)key, |
| - ((AltFontFamily*)element)->m_pFontName); |
| + return FXSYS_stricmp(reinterpret_cast<const FX_CHAR*>(key), |
| + family->m_pFontName); |
| } |
| int CompareString(const void* key, const void* element) { |
| - return FXSYS_stricmp((const FX_CHAR*)key, ((AltFontName*)element)->m_pName); |
| + return FXSYS_stricmp(reinterpret_cast<const FX_CHAR*>(key), |
| + reinterpret_cast<const AltFontName*>(element)->m_pName); |
| } |
| CFX_ByteString TT_NormalizeName(const FX_CHAR* family) { |
| @@ -208,10 +214,9 @@ CFX_ByteString GetFontFamily(CFX_ByteString fontName, int nStyle) { |
| fontName = "FreeStyleScript"; |
| return fontName; |
| } |
| - AltFontFamily* found = (AltFontFamily*)FXSYS_bsearch( |
| - fontName.c_str(), g_AltFontFamilies, |
| - sizeof g_AltFontFamilies / sizeof(AltFontFamily), sizeof(AltFontFamily), |
| - CompareFontFamilyString); |
| + AltFontFamily* found = reinterpret_cast<AltFontFamily*>(FXSYS_bsearch( |
| + fontName.c_str(), g_AltFontFamilies, FX_ArraySize(g_AltFontFamilies), |
| + sizeof(AltFontFamily), CompareFontFamilyString)); |
| return found ? CFX_ByteString(found->m_pFontFamily) : fontName; |
| } |
| @@ -228,21 +233,22 @@ CFX_ByteString ParseStyle(const FX_CHAR* pStyle, int iLen, int iIndex) { |
| return buf.MakeString(); |
| } |
| -int32_t GetStyleType(const CFX_ByteString& bsStyle, FX_BOOL bRevert) { |
| +int32_t GetStyleType(const CFX_ByteString& bsStyle, bool bReverse) { |
| int32_t iLen = bsStyle.GetLength(); |
| if (!iLen) |
| return -1; |
| - int iSize = sizeof(g_FontStyles) / sizeof(FX_FontStyle); |
| + int iSize = FX_ArraySize(g_FontStyles); |
| const FX_FontStyle* pStyle = nullptr; |
| for (int i = iSize - 1; i >= 0; --i) { |
| pStyle = g_FontStyles + i; |
| if (!pStyle || pStyle->len > iLen) |
| continue; |
| - if (!bRevert) { |
| - if (bsStyle.Left(pStyle->len).Compare(pStyle->style) == 0) |
| + |
| + if (bReverse) { |
| + if (bsStyle.Right(pStyle->len).Compare(pStyle->style) == 0) |
| return i; |
| } else { |
| - if (bsStyle.Right(pStyle->len).Compare(pStyle->style) == 0) |
| + if (bsStyle.Left(pStyle->len).Compare(pStyle->style) == 0) |
| return i; |
| } |
| } |
| @@ -266,6 +272,8 @@ void UpdatePitchFamily(uint32_t flags, int& PitchFamily) { |
| PitchFamily |= FXFONT_FF_FIXEDPITCH; |
| } |
| +const int kExternalFontIndex = 12; |
|
npm
2016/08/25 17:43:30
Do we have any conventions on the placement of var
Lei Zhang
2016/08/25 18:41:37
Oh, I can move it to the top if that's what you me
npm
2016/08/25 19:01:50
My understanding is there's 14 base fonts: first 1
|
| + |
| } // namespace |
| CFX_FontMapper::CFX_FontMapper(CFX_FontMgr* mgr) |
| @@ -378,7 +386,7 @@ FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, |
| int italic_angle, |
| int weight, |
| int picthfamily) { |
| - if (iBaseFont < 12) { |
| + if (iBaseFont < kExternalFontIndex) { |
| if (m_FoxitFaces[iBaseFont]) |
| return m_FoxitFaces[iBaseFont]; |
| const uint8_t* pFontData = nullptr; |
| @@ -425,7 +433,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| italic_angle = 0; |
| } |
| CFX_ByteString SubstName = name; |
| - SubstName.Remove(0x20); |
| + SubstName.Remove(' '); |
| if (bTrueType && name[0] == '@') |
| SubstName = name.Mid(1); |
| PDF_GetStandardFontName(&SubstName); |
| @@ -454,27 +462,28 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| return m_FoxitFaces[13]; |
| } |
| int iBaseFont = 0; |
| - CFX_ByteString family, style; |
| - FX_BOOL bHasComma = FALSE; |
| - FX_BOOL bHasHypen = FALSE; |
| + CFX_ByteString family; |
| + CFX_ByteString style; |
| + bool bHasComma = false; |
| + bool bHasHyphen = false; |
| int find = SubstName.Find(",", 0); |
| if (find >= 0) { |
| family = SubstName.Left(find); |
| PDF_GetStandardFontName(&family); |
| style = SubstName.Mid(find + 1); |
| - bHasComma = TRUE; |
| + bHasComma = true; |
| } else { |
| family = SubstName; |
| } |
| - for (; iBaseFont < 12; iBaseFont++) { |
| + for (; iBaseFont < kExternalFontIndex; iBaseFont++) { |
| if (family == CFX_ByteStringC(g_Base14FontNames[iBaseFont])) |
| break; |
| } |
| int PitchFamily = 0; |
| - FX_BOOL bItalic = FALSE; |
| + bool bItalic = false; |
| uint32_t nStyle = 0; |
| - FX_BOOL bStyleAvail = FALSE; |
| - if (iBaseFont < 12) { |
| + bool bStyleAvail = false; |
| + if (iBaseFont < kExternalFontIndex) { |
| if ((iBaseFont % 4) == 1 || (iBaseFont % 4) == 2) |
| nStyle |= FX_FONT_STYLE_Bold; |
| if ((iBaseFont % 4) / 2) |
| @@ -489,19 +498,19 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| if (find >= 0) { |
| style = family.Mid(find + 1); |
| family = family.Left(find); |
| - bHasHypen = TRUE; |
| + bHasHyphen = true; |
| } |
| } |
| - if (!bHasHypen) { |
| + if (!bHasHyphen) { |
| int nLen = family.GetLength(); |
| - int32_t nRet = GetStyleType(family, TRUE); |
| + int32_t nRet = GetStyleType(family, true); |
| if (nRet > -1) { |
| family = family.Left(nLen - g_FontStyles[nRet].len); |
| if (nRet == 0) |
| nStyle |= FX_FONT_STYLE_Bold; |
| - if (nRet == 1) |
| + else if (nRet == 1) |
| nStyle |= FX_FONT_STYLE_Italic; |
| - if (nRet == 2) |
| + else if (nRet == 2) |
| nStyle |= (FX_FONT_STYLE_Bold | FX_FONT_STYLE_Italic); |
| } |
| } |
| @@ -511,41 +520,41 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| int nLen = style.GetLength(); |
| const FX_CHAR* pStyle = style.c_str(); |
| int i = 0; |
| - FX_BOOL bFirstItem = TRUE; |
| + bool bFirstItem = true; |
| CFX_ByteString buf; |
| while (i < nLen) { |
| buf = ParseStyle(pStyle, nLen, i); |
| - int32_t nRet = GetStyleType(buf, FALSE); |
| + int32_t nRet = GetStyleType(buf, false); |
| if ((i && !bStyleAvail) || (!i && nRet < 0)) { |
| family = SubstName; |
| - iBaseFont = 12; |
| + iBaseFont = kExternalFontIndex; |
| break; |
| - } else if (nRet >= 0) { |
| - bStyleAvail = TRUE; |
| } |
| - if (nRet == 0) { |
| - if (nStyle & FX_FONT_STYLE_Bold) |
| - nStyle |= FX_FONT_STYLE_BoldBold; |
| - else |
| - nStyle |= FX_FONT_STYLE_Bold; |
| - bFirstItem = FALSE; |
| + if (nRet >= 0) { |
| + bStyleAvail = true; |
| } |
| if (nRet == 1) { |
| if (bFirstItem) { |
| nStyle |= FX_FONT_STYLE_Italic; |
| } else { |
| family = SubstName; |
| - iBaseFont = 12; |
| + iBaseFont = kExternalFontIndex; |
| } |
| break; |
| } |
| - if (nRet == 2) { |
| + if (nRet == 0) { |
| + if (nStyle & FX_FONT_STYLE_Bold) |
| + nStyle |= FX_FONT_STYLE_BoldBold; |
| + else |
| + nStyle |= FX_FONT_STYLE_Bold; |
| + bFirstItem = false; |
| + } else if (nRet == 2) { |
| nStyle |= FX_FONT_STYLE_Italic; |
| if (nStyle & FX_FONT_STYLE_Bold) |
| nStyle |= FX_FONT_STYLE_BoldBold; |
| else |
| nStyle |= FX_FONT_STYLE_Bold; |
| - bFirstItem = FALSE; |
| + bFirstItem = false; |
| } |
| i += buf.GetLength() + 1; |
| } |
| @@ -559,19 +568,17 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| : (nStyle & FX_FONT_STYLE_Bold ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL); |
| } |
| if (nStyle & FX_FONT_STYLE_Italic) |
| - bItalic = TRUE; |
| - FX_BOOL bCJK = FALSE; |
| + bItalic = true; |
| int iExact = 0; |
| int Charset = FXFONT_ANSI_CHARSET; |
| if (WindowCP) |
| Charset = GetCharsetFromCodePage(WindowCP); |
| - else if (iBaseFont == 12 && (flags & FXFONT_SYMBOLIC)) |
| + else if (iBaseFont == kExternalFontIndex && (flags & FXFONT_SYMBOLIC)) |
| Charset = FXFONT_SYMBOL_CHARSET; |
| - if (Charset == FXFONT_SHIFTJIS_CHARSET || Charset == FXFONT_GB2312_CHARSET || |
| - Charset == FXFONT_HANGEUL_CHARSET || |
| - Charset == FXFONT_CHINESEBIG5_CHARSET) { |
| - bCJK = TRUE; |
| - } |
| + bool bCJK = |
| + (Charset == FXFONT_SHIFTJIS_CHARSET || Charset == FXFONT_GB2312_CHARSET || |
| + Charset == FXFONT_HANGEUL_CHARSET || |
| + Charset == FXFONT_CHINESEBIG5_CHARSET); |
| if (!m_pFontInfo) { |
| pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; |
| return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight, |
| @@ -580,24 +587,19 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| family = GetFontFamily(family, nStyle); |
| CFX_ByteString match = MatchInstalledFonts(TT_NormalizeName(family.c_str())); |
| if (match.IsEmpty() && family != SubstName && |
| - (!bHasComma && (!bHasHypen || (bHasHypen && !bStyleAvail)))) { |
| + (!bHasComma && (!bHasHyphen || (bHasHyphen && !bStyleAvail)))) { |
| match = MatchInstalledFonts(TT_NormalizeName(SubstName.c_str())); |
| } |
| - if (match.IsEmpty() && iBaseFont >= 12) { |
| + if (match.IsEmpty() && iBaseFont >= kExternalFontIndex) { |
| if (!bCJK) { |
| if (!CheckSupportThirdPartFont(family, PitchFamily)) { |
| - if (italic_angle != 0) |
| - bItalic = TRUE; |
| - else |
| - bItalic = FALSE; |
| + bItalic = italic_angle != 0; |
| weight = old_weight; |
| } |
| } else { |
| pSubstFont->m_bSubstCJK = true; |
| if (nStyle) |
| - pSubstFont->m_WeightCJK = weight; |
| - else |
| - pSubstFont->m_WeightCJK = FXFONT_FW_NORMAL; |
| + pSubstFont->m_WeightCJK = nStyle ? weight : FXFONT_FW_NORMAL; |
| if (nStyle & FX_FONT_STYLE_Italic) |
| pSubstFont->m_bItalicCJK = true; |
| } |
| @@ -608,10 +610,10 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| ? 900 |
| : (nStyle & FX_FONT_STYLE_Bold ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL); |
| } |
| - if (!match.IsEmpty() || iBaseFont < 12) { |
| + if (!match.IsEmpty() || iBaseFont < kExternalFontIndex) { |
| if (!match.IsEmpty()) |
| family = match; |
| - if (iBaseFont < 12) { |
| + if (iBaseFont < kExternalFontIndex) { |
| if (nStyle && !(iBaseFont % 4)) { |
| if ((nStyle & 0x3) == 1) |
| iBaseFont += 1; |
| @@ -625,7 +627,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| } |
| } else { |
| if (flags & FXFONT_ITALIC) |
| - bItalic = TRUE; |
| + bItalic = true; |
| } |
| iExact = !match.IsEmpty(); |
| void* hFont = m_pFontInfo->MapFont(weight, bItalic, Charset, PitchFamily, |
| @@ -638,10 +640,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| return nullptr; |
| #endif // PDF_ENABLE_XFA |
| if (bCJK) { |
| - if (italic_angle != 0) |
| - bItalic = TRUE; |
| - else |
| - bItalic = FALSE; |
| + bItalic = italic_angle != 0; |
| weight = old_weight; |
| } |
| if (!match.IsEmpty()) { |
| @@ -712,18 +711,11 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| } |
| pSubstFont->m_Family = SubstName; |
| pSubstFont->m_Charset = Charset; |
| - FX_BOOL bNeedUpdateWeight = FALSE; |
| - if (FXFT_Is_Face_Bold(face)) { |
| - if (weight == FXFONT_FW_BOLD) |
| - bNeedUpdateWeight = FALSE; |
| - else |
| - bNeedUpdateWeight = TRUE; |
| - } else { |
| - if (weight == FXFONT_FW_NORMAL) |
| - bNeedUpdateWeight = FALSE; |
| - else |
| - bNeedUpdateWeight = TRUE; |
| - } |
| + bool bNeedUpdateWeight = false; |
| + if (FXFT_Is_Face_Bold(face)) |
| + bNeedUpdateWeight = weight != FXFONT_FW_BOLD; |
| + else |
| + bNeedUpdateWeight = weight != FXFONT_FW_NORMAL; |
| if (bNeedUpdateWeight) |
| pSubstFont->m_Weight = weight; |
| if (bItalic && !FXFT_Is_Face_Italic(face)) { |
| @@ -793,11 +785,12 @@ FXFT_Face CFX_FontMapper::GetCachedTTCFace(void* hFont, |
| uint32_t ttc_size, |
| uint32_t font_size) { |
| FXFT_Face face; |
| - uint8_t temp[1024]; |
| - m_pFontInfo->GetFontData(hFont, tableTTCF, temp, 1024); |
| + uint8_t buffer[1024]; |
| + m_pFontInfo->GetFontData(hFont, tableTTCF, buffer, FX_ArraySize(buffer)); |
| + uint32_t* pBuffer = reinterpret_cast<uint32_t*>(&buffer); |
|
npm
2016/08/25 17:43:30
Is this the same as
uint32_t* pBuffer = reinterpre
Lei Zhang
2016/08/25 18:41:37
Done.
|
| uint32_t checksum = 0; |
| for (int i = 0; i < 256; i++) |
| - checksum += ((uint32_t*)temp)[i]; |
| + checksum += pBuffer[i]; |
| uint8_t* pFontData; |
| face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, ttc_size - font_size, |
| pFontData); |