[4/5] gdi32: Use font list to find face from file.
Kusanagi Kouichi
slash at ac.auone-net.jp
Sun Apr 22 05:56:25 CDT 2012
Signed-off-by: Kusanagi Kouichi <slash at ac.auone-net.jp>
---
dlls/gdi32/freetype.c | 35 +++++++++++++++++++----------------
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index a29ae78..57188aa0 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -909,37 +909,40 @@ static const struct list *get_face_list_from_family(const Family *family)
static Face *find_face_from_filename(const WCHAR *file_name, const WCHAR *face_name)
{
- Family *family;
- Face *face;
- const char *file;
DWORD len = WideCharToMultiByte(CP_UNIXCP, 0, file_name, -1, NULL, 0, NULL, NULL);
char *file_nameA = HeapAlloc(GetProcessHeap(), 0, len);
+ const Font *font;
WideCharToMultiByte(CP_UNIXCP, 0, file_name, -1, file_nameA, len, NULL, NULL);
TRACE("looking for file %s name %s\n", debugstr_a(file_nameA), debugstr_w(face_name));
- LIST_FOR_EACH_ENTRY(family, &family_list, Family, entry)
+ LIST_FOR_EACH_ENTRY(font, &font_list, Font, entry)
{
- const struct list *face_list;
- if(face_name && strcmpiW(face_name, family->FamilyName))
+ Face *face;
+ const char *file;
+
+ if (font->file == NULL)
continue;
- face_list = get_face_list_from_family(family);
- LIST_FOR_EACH_ENTRY(face, face_list, Face, entry)
+
+ file = strrchr(font->file, '/');
+ if (!file)
+ file = font->file;
+ else
+ file++;
+
+ if (strcasecmp(file, file_nameA) != 0)
+ continue;
+
+ LIST_FOR_EACH_ENTRY(face, &font->faces, Face, font_entry)
{
- if (!face->font->file)
- continue;
- file = strrchr(face->font->file, '/');
- if(!file)
- file = face->font->file;
- else
- file++;
- if(!strcasecmp(file, file_nameA))
+ if (face_name == NULL || strcmpiW(face_name, face->family->FamilyName))
{
HeapFree(GetProcessHeap(), 0, file_nameA);
return face;
}
}
}
+
HeapFree(GetProcessHeap(), 0, file_nameA);
return NULL;
}
--
1.7.10
More information about the wine-patches
mailing list