summaryrefslogtreecommitdiff
path: root/core/fxge
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxge')
-rw-r--r--core/fxge/ge/fx_ge_fontmap.cpp6
-rw-r--r--core/fxge/ge/fx_ge_text.cpp9
-rw-r--r--core/fxge/include/fx_font.h2
3 files changed, 15 insertions, 2 deletions
diff --git a/core/fxge/ge/fx_ge_fontmap.cpp b/core/fxge/ge/fx_ge_fontmap.cpp
index e8af2dce53..7938e10984 100644
--- a/core/fxge/ge/fx_ge_fontmap.cpp
+++ b/core/fxge/ge/fx_ge_fontmap.cpp
@@ -454,7 +454,8 @@ int CTTFontDesc::ReleaseFace(FXFT_Face face) {
return 0;
}
-CFX_FontMgr::CFX_FontMgr() : m_FTLibrary(nullptr) {
+CFX_FontMgr::CFX_FontMgr()
+ : m_FTLibrary(nullptr), m_FTLibrarySupportsHinting(false) {
m_pBuiltinMapper.reset(new CFX_FontMapper(this));
}
@@ -472,6 +473,9 @@ void CFX_FontMgr::InitFTLibrary() {
if (m_FTLibrary)
return;
FXFT_Init_FreeType(&m_FTLibrary);
+ m_FTLibrarySupportsHinting =
+ FXFT_Library_SetLcdFilter(m_FTLibrary, FT_LCD_FILTER_DEFAULT) !=
+ FT_Err_Unimplemented_Feature;
}
void CFX_FontMgr::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) {
diff --git a/core/fxge/ge/fx_ge_text.cpp b/core/fxge/ge/fx_ge_text.cpp
index b0f6a6e63a..46edaf7cbe 100644
--- a/core/fxge/ge/fx_ge_text.cpp
+++ b/core/fxge/ge/fx_ge_text.cpp
@@ -257,7 +257,14 @@ FX_BOOL CFX_RenderDevice::DrawNormalText(int nChars,
} else {
bClearType = text_flags & FXTEXT_CLEARTYPE;
}
- if ((m_RenderCaps & (FXRC_ALPHA_OUTPUT | FXRC_CMYK_OUTPUT))) {
+ if (!CFX_GEModule::Get()->GetFontMgr()->FTLibrarySupportsHinting()) {
+ // Some Freetype implementations (like the one packaged with Fedora) do
+ // not support hinting due to patents 6219025, 6239783, 6307566,
+ // 6225973, 6243070, 6393145, 6421054, 6282327, and 6624828; the latest
+ // one expires 10/7/19. This makes LCD antialiasing very ugly, so we
+ // instead fall back on NORMAL antialiasing.
+ anti_alias = FXFT_RENDER_MODE_NORMAL;
+ } else if ((m_RenderCaps & (FXRC_ALPHA_OUTPUT | FXRC_CMYK_OUTPUT))) {
anti_alias = FXFT_RENDER_MODE_LCD;
bNormal = TRUE;
} else if (m_bpp < 16) {
diff --git a/core/fxge/include/fx_font.h b/core/fxge/include/fx_font.h
index dad10f2ccb..6bc9b2e4c2 100644
--- a/core/fxge/include/fx_font.h
+++ b/core/fxge/include/fx_font.h
@@ -280,11 +280,13 @@ class CFX_FontMgr {
bool GetBuiltinFont(size_t index, const uint8_t** pFontData, uint32_t* size);
CFX_FontMapper* GetBuiltinMapper() const { return m_pBuiltinMapper.get(); }
FXFT_Library GetFTLibrary() const { return m_FTLibrary; }
+ bool FTLibrarySupportsHinting() const { return m_FTLibrarySupportsHinting; }
private:
std::unique_ptr<CFX_FontMapper> m_pBuiltinMapper;
std::map<CFX_ByteString, CTTFontDesc*> m_FaceMap;
FXFT_Library m_FTLibrary;
+ bool m_FTLibrarySupportsHinting;
};
class CFX_FontMapper {