gdi32: Rewrite find_any_face using the rbtree.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Rémi Bernon 2020-11-13 09:05:57 +00:00 committed by Alexandre Julliard
parent ec646de3aa
commit c475e5b40c
1 changed files with 7 additions and 6 deletions

View File

@ -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 )