Index: core/src/fxge/ge/fx_ge_linux.cpp |
diff --git a/core/src/fxge/ge/fx_ge_linux.cpp b/core/src/fxge/ge/fx_ge_linux.cpp |
index 065fd124bba0ddffd9af7771451aef5544fc8df6..609777fbb54538d91fc336196386c96de44dda8e 100644 |
--- a/core/src/fxge/ge/fx_ge_linux.cpp |
+++ b/core/src/fxge/ge/fx_ge_linux.cpp |
@@ -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,16 +71,10 @@ 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; |
} |
FX_BOOL bCJK = TRUE; |
switch (charset) { |
@@ -147,85 +118,8 @@ void* CFX_LinuxFontInfo::MapFont(int weight, |
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; |
- for (const auto& it : m_FontList) { |
- const CFX_ByteString& bsName = it.first; |
- CFX_FontFaceInfo* pFont = it.second; |
- 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)) { |