[2/2] gdi32: Simplify font cache.

Kusanagi Kouichi slash at ac.auone-net.jp
Thu Mar 29 03:50:02 CDT 2012


Vertical flag and NTM_PS_OPENTYPE flag are not lost anymore.

Signed-off-by: Kusanagi Kouichi <slash at ac.auone-net.jp>
---
 dlls/gdi32/freetype.c |   83 +++++--------------------------------------------
 1 file changed, 8 insertions(+), 75 deletions(-)

diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index f3313a5..298f0e7 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -482,19 +482,8 @@ typedef struct tagFontSubst {
 static const WCHAR wine_fonts_key[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\',
                                        'F','o','n','t','s',0};
 static const WCHAR wine_fonts_cache_key[] = {'C','a','c','h','e',0};
+static const WCHAR face_value[] = {'F','a','c','e',0};
 static const WCHAR english_name_value[] = {'E','n','g','l','i','s','h',' ','N','a','m','e',0};
-static const WCHAR face_index_value[] = {'I','n','d','e','x',0};
-static const WCHAR face_italic_value[] = {'I','t','a','l','i','c',0};
-static const WCHAR face_bold_value[] = {'B','o','l','d',0};
-static const WCHAR face_version_value[] = {'V','e','r','s','i','o','n',0};
-static const WCHAR face_external_value[] = {'E','x','t','e','r','n','a','l',0};
-static const WCHAR face_height_value[] = {'H','e','i','g','h','t',0};
-static const WCHAR face_width_value[] = {'W','i','d','t','h',0};
-static const WCHAR face_size_value[] = {'S','i','z','e',0};
-static const WCHAR face_x_ppem_value[] = {'X','p','p','e','m',0};
-static const WCHAR face_y_ppem_value[] = {'Y','p','p','e','m',0};
-static const WCHAR face_internal_leading_value[] = {'I','n','t','e','r','n','a','l',' ','L','e','a','d','i','n','g',0};
-static const WCHAR face_font_sig_value[] = {'F','o','n','t',' ','S','i','g','n','a','t','u','r','e',0};
 static const WCHAR face_full_name_value[] = {'F','u','l','l',' ','N','a','m','e','\0'};
 
 
@@ -1345,20 +1334,6 @@ static Family *get_family( WCHAR *name, WCHAR *english_name, BOOL vertical )
     return family;
 }
 
-static LONG reg_load_dword(HKEY hkey, const WCHAR *value, DWORD *data)
-{
-    DWORD type, needed;
-    LONG r = RegQueryValueExW(hkey, value, NULL, &type, NULL, &needed);
-    if(r != ERROR_SUCCESS) return r;
-    if(type != REG_DWORD || needed != sizeof(DWORD)) return ERROR_BAD_CONFIGURATION;
-    return RegQueryValueExW(hkey, value, NULL, &type, (BYTE*)data, &needed);
-}
-
-static inline LONG reg_save_dword(HKEY hkey, const WCHAR *value, DWORD data)
-{
-    return RegSetValueExW(hkey, value, 0, REG_DWORD, (BYTE*)&data, sizeof(DWORD));
-}
-
 static void load_face(HKEY hkey_face, WCHAR *face_name, Family *family)
 {
     DWORD needed;
@@ -1368,16 +1343,17 @@ static void load_face(HKEY hkey_face, WCHAR *face_name, Family *family)
        key of a bunch of non-scalable strikes */
     if(RegQueryValueExA(hkey_face, "File Name", NULL, NULL, NULL, &needed) == ERROR_SUCCESS)
     {
-        DWORD italic, bold;
-        Face *face;
-        face = HeapAlloc(GetProcessHeap(), 0, sizeof(*face));
+        Face * const face = HeapAlloc(GetProcessHeap(), 0, sizeof(*face));
+        DWORD face_size;
+
+        face_size = sizeof *face;
+        RegQueryValueExW(hkey_face, face_value, NULL, NULL, (BYTE*)face, &face_size);
         face->cached_enum_data = NULL;
 
         face->file = HeapAlloc(GetProcessHeap(), 0, needed);
         RegQueryValueExA(hkey_face, "File Name", NULL, NULL, (BYTE*)face->file, &needed);
 
         face->StyleName = strdupW(face_name);
-        face->vertical = (family->FamilyName[0] == '@');
 
         if(RegQueryValueExW(hkey_face, face_full_name_value, NULL, NULL, NULL, &needed) == ERROR_SUCCESS)
         {
@@ -1388,38 +1364,10 @@ static void load_face(HKEY hkey_face, WCHAR *face_name, Family *family)
         else
             face->FullName = NULL;
 
-        reg_load_dword(hkey_face, face_index_value, (DWORD*)&face->face_index);
-        reg_load_dword(hkey_face, face_italic_value, &italic);
-        reg_load_dword(hkey_face, face_bold_value, &bold);
-        reg_load_dword(hkey_face, face_version_value, (DWORD*)&face->font_version);
-        reg_load_dword(hkey_face, face_external_value, (DWORD*)&face->external);
-
-        needed = sizeof(face->fs);
-        RegQueryValueExW(hkey_face, face_font_sig_value, NULL, NULL, (BYTE*)&face->fs, &needed);
-
-        if(reg_load_dword(hkey_face, face_height_value, (DWORD*)&face->size.height) != ERROR_SUCCESS)
-        {
-            face->scalable = TRUE;
-            memset(&face->size, 0, sizeof(face->size));
-        }
-        else
-        {
-            face->scalable = FALSE;
-            reg_load_dword(hkey_face, face_width_value, (DWORD*)&face->size.width);
-            reg_load_dword(hkey_face, face_size_value, (DWORD*)&face->size.size);
-            reg_load_dword(hkey_face, face_x_ppem_value, (DWORD*)&face->size.x_ppem);
-            reg_load_dword(hkey_face, face_y_ppem_value, (DWORD*)&face->size.y_ppem);
-            reg_load_dword(hkey_face, face_internal_leading_value, (DWORD*)&face->size.internal_leading);
-
+        if (!face->scalable)
             TRACE("Adding bitmap size h %d w %d size %ld x_ppem %ld y_ppem %ld\n",
                   face->size.height, face->size.width, face->size.size >> 6,
                   face->size.x_ppem >> 6, face->size.y_ppem >> 6);
-        }
-
-        face->ntmFlags = 0;
-        if (italic) face->ntmFlags |= NTM_ITALIC;
-        if (bold) face->ntmFlags |= NTM_BOLD;
-        if (face->ntmFlags == 0) face->ntmFlags = NTM_REGULAR;
 
         TRACE("fsCsb = %08x %08x/%08x %08x %08x %08x\n",
               face->fs.fsCsb[0], face->fs.fsCsb[1],
@@ -1557,23 +1505,8 @@ static void add_face_to_cache(Face *face)
         RegSetValueExW(hkey_face, face_full_name_value, 0, REG_SZ, (BYTE*)face->FullName,
                        (strlenW(face->FullName) + 1) * sizeof(WCHAR));
 
-    reg_save_dword(hkey_face, face_index_value, face->face_index);
-    reg_save_dword(hkey_face, face_italic_value, (face->ntmFlags & NTM_ITALIC) != 0);
-    reg_save_dword(hkey_face, face_bold_value, (face->ntmFlags & NTM_BOLD) != 0);
-    reg_save_dword(hkey_face, face_version_value, face->font_version);
-    reg_save_dword(hkey_face, face_external_value, face->external);
-
-    RegSetValueExW(hkey_face, face_font_sig_value, 0, REG_BINARY, (BYTE*)&face->fs, sizeof(face->fs));
+    RegSetValueExW(hkey_face, face_value, 0, REG_BINARY, (BYTE*)face, sizeof *face);
 
-    if(!face->scalable)
-    {
-        reg_save_dword(hkey_face, face_height_value, face->size.height);
-        reg_save_dword(hkey_face, face_width_value, face->size.width);
-        reg_save_dword(hkey_face, face_size_value, face->size.size);
-        reg_save_dword(hkey_face, face_x_ppem_value, face->size.x_ppem);
-        reg_save_dword(hkey_face, face_y_ppem_value, face->size.y_ppem);
-        reg_save_dword(hkey_face, face_internal_leading_value, face->size.internal_leading);
-    }
     RegCloseKey(hkey_face);
     RegCloseKey(hkey_family);
     RegCloseKey(hkey_font_cache);
-- 
1.7.9.5




More information about the wine-patches mailing list