[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