gdi32: Add font faces to families in a specific order.

This commit is contained in:
Dan Hipschman 2008-04-30 11:51:00 -07:00 committed by Alexandre Julliard
parent a9c2f791e1
commit c3537c4086
1 changed files with 41 additions and 1 deletions

View File

@ -1116,6 +1116,44 @@ static FT_Error load_sfnt_table(FT_Face ft_face, FT_ULong table, FT_Long offset,
return err;
}
static inline int TestStyles(DWORD flags, DWORD styles)
{
return (flags & styles) == styles;
}
static int StyleOrdering(Face *face)
{
if (TestStyles(face->ntmFlags, NTM_BOLD | NTM_ITALIC))
return 3;
if (TestStyles(face->ntmFlags, NTM_ITALIC))
return 2;
if (TestStyles(face->ntmFlags, NTM_BOLD))
return 1;
if (TestStyles(face->ntmFlags, NTM_REGULAR))
return 0;
WARN("Don't know how to order font %s %s with flags 0x%08x\n",
debugstr_w(face->family->FamilyName),
debugstr_w(face->StyleName),
face->ntmFlags);
return 9999;
}
/* Add a style of face to a font family using an ordering of the list such
that regular fonts come before bold and italic, and single styles come
before compound styles. */
static void AddFaceToFamily(Face *face, Family *family)
{
struct list *entry;
LIST_FOR_EACH( entry, &family->faces )
{
Face *ent = LIST_ENTRY(entry, Face, entry);
if (StyleOrdering(face) < StyleOrdering(ent)) break;
}
list_add_before( entry, &face->entry );
}
#define ADDFONT_EXTERNAL_FONT 0x01
#define ADDFONT_FORCE_BITMAP 0x02
@ -1363,7 +1401,6 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
}
face = HeapAlloc(GetProcessHeap(), 0, sizeof(*face));
face->cached_enum_data = NULL;
list_add_tail(&family->faces, &face->entry);
face->StyleName = StyleW;
if (file)
{
@ -1438,6 +1475,9 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
if (!(face->fs.fsCsb[0] & FS_SYMBOL))
have_installed_roman_font = TRUE;
AddFaceToFamily(face, family);
} while(!FT_IS_SCALABLE(ft_face) && ++bitmap_num < ft_face->num_fixed_sizes);
num_faces = ft_face->num_faces;