[PATCH v2 3/3] gdi32: Rewrite find_any_face using the rbtree.
Huw Davies
huw at codeweavers.com
Fri Nov 13 03:05:57 CST 2020
From: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
dlls/gdi32/font.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index a6acea6008c..af1ce610ede 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -1493,19 +1493,20 @@ static struct gdi_font_face *find_any_face( const LOGFONTW *lf, FONTSIGNATURE fs
{
struct gdi_font_family *family;
struct gdi_font_face *face;
- WCHAR name[LF_FACESIZE];
+ WCHAR name[LF_FACESIZE + 1];
int i = 0;
/* first try the family fallbacks */
while (enum_fallbacks( lf->lfPitchAndFamily, i++, name ))
{
- WINE_RB_FOR_EACH_ENTRY( family, &family_name_tree, struct gdi_font_family, name_entry )
+ if (want_vertical)
{
- if ((family->family_name[0] == '@') == !want_vertical) continue;
- if (wcsicmp( family->family_name + want_vertical, name ) &&
- wcsicmp( family->second_name + want_vertical, name )) continue;
- if ((face = find_best_matching_face( family, lf, fs, FALSE ))) return face;
+ memmove(name + 1, name, min(lstrlenW(name), LF_FACESIZE));
+ name[0] = '@';
}
+
+ if (!(family = find_family_from_any_name(name))) continue;
+ if ((face = find_best_matching_face( family, lf, fs, FALSE ))) return face;
}
/* otherwise try only scalable */
WINE_RB_FOR_EACH_ENTRY( family, &family_name_tree, struct gdi_font_family, name_entry )
--
2.23.0
More information about the wine-devel
mailing list