summaryrefslogtreecommitdiff
path: root/core/fxge
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxge')
-rw-r--r--core/fxge/ge/fx_ge_linux.cpp58
1 files changed, 37 insertions, 21 deletions
diff --git a/core/fxge/ge/fx_ge_linux.cpp b/core/fxge/ge/fx_ge_linux.cpp
index 6406d82570..d5a1d956cd 100644
--- a/core/fxge/ge/fx_ge_linux.cpp
+++ b/core/fxge/ge/fx_ge_linux.cpp
@@ -8,12 +8,16 @@
#include "core/fxge/agg/fx_agg_driver.h"
#endif
+#include <memory>
+
#include "core/fxge/ge/cfx_folderfontinfo.h"
#include "core/fxge/ge/fx_text_int.h"
#include "core/fxge/include/fx_ge.h"
#include "core/fxge/include/ifx_systemfontinfo.h"
#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
+namespace {
+
class CFX_LinuxFontInfo : public CFX_FolderFontInfo {
public:
void* MapFont(int weight,
@@ -24,10 +28,12 @@ class CFX_LinuxFontInfo : public CFX_FolderFontInfo {
int& iExact) override;
FX_BOOL ParseFontCfg(const char** pUserPaths);
};
-#define LINUX_GPNAMESIZE 6
-static const struct {
- const FX_CHAR* NameArr[LINUX_GPNAMESIZE];
-} LinuxGpFontList[] = {
+
+const size_t kLinuxGpNameSize = 6;
+
+const struct {
+ const FX_CHAR* NameArr[kLinuxGpNameSize];
+} g_LinuxGpFontList[] = {
{{"TakaoPGothic", "VL PGothic", "IPAPGothic", "VL Gothic", "Kochi Gothic",
"VL Gothic regular"}},
{{"TakaoGothic", "VL Gothic", "IPAGothic", "Kochi Gothic", nullptr,
@@ -37,18 +43,22 @@ static const struct {
{{"TakaoMincho", "IPAMincho", "VL Gothic", "Kochi Mincho", nullptr,
"VL Gothic regular"}},
};
-static const FX_CHAR* const g_LinuxGbFontList[] = {
+
+const FX_CHAR* const g_LinuxGbFontList[] = {
"AR PL UMing CN Light", "WenQuanYi Micro Hei", "AR PL UKai CN",
};
-static const FX_CHAR* const g_LinuxB5FontList[] = {
+
+const FX_CHAR* const g_LinuxB5FontList[] = {
"AR PL UMing TW Light", "WenQuanYi Micro Hei", "AR PL UKai TW",
};
-static const FX_CHAR* const g_LinuxHGFontList[] = {
+
+const FX_CHAR* const g_LinuxHGFontList[] = {
"UnDotum",
};
-static int32_t GetJapanesePreference(const FX_CHAR* facearr,
- int weight,
- int picth_family) {
+
+size_t GetJapanesePreference(const FX_CHAR* facearr,
+ int weight,
+ int pitch_family) {
CFX_ByteString face = facearr;
if (face.Find("Gothic") >= 0 ||
face.Find("\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
@@ -65,11 +75,14 @@ static int32_t GetJapanesePreference(const FX_CHAR* facearr,
}
return 3;
}
- if (!(picth_family & FXFONT_FF_ROMAN) && weight > 400) {
+ if (!(pitch_family & FXFONT_FF_ROMAN) && weight > 400) {
return 0;
}
return 2;
}
+
+} // namespace
+
void* CFX_LinuxFontInfo::MapFont(int weight,
FX_BOOL bItalic,
int charset,
@@ -84,17 +97,16 @@ void* CFX_LinuxFontInfo::MapFont(int weight,
FX_BOOL bCJK = TRUE;
switch (charset) {
case FXFONT_SHIFTJIS_CHARSET: {
- int32_t index = GetJapanesePreference(cstr_face, weight, pitch_family);
- if (index < 0) {
- break;
- }
- for (int32_t i = 0; i < LINUX_GPNAMESIZE; i++) {
- auto it = m_FontList.find(LinuxGpFontList[index].NameArr[i]);
+ size_t index = GetJapanesePreference(cstr_face, weight, pitch_family);
+ ASSERT(index < FX_ArraySize(g_LinuxGpFontList));
+ for (size_t i = 0; i < kLinuxGpNameSize; i++) {
+ auto it = m_FontList.find(g_LinuxGpFontList[index].NameArr[i]);
if (it != m_FontList.end()) {
return it->second;
}
}
- } break;
+ break;
+ }
case FXFONT_GB2312_CHARSET: {
for (size_t i = 0; i < FX_ArraySize(g_LinuxGbFontList); ++i) {
auto it = m_FontList.find(g_LinuxGbFontList[i]);
@@ -102,7 +114,8 @@ void* CFX_LinuxFontInfo::MapFont(int weight,
return it->second;
}
}
- } break;
+ break;
+ }
case FXFONT_CHINESEBIG5_CHARSET: {
for (size_t i = 0; i < FX_ArraySize(g_LinuxB5FontList); ++i) {
auto it = m_FontList.find(g_LinuxB5FontList[i]);
@@ -110,7 +123,8 @@ void* CFX_LinuxFontInfo::MapFont(int weight,
return it->second;
}
}
- } break;
+ break;
+ }
case FXFONT_HANGEUL_CHARSET: {
for (size_t i = 0; i < FX_ArraySize(g_LinuxHGFontList); ++i) {
auto it = m_FontList.find(g_LinuxHGFontList[i]);
@@ -118,7 +132,8 @@ void* CFX_LinuxFontInfo::MapFont(int weight,
return it->second;
}
}
- } break;
+ break;
+ }
default:
bCJK = FALSE;
break;
@@ -151,5 +166,6 @@ void CFX_GEModule::InitPlatform() {
m_pFontMgr->SetSystemFontInfo(
IFX_SystemFontInfo::CreateDefault(m_pUserFontPaths));
}
+
void CFX_GEModule::DestroyPlatform() {}
#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_