Skip to content

Commit

Permalink
Fix: [Win32] Font detection didn't work for locales not supporting co…
Browse files Browse the repository at this point in the history
…de pages (OpenTTD#13306)
  • Loading branch information
glx22 authored Jan 12, 2025
1 parent 11529d8 commit 4670a62
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion src/os/windows/font_win32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,18 @@ static int CALLBACK EnumFontCallback(const ENUMLOGFONTEX *logfont, const NEWTEXT
if (info->callback->Monospace() && (logfont->elfLogFont.lfPitchAndFamily & (FF_MODERN | FIXED_PITCH)) != (FF_MODERN | FIXED_PITCH)) return 1;

/* The font has to have at least one of the supported locales to be usable. */
if ((metric->ntmFontSig.fsCsb[0] & info->locale.lsCsbSupported[0]) == 0 && (metric->ntmFontSig.fsCsb[1] & info->locale.lsCsbSupported[1]) == 0) return 1;
auto check_bitfields = [&]() {
/* First try Unicode Subset Bitfield. */
for (uint8_t i = 0; i < 4; i++) {
if ((metric->ntmFontSig.fsUsb[i] & info->locale.lsUsb[i]) != 0) return true;
}
/* Keep Code Page Bitfield as a fallback. */
for (uint8_t i = 0; i < 2; i++) {
if ((metric->ntmFontSig.fsCsb[i] & info->locale.lsCsbSupported[i]) != 0) return true;
}
return false;
};
if (!check_bitfields()) return 1;

char font_name[MAX_PATH];
convert_from_fs(logfont->elfFullName, font_name);
Expand Down

0 comments on commit 4670a62

Please sign in to comment.