diff --git a/src/fonts.c b/src/fonts.c index ff02eb991..26afe5f15 100644 --- a/src/fonts.c +++ b/src/fonts.c @@ -174,24 +174,27 @@ static void reliable_read(int fd, void *buf, size_t count); #endif const char * PANGO_DEFAULT_FONT = "DejaVu Sans"; +const char * PANGO_DEFAULT_FONT_FALLBACK = NULL; -/* Names of the fonts we include in `fonts/locale/` */ +/* Names of the fonts we include in `fonts/locale/` + (LANG_* codes are from `src/i18n.h`) */ // (Try `otfinfo --info fonts/locale/*.ttf | grep "Full name:"`) default_locale_font_t default_local_fonts[] = { - { LANG_AR, "ae_Nice" }, - { LANG_BO, "Tsampa Keyboard" }, // NOTE: Our current translation is Wylie transliterated, not Unicode! */ - { LANG_EL, "Thryomanes" }, - { LANG_GU, "Lohit Gujarati" }, - { LANG_HE, "Nachlieli Light" }, - { LANG_HI, "Raghindi" }, - { LANG_JA, "GJGothicPNSubset" }, - { LANG_KA, "TuxPaint Georgian" }, - { LANG_KO, "Baekmuk Gulim" }, - { LANG_TA, "TSCu_Comic" }, - { LANG_TE, "Vemana2000" }, - { LANG_TH, "Garuda" }, - { LANG_ZH_TW, "SubsetForTuxPaint" }, - { -1, NULL }, + { LANG_AR, "ae_Nice", NULL }, + { LANG_BO, "Tsampa Keyboard", NULL }, // NOTE: Our current translation is Wylie transliterated, not Unicode! */ + { LANG_EL, "Thryomanes", NULL}, + { LANG_GU, "Lohit Gujarati", NULL }, + { LANG_HE, "Nachlieli Light", NULL }, + { LANG_HI, "Raghindi", NULL }, + { LANG_JA, "Gen Jyuu Gothic P Regular", "GJGothicPNSubset" }, + { LANG_KA, "TuxPaint Georgian", NULL }, /* FIXME: Upon what is this font based? Never knew -bjk 2023.06.12 */ + { LANG_KO, "Baekmuk Gulim", NULL }, + { LANG_TA, "TSCu_Comic", NULL }, + { LANG_TE, "Vemana2000", NULL }, + { LANG_TH, "Garuda", NULL }, + { LANG_ZH_CN, "AR PL SungtiL GB", NULL }, + { LANG_ZH_TW, "HanWangKaiMediumChuIn", "SubsetForTuxPaint" }, + { -1, NULL, NULL }, }; void TuxPaint_Font_CloseFont(TuxPaint_Font * tpf) diff --git a/src/fonts.h b/src/fonts.h index 2cb34c2a8..f369fb32e 100644 --- a/src/fonts.h +++ b/src/fonts.h @@ -52,10 +52,11 @@ typedef struct default_locale_font_s { int locale_id; const char * font_name; + const char * font_name_fallback; } default_locale_font_t; extern default_locale_font_t default_local_fonts[]; -extern const char * PANGO_DEFAULT_FONT; +extern const char * PANGO_DEFAULT_FONT, * PANGO_DEFAULT_FONT_FALLBACK; #include "compiler.h" diff --git a/src/tuxpaint.c b/src/tuxpaint.c index c32df042d..790da62e4 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -27926,6 +27926,7 @@ static void setup_config(char *argv[]) { char str[128]; char *picturesdir; + char *tp_ui_font_fallback; int i; #if !defined(_WIN32) && !defined(__ANDROID__) @@ -28104,14 +28105,18 @@ static void setup_config(char *argv[]) button_label_y_nudge = setup_i18n(tmpcfg.parsertmp_lang, tmpcfg.parsertmp_locale, &num_wished_langs); /* Determine the referred font for the current locale */ + PANGO_DEFAULT_FONT_FALLBACK = NULL; for (i = 0; default_local_fonts[i].locale_id != -1; i++) { if (default_local_fonts[i].locale_id == get_current_language()) { PANGO_DEFAULT_FONT = default_local_fonts[i].font_name; + PANGO_DEFAULT_FONT_FALLBACK = default_local_fonts[i].font_name_fallback; } } + tp_ui_font_fallback = NULL; + if (tmpcfg.tp_ui_font) { char * tmp_str; @@ -28122,6 +28127,10 @@ static void setup_config(char *argv[]) { printf/*DEBUG_PRINTF*/("Requested default UI font, \"%s\"\n", PANGO_DEFAULT_FONT); tp_ui_font = strdup(PANGO_DEFAULT_FONT); + if (PANGO_DEFAULT_FONT_FALLBACK != NULL) + { + tp_ui_font_fallback = strdup(PANGO_DEFAULT_FONT_FALLBACK); + } } else { @@ -28162,6 +28171,19 @@ static void setup_config(char *argv[]) tmp_str = ask_pango_for_font(tp_ui_font); if (tmp_str != NULL) { + if (strcmp(tp_ui_font, tmp_str) != 0 && tp_ui_font_fallback != NULL) + { + free(tp_ui_font); + tp_ui_font = strdup(tp_ui_font_fallback); + tp_ui_font_fallback = NULL; + + printf/*DEBUG_PRINTF*/("Requested fallback default UI font, \"%s\"\n", tp_ui_font); + tmp_str = ask_pango_for_font(tp_ui_font); + } + } + + if (tmp_str != NULL) + { printf("Actual UI font will be \"%s\"\n", tmp_str); free(tmp_str); }