From 291e7f5d8b58371be76f01f21df3ca010425c201 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 31 May 2024 17:13:20 -0500 Subject: [PATCH] add a string to force glyph ranges --- src/gui/gui.cpp | 33 +++++++++++++++++++++++++++++++++ src/gui/gui.h | 6 ++++++ src/gui/settings.cpp | 11 +++++++---- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index e8d34144c..738a02596 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -7049,6 +7049,35 @@ bool FurnaceGUI::init() { ImGui::LocalizeRegisterEntries(guiLocalization,8); + const char* localeSettings=_("LocaleSettings: ccjk"); + if (strlen(localeSettings)<20) { + logE("the LocaleSettings string is incomplete!"); + } else { + localeRequiresChinese=(localeSettings[16]=='C'); + localeRequiresChineseTrad=(localeSettings[17]=='C'); + localeRequiresJapanese=(localeSettings[18]=='J'); + localeRequiresKorean=(localeSettings[19]=='K'); + if (strlen(localeSettings)>21) { + if (localeSettings[20]==' ') { + ImWchar next=0; + for (const char* i=&localeSettings[21]; *i; i++) { + if (((*i)>='0' && (*i)<='9') || ((*i)>='A' && (*i)<='F')) { + next<<=4; + if ((*i)>='0' && (*i)<='9') { + next|=(*i)-'0'; + } else { + next|=(*i)-'A'+10; + } + } else { + localeExtraRanges.push_back(next); + next=0; + } + } + localeExtraRanges.push_back(0); + } + } + } + loadUserPresets(true); applyUISettings(); @@ -7669,6 +7698,10 @@ FurnaceGUI::FurnaceGUI(): bigFont(NULL), headFont(NULL), fontRange(NULL), + localeRequiresJapanese(false), + localeRequiresChinese(false), + localeRequiresChineseTrad(false), + localeRequiresKorean(false), prevInsData(NULL), pendingLayoutImport(NULL), pendingLayoutImportLen(0), diff --git a/src/gui/gui.h b/src/gui/gui.h index 0f35a3748..103108670 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -2228,6 +2228,12 @@ class FurnaceGUI { char finalLayoutPath[4096]; + bool localeRequiresJapanese; + bool localeRequiresChinese; + bool localeRequiresChineseTrad; + bool localeRequiresKorean; + std::vector localeExtraRanges; + DivInstrument* prevInsData; unsigned char* pendingLayoutImport; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 69008c729..3412c5f5d 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -6411,18 +6411,21 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { //fontConfP.RasterizerMultiply=1.5; range.AddRanges(upTo800); - if (settings.loadJapanese) { + if (settings.loadJapanese || localeRequiresJapanese) { range.AddRanges(ImGui::GetIO().Fonts->GetGlyphRangesJapanese()); } - if (settings.loadChinese) { + if (settings.loadChinese || localeRequiresChinese) { range.AddRanges(ImGui::GetIO().Fonts->GetGlyphRangesChineseSimplifiedCommon()); } - if (settings.loadChineseTraditional) { + if (settings.loadChineseTraditional || localeRequiresChineseTrad) { range.AddRanges(ImGui::GetIO().Fonts->GetGlyphRangesChineseFull()); } - if (settings.loadKorean) { + if (settings.loadKorean || localeRequiresKorean) { range.AddRanges(ImGui::GetIO().Fonts->GetGlyphRangesKorean()); } + if (!localeExtraRanges.empty()) { + range.AddRanges(localeExtraRanges.data()); + } // I'm terribly sorry range.UsedChars[0x80>>5]=0;