[PATCH] gdi32: Report unsubstituted font face names. (try 3)
Alex Henrie
alexhenrie24 at gmail.com
Wed May 7 20:14:56 CDT 2014
---
dlls/gdi32/freetype.c | 16 ++++++++++++----
dlls/gdi32/tests/font.c | 13 +++++++++++++
2 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index fae9ffe..e497113 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -5731,7 +5731,7 @@ static BOOL face_matches(const WCHAR *family_name, Face *face, const WCHAR *face
}
static BOOL enum_face_charsets(const Family *family, Face *face, struct enum_charset_list *list,
- FONTENUMPROCW proc, LPARAM lparam)
+ WCHAR *unsubstituted_face_name, FONTENUMPROCW proc, LPARAM lparam)
{
ENUMLOGFONTEXW elf;
NEWTEXTMETRICEXW ntm;
@@ -5756,8 +5756,14 @@ static BOOL enum_face_charsets(const Family *family, Face *face, struct enum_cha
if (!elf.elfScript[0])
FIXME("Unknown elfscript for bit %d\n", ffs(list->element[i].mask) - 1);
}
+ /* Make sure that MS Shell Dlg says "MS Shell Dlg" and not "Tahoma" */
+ if (unsubstituted_face_name)
+ {
+ lstrcpynW(elf.elfLogFont.lfFaceName, unsubstituted_face_name, LF_FACESIZE);
+ lstrcpynW(elf.elfFullName, unsubstituted_face_name, LF_FULLFACESIZE);
+ }
/* Font Replacement */
- if (family != face->family)
+ else if (family != face->family)
{
strcpyW(elf.elfLogFont.lfFaceName, family->FamilyName);
if (face->FullName)
@@ -5806,12 +5812,14 @@ static BOOL freetype_EnumFonts( PHYSDEV dev, LPLOGFONTW plf, FONTENUMPROCW proc,
EnterCriticalSection( &freetype_cs );
if(plf->lfFaceName[0]) {
WCHAR *face_name = plf->lfFaceName;
+ WCHAR *unsubstituted_face_name = NULL;
FontSubst *psub = get_font_subst(&font_subst_list, plf->lfFaceName, plf->lfCharSet);
if(psub) {
TRACE("substituting %s -> %s\n", debugstr_w(plf->lfFaceName),
debugstr_w(psub->to.name));
face_name = psub->to.name;
+ unsubstituted_face_name = plf->lfFaceName;
}
LIST_FOR_EACH_ENTRY( family, &font_list, Family, entry ) {
@@ -5819,14 +5827,14 @@ static BOOL freetype_EnumFonts( PHYSDEV dev, LPLOGFONTW plf, FONTENUMPROCW proc,
face_list = get_face_list_from_family(family);
LIST_FOR_EACH_ENTRY( face, face_list, Face, entry ) {
if (!face_matches(family->FamilyName, face, face_name)) continue;
- if (!enum_face_charsets(family, face, &enum_charsets, proc, lparam)) return FALSE;
+ if (!enum_face_charsets(family, face, &enum_charsets, unsubstituted_face_name, proc, lparam)) return FALSE;
}
}
} else {
LIST_FOR_EACH_ENTRY( family, &font_list, Family, entry ) {
face_list = get_face_list_from_family(family);
face = LIST_ENTRY(list_head(face_list), Face, entry);
- if (!enum_face_charsets(family, face, &enum_charsets, proc, lparam)) return FALSE;
+ if (!enum_face_charsets(family, face, &enum_charsets, NULL, proc, lparam)) return FALSE;
}
}
LeaveCriticalSection( &freetype_cs );
diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 255771a..c6f9122 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -4741,6 +4741,17 @@ static void test_EnumFonts(void)
ret = EnumFontFamiliesA(hdc, NULL, enum_all_fonts_proc, (LPARAM)&lf);
ok(ret, "font Arial Italic Bold should not be enumerated\n");
+ /* MS Shell Dlg and MS Shell Dlg 2 must exist */
+ ret = EnumFontFamiliesA(hdc, "MS Shell Dlg", enum_fonts_proc, (LPARAM)&lf);
+ ok(!ret, "font MS Shell Dlg is not enumerated\n");
+ ret = strcmp(lf.lfFaceName, "MS Shell Dlg");
+ ok(!ret, "expected MS Shell Dlg got %s\n", lf.lfFaceName);
+
+ ret = EnumFontFamiliesA(hdc, "MS Shell Dlg 2", enum_fonts_proc, (LPARAM)&lf);
+ ok(!ret, "font MS Shell Dlg 2 is not enumerated\n");
+ ret = strcmp(lf.lfFaceName, "MS Shell Dlg 2");
+ ok(!ret, "expected MS Shell Dlg 2 got %s\n", lf.lfFaceName);
+
DeleteDC(hdc);
}
@@ -6031,6 +6042,8 @@ START_TEST(font)
* I'd like to avoid them in this test.
*/
test_EnumFontFamilies("Arial Black", ANSI_CHARSET);
+ test_EnumFontFamilies("MS Shell Dlg", ANSI_CHARSET);
+ test_EnumFontFamilies("MS Shell Dlg 2", ANSI_CHARSET);
test_EnumFontFamilies("Symbol", SYMBOL_CHARSET);
if (is_truetype_font_installed("Arial Black") &&
(is_truetype_font_installed("Symbol") || is_truetype_font_installed("Wingdings")))
--
1.9.1
More information about the wine-patches
mailing list