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;