diff --git a/base/setup/lib/muifonts.h b/base/setup/lib/muifonts.h index 72292afc46..826d512bdc 100644 --- a/base/setup/lib/muifonts.h +++ b/base/setup/lib/muifonts.h @@ -11,6 +11,7 @@ MUI_SUBFONT LatinFonts[] = { L"Helv", L"Tahoma" }, { L"Helvetica", L"Liberation Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"Tahoma" }, { L"MS Sans Serif", L"Tahoma" }, { L"MS Shell Dlg", L"Tahoma" }, { L"MS Shell Dlg 2", L"Tahoma" }, @@ -37,6 +38,7 @@ MUI_SUBFONT CyrillicFonts[] = { L"Helv", L"Tahoma" }, { L"Helvetica", L"Liberation Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"Tahoma" }, { L"MS Sans Serif", L"Tahoma" }, { L"MS Shell Dlg", L"Tahoma" }, { L"MS Shell Dlg 2", L"Tahoma" }, @@ -63,6 +65,7 @@ MUI_SUBFONT GreekFonts[] = { L"Helv", L"DejaVu Sans" }, { L"Helvetica", L"Liberation Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"DejaVu Sans" }, { L"MS Sans Serif", L"DejaVu Sans" }, { L"MS Shell Dlg", L"DejaVu Sans" }, { L"MS Shell Dlg 2", L"DejaVu Sans" }, @@ -89,6 +92,7 @@ MUI_SUBFONT HebrewFonts[] = { L"Helv", L"Tahoma" }, { L"Helvetica", L"Tahoma" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"Tahoma" }, { L"MS Sans Serif", L"Tahoma" }, { L"MS Shell Dlg", L"Tahoma" }, { L"MS Shell Dlg 2", L"Tahoma" }, @@ -121,6 +125,7 @@ MUI_SUBFONT ChineseSimplifiedFonts[] = { L"Helv", L"Droid Sans Fallback" }, { L"Helvetica", L"Liberation Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"Droid Sans Fallback" }, { L"MS Sans Serif", L"Droid Sans Fallback" }, { L"MS Shell Dlg", L"Droid Sans Fallback" }, { L"MS Shell Dlg 2", L"Droid Sans Fallback" }, @@ -163,6 +168,7 @@ MUI_SUBFONT ChineseTraditionalFonts[] = { L"Helv", L"Droid Sans Fallback" }, { L"Helvetica", L"Liberation Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"Droid Sans Fallback" }, { L"MS Sans Serif", L"Droid Sans Fallback" }, { L"MS Shell Dlg", L"Droid Sans Fallback" }, { L"MS Shell Dlg 2", L"Droid Sans Fallback" }, @@ -206,6 +212,7 @@ MUI_SUBFONT JapaneseFonts[] = { L"Helv", L"Droid Sans Fallback" }, { L"Helvetica", L"Liberation Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"Droid Sans Fallback" }, { L"MS Sans Serif", L"Droid Sans Fallback" }, { L"MS Shell Dlg", L"Droid Sans Fallback" }, { L"MS Shell Dlg 2", L"Droid Sans Fallback" }, @@ -250,6 +257,7 @@ MUI_SUBFONT KoreanFonts[] = { L"Helv", L"Droid Sans Fallback" }, { L"Helvetica", L"Liberation Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"Droid Sans Fallback" }, { L"MS Sans Serif", L"Droid Sans Fallback" }, { L"MS Shell Dlg", L"Droid Sans Fallback" }, { L"MS Shell Dlg 2", L"Droid Sans Fallback" }, @@ -293,6 +301,7 @@ MUI_SUBFONT UnicodeFonts[] = { L"Helv", L"DejaVu Sans" }, { L"Helvetica", L"DejaVu Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"DejaVu Sans" }, { L"MS Sans Serif", L"DejaVu Sans" }, { L"MS Shell Dlg", L"DejaVu Sans" }, { L"MS Shell Dlg 2", L"DejaVu Sans" }, @@ -320,6 +329,7 @@ MUI_SUBFONT HindiFonts[] = { L"Helv", L"Tahoma" }, { L"Helvetica", L"Liberation Sans" }, { L"Lucida Console", L"DejaVu Sans Mono" }, + { L"Microsoft Sans Serif", L"FreeSans" }, { L"MS Sans Serif", L"FreeSans" }, { L"MS Shell Dlg", L"FreeSans" }, { L"MS Shell Dlg 2", L"FreeSans" }, diff --git a/boot/bootdata/livecd.inf b/boot/bootdata/livecd.inf index fda2356a97..dd44f0ed53 100644 --- a/boot/bootdata/livecd.inf +++ b/boot/bootdata/livecd.inf @@ -50,6 +50,7 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Fixedsys",0 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helv",0x00000000,"Tahoma" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helvetica",0x00000000,"Liberation Sans" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Lucida Console",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Microsoft Sans Serif",0x00000000,"Tahoma" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Sans Serif",0x00000000,"Tahoma" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg",0x00000000,"Tahoma" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg 2",0x00000000,"Tahoma" diff --git a/win32ss/gdi/gdi32/objects/font.c b/win32ss/gdi/gdi32/objects/font.c index 2f187b0edb..63cdec2ab0 100644 --- a/win32ss/gdi/gdi32/objects/font.c +++ b/win32ss/gdi/gdi32/objects/font.c @@ -215,9 +215,13 @@ IntFontFamilyCompareEx(const FONTFAMILYINFO *ffi1, const LOGFONTW *plf1 = &ffi1->EnumLogFontEx.elfLogFont; const LOGFONTW *plf2 = &ffi2->EnumLogFontEx.elfLogFont; ULONG WeightDiff1, WeightDiff2; - int cmp = _wcsicmp(plf1->lfFaceName, plf2->lfFaceName); - if (cmp) - return cmp; + int cmp; + + if ((plf1->lfPitchAndFamily & FIXED_PITCH) < (plf2->lfPitchAndFamily & FIXED_PITCH)) + return -1; + if ((plf1->lfPitchAndFamily & FIXED_PITCH) > (plf2->lfPitchAndFamily & FIXED_PITCH)) + return 1; + if (dwCompareFlags & IFFCX_STYLE) { WeightDiff1 = labs(plf1->lfWeight - FW_NORMAL); @@ -231,6 +235,7 @@ IntFontFamilyCompareEx(const FONTFAMILYINFO *ffi1, if (plf1->lfItalic > plf2->lfItalic) return 1; } + if (dwCompareFlags & IFFCX_CHARSET) { if (plf1->lfCharSet < plf2->lfCharSet) @@ -238,6 +243,10 @@ IntFontFamilyCompareEx(const FONTFAMILYINFO *ffi1, if (plf1->lfCharSet > plf2->lfCharSet) return 1; } + + cmp = _wcsicmp(plf1->lfFaceName, plf2->lfFaceName); + if (cmp) + return cmp; return 0; } @@ -255,7 +264,7 @@ int FASTCALL IntFontFamilyListUnique(FONTFAMILYINFO *InfoList, INT nCount, const LOGFONTW *plf, DWORD dwFlags) { - FONTFAMILYINFO *first, *last, *result; + FONTFAMILYINFO value, *first, *last, *result; DWORD dwCompareFlags = 0; if (plf->lfFaceName[0]) @@ -272,14 +281,17 @@ IntFontFamilyListUnique(FONTFAMILYINFO *InfoList, INT nCount, return 0; result = first; - while (++first != last) + value = *first++; + for (; first != last; ++first) { - if (IntFontFamilyCompareEx(result, first, dwCompareFlags) != 0) + if (IntFontFamilyCompareEx(&value, first, dwCompareFlags) != 0) { - *(++result) = *first; + *result++ = value; + value = *first; } } - nCount = (int)(++result - InfoList); + *result++ = value; + nCount = (int)(result - InfoList); return nCount; } @@ -341,6 +353,23 @@ IntEnumFontFamilies(HDC Dc, LPLOGFONTW LogFont, PVOID EnumProc, LPARAM lParam, for (i = 0; i < FontFamilyCount; i++) { + LOGFONTW *plf = &Info[i].EnumLogFontEx.elfLogFont; + + if (LogFont->lfCharSet != DEFAULT_CHARSET && plf->lfCharSet != LogFont->lfCharSet) + continue; + if (LogFont->lfFaceName[0] && lstrcmpiW(plf->lfFaceName, LogFont->lfFaceName) != 0) + continue; + // TODO: MONO_FONT + + plf->lfWidth = 0; + plf->lfEscapement = 0; + plf->lfOrientation = 0; + plf->lfUnderline = 0; + plf->lfStrikeOut = 0; + plf->lfOutPrecision = 0; + plf->lfClipPrecision = 0; + plf->lfQuality = 0; + if (dwFlags & IEFF_UNICODE) { Ret = ((FONTENUMPROCW) EnumProc)(