Revert "Make CFX_FontMgr member variables private."
[pdfium.git] / core / src / fxge / ge / fx_ge_linux.cpp
index 8ff0a4e..72971f7 100644 (file)
@@ -9,23 +9,6 @@
 #include "text_int.h"
 
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
-static const struct {
-  const FX_CHAR* m_pName;
-  const FX_CHAR* m_pSubstName;
-} Base14Substs[] = {
-    {"Courier", "Courier New"},
-    {"Courier-Bold", "Courier New Bold"},
-    {"Courier-BoldOblique", "Courier New Bold Italic"},
-    {"Courier-Oblique", "Courier New Italic"},
-    {"Helvetica", "Arial"},
-    {"Helvetica-Bold", "Arial Bold"},
-    {"Helvetica-BoldOblique", "Arial Bold Italic"},
-    {"Helvetica-Oblique", "Arial Italic"},
-    {"Times-Roman", "Times New Roman"},
-    {"Times-Bold", "Times New Roman Bold"},
-    {"Times-BoldItalic", "Times New Roman Bold Italic"},
-    {"Times-Italic", "Times New Roman Italic"},
-};
 class CFX_LinuxFontInfo : public CFX_FolderFontInfo {
  public:
   void* MapFont(int weight,
@@ -35,12 +18,6 @@ class CFX_LinuxFontInfo : public CFX_FolderFontInfo {
                 const FX_CHAR* family,
                 int& iExact) override;
   FX_BOOL ParseFontCfg(const char** pUserPaths);
-  void* FindFont(int weight,
-                 FX_BOOL bItalic,
-                 int charset,
-                 int pitch_family,
-                 const FX_CHAR* family,
-                 FX_BOOL bMatchName);
 };
 #define LINUX_GPNAMESIZE 6
 static const struct {
@@ -94,18 +71,11 @@ void* CFX_LinuxFontInfo::MapFont(int weight,
                                  int pitch_family,
                                  const FX_CHAR* cstr_face,
                                  int& iExact) {
-  CFX_ByteString face = cstr_face;
-  int iBaseFont;
-  for (iBaseFont = 0; iBaseFont < 12; iBaseFont++)
-    if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
-      face = Base14Substs[iBaseFont].m_pSubstName;
-      iExact = 1;
-      break;
-    }
-  if (iBaseFont < 12) {
-    return GetFont(face);
+  void* font = GetSubstFont(cstr_face);
+  if (font) {
+    iExact = 1;
+    return font;
   }
-  void* p = NULL;
   FX_BOOL bCJK = TRUE;
   switch (charset) {
     case FXFONT_SHIFTJIS_CHARSET: {
@@ -113,120 +83,43 @@ void* CFX_LinuxFontInfo::MapFont(int weight,
       if (index < 0) {
         break;
       }
-      for (int32_t i = 0; i < LINUX_GPNAMESIZE; i++)
-        if (m_FontList.Lookup(LinuxGpFontList[index].NameArr[i], p)) {
-          return p;
+      for (int32_t i = 0; i < LINUX_GPNAMESIZE; i++) {
+        auto it = m_FontList.find(LinuxGpFontList[index].NameArr[i]);
+        if (it != m_FontList.end()) {
+          return it->second;
         }
+      }
     } break;
     case FXFONT_GB2312_CHARSET: {
-      static int32_t s_gbCount =
-          sizeof(g_LinuxGbFontList) / sizeof(const FX_CHAR*);
-      for (int32_t i = 0; i < s_gbCount; i++)
-        if (m_FontList.Lookup(g_LinuxGbFontList[i], p)) {
-          return p;
+      for (size_t i = 0; i < FX_ArraySize(g_LinuxGbFontList); ++i) {
+        auto it = m_FontList.find(g_LinuxGbFontList[i]);
+        if (it != m_FontList.end()) {
+          return it->second;
         }
+      }
     } break;
     case FXFONT_CHINESEBIG5_CHARSET: {
-      static int32_t s_b5Count =
-          sizeof(g_LinuxB5FontList) / sizeof(const FX_CHAR*);
-      for (int32_t i = 0; i < s_b5Count; i++)
-        if (m_FontList.Lookup(g_LinuxB5FontList[i], p)) {
-          return p;
+      for (size_t i = 0; i < FX_ArraySize(g_LinuxB5FontList); ++i) {
+        auto it = m_FontList.find(g_LinuxB5FontList[i]);
+        if (it != m_FontList.end()) {
+          return it->second;
         }
+      }
     } break;
     case FXFONT_HANGEUL_CHARSET: {
-      static int32_t s_hgCount =
-          sizeof(g_LinuxHGFontList) / sizeof(const FX_CHAR*);
-      for (int32_t i = 0; i < s_hgCount; i++)
-        if (m_FontList.Lookup(g_LinuxHGFontList[i], p)) {
-          return p;
+      for (size_t i = 0; i < FX_ArraySize(g_LinuxHGFontList); ++i) {
+        auto it = m_FontList.find(g_LinuxHGFontList[i]);
+        if (it != m_FontList.end()) {
+          return it->second;
         }
+      }
     } break;
     default:
       bCJK = FALSE;
       break;
   }
-  if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) {
-    return GetFont("Courier New");
-  }
   return FindFont(weight, bItalic, charset, pitch_family, cstr_face, !bCJK);
 }
-static FX_DWORD _LinuxGetCharset(int charset) {
-  switch (charset) {
-    case FXFONT_SHIFTJIS_CHARSET:
-      return CHARSET_FLAG_SHIFTJIS;
-    case FXFONT_GB2312_CHARSET:
-      return CHARSET_FLAG_GB;
-    case FXFONT_CHINESEBIG5_CHARSET:
-      return CHARSET_FLAG_BIG5;
-    case FXFONT_HANGEUL_CHARSET:
-      return CHARSET_FLAG_KOREAN;
-    case FXFONT_SYMBOL_CHARSET:
-      return CHARSET_FLAG_SYMBOL;
-    case FXFONT_ANSI_CHARSET:
-      return CHARSET_FLAG_ANSI;
-    default:
-      break;
-  }
-  return 0;
-}
-static int32_t _LinuxGetSimilarValue(int weight,
-                                     FX_BOOL bItalic,
-                                     int pitch_family,
-                                     FX_DWORD style) {
-  int32_t iSimilarValue = 0;
-  if ((style & FXFONT_BOLD) == (weight > 400)) {
-    iSimilarValue += 16;
-  }
-  if ((style & FXFONT_ITALIC) == bItalic) {
-    iSimilarValue += 16;
-  }
-  if ((style & FXFONT_SERIF) == (pitch_family & FXFONT_FF_ROMAN)) {
-    iSimilarValue += 16;
-  }
-  if ((style & FXFONT_SCRIPT) == (pitch_family & FXFONT_FF_SCRIPT)) {
-    iSimilarValue += 8;
-  }
-  if ((style & FXFONT_FIXED_PITCH) == (pitch_family & FXFONT_FF_FIXEDPITCH)) {
-    iSimilarValue += 8;
-  }
-  return iSimilarValue;
-}
-void* CFX_LinuxFontInfo::FindFont(int weight,
-                                  FX_BOOL bItalic,
-                                  int charset,
-                                  int pitch_family,
-                                  const FX_CHAR* family,
-                                  FX_BOOL bMatchName) {
-  CFX_FontFaceInfo* pFind = NULL;
-  FX_DWORD charset_flag = _LinuxGetCharset(charset);
-  int32_t iBestSimilar = 0;
-  FX_POSITION pos = m_FontList.GetStartPosition();
-  while (pos) {
-    CFX_ByteString bsName;
-    CFX_FontFaceInfo* pFont = NULL;
-    m_FontList.GetNextAssoc(pos, bsName, (void*&)pFont);
-    if (!(pFont->m_Charsets & charset_flag) &&
-        charset != FXFONT_DEFAULT_CHARSET) {
-      continue;
-    }
-    int32_t iSimilarValue = 0;
-    int32_t index = bsName.Find(family);
-    if (bMatchName && index < 0) {
-      continue;
-    }
-    if (!bMatchName && index > 0) {
-      iSimilarValue += 64;
-    }
-    iSimilarValue =
-        _LinuxGetSimilarValue(weight, bItalic, pitch_family, pFont->m_Styles);
-    if (iSimilarValue > iBestSimilar) {
-      iBestSimilar = iSimilarValue;
-      pFind = pFont;
-    }
-  }
-  return pFind;
-}
 IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault(const char** pUserPaths) {
   CFX_LinuxFontInfo* pInfo = new CFX_LinuxFontInfo;
   if (!pInfo->ParseFontCfg(pUserPaths)) {