From bdf73520cf8e9901a431ecc341bef1baeae85228 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Sat, 2 Feb 2019 11:07:01 +0800 Subject: [PATCH] Use default font for COMMON characters Instead use the fonts from neighborhood characters for COMMON characters, use the fonts from user desktop language when PANGO_COMMON_FONT is set to "fixed". --- pango/pango-language.c | 4 +++- pango/pango-script.c | 9 ++++++++- pango/pango-utils-internal.h | 2 ++ pango/pango-utils.c | 16 ++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/pango/pango-language.c b/pango/pango-language.c index 725559fa9..c6ed91c61 100644 --- a/pango/pango-language.c +++ b/pango/pango-language.c @@ -28,6 +28,7 @@ #include "pango-language.h" #include "pango-impl-utils.h" +#include "pango-utils-internal.h" #ifdef HAVE_CORE_TEXT #include @@ -714,7 +715,8 @@ pango_language_includes_script (PangoLanguage *language, /* copied from the one in pango-script.c */ #define REAL_SCRIPT(script) \ - ((script) > PANGO_SCRIPT_INHERITED && (script) != PANGO_SCRIPT_UNKNOWN) + (((script) > PANGO_SCRIPT_INHERITED && (script) != PANGO_SCRIPT_UNKNOWN) || \ + ( _pango_use_fixed_font () && script == PANGO_SCRIPT_COMMON)) if (!REAL_SCRIPT (script)) return TRUE; diff --git a/pango/pango-script.c b/pango/pango-script.c index 43be3fa0f..ccf9ff6a5 100644 --- a/pango/pango-script.c +++ b/pango/pango-script.c @@ -69,6 +69,9 @@ #include "pango-script.h" #include "pango-script-private.h" +#include "pango-attributes.h" +#include "pango-utils-internal.h" + /** * pango_script_for_unichar: * @ch: a Unicode character @@ -229,7 +232,8 @@ get_pair_index (gunichar ch) /* duplicated in pango-language.c */ #define REAL_SCRIPT(script) \ - ((script) > PANGO_SCRIPT_INHERITED && (script) != PANGO_SCRIPT_UNKNOWN) + (((script) > PANGO_SCRIPT_INHERITED && (script) != PANGO_SCRIPT_UNKNOWN) || \ + (_pango_use_fixed_font () && script == PANGO_SCRIPT_COMMON)) #define SAME_SCRIPT(script1, script2) \ (!REAL_SCRIPT (script1) || !REAL_SCRIPT (script2) || (script1) == (script2)) @@ -260,6 +264,9 @@ pango_script_iter_next (PangoScriptIter *iter) iter->script_code = PANGO_SCRIPT_COMMON; iter->script_start = iter->script_end; + if (_pango_use_fixed_font ()) + iter->script_code = PANGO_SCRIPT_UNKNOWN; + for (; iter->script_end < iter->text_end; iter->script_end = g_utf8_next_char (iter->script_end)) { gunichar ch = g_utf8_get_char (iter->script_end); diff --git a/pango/pango-utils-internal.h b/pango/pango-utils-internal.h index d6e55d7c2..0649505e5 100644 --- a/pango/pango-utils-internal.h +++ b/pango/pango-utils-internal.h @@ -43,6 +43,8 @@ gboolean _pango_color_parse_with_alpha (PangoColor *color, guint16 *alpha, const char *spec); +gboolean _pango_use_fixed_font (void); + G_END_DECLS diff --git a/pango/pango-utils.c b/pango/pango-utils.c index 088a60d66..67d66b0ac 100644 --- a/pango/pango-utils.c +++ b/pango/pango-utils.c @@ -1089,3 +1089,19 @@ _pango_shape_get_extents (gint n_chars, } } +gboolean _pango_use_fixed_font (void) +{ + static gint use_fixed_font = -1; + + if (-1 == use_fixed_font) + { + use_fixed_font = FALSE; + + const gchar * common_font = getenv ("PANGO_COMMON_FONT"); + + if (0 == g_strcmp0 ("fixed", common_font)) + use_fixed_font = TRUE; + } + + return use_fixed_font; +} -- GitLab