[PATCH 5/5] gdi32: Only use the registry cache for application fonts.
Rémi Bernon
rbernon at codeweavers.com
Fri Nov 27 08:38:05 CST 2020
And load system fonts outside of the global font mutex. We now only use
the mutex to protect the registry fonts initialization.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/gdi32/font.c | 26 ++++++++++++++++----------
dlls/gdi32/freetype.c | 6 +++---
2 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 4cc072bd785..9fa0f45ec4b 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -7758,7 +7758,7 @@ static void load_system_bitmap_fonts(void)
{
dlen = sizeof(data);
if (!RegQueryValueExW( hkey, fonts[i], 0, &type, (BYTE *)data, &dlen ) && type == REG_SZ)
- add_system_font_resource( data, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE );
+ add_system_font_resource( data, ADDFONT_ALLOW_BITMAP );
}
RegCloseKey( hkey );
}
@@ -7789,11 +7789,11 @@ static void load_file_system_fonts(void)
/* Windows directory */
get_fonts_win_dir_path( L"*", path );
- load_directory_fonts( path, ADDFONT_ADD_TO_CACHE );
+ load_directory_fonts( path, 0 );
/* Wine data directory */
get_fonts_data_dir_path( L"*", path );
- load_directory_fonts( path, ADDFONT_ADD_TO_CACHE | ADDFONT_EXTERNAL_FONT );
+ load_directory_fonts( path, ADDFONT_EXTERNAL_FONT );
/* custom paths */
/* @@ Wine registry key: HKCU\Software\Wine\Fonts */
@@ -7805,7 +7805,7 @@ static void load_file_system_fonts(void)
if (next && next - ptr < 2) continue;
lstrcpynW( path, ptr, MAX_PATH - 2 );
lstrcatW( path, L"\\*" );
- load_directory_fonts( path, ADDFONT_ADD_TO_CACHE | ADDFONT_EXTERNAL_FONT );
+ load_directory_fonts( path, ADDFONT_EXTERNAL_FONT );
}
}
}
@@ -7926,9 +7926,9 @@ static void load_registry_fonts(void)
dlen /= sizeof(WCHAR);
if (data[0] && data[1] == ':')
- add_font_resource( data, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE );
+ add_font_resource( data, ADDFONT_ALLOW_BITMAP );
else if (dlen >= 6 && !wcsicmp( data + dlen - 5, L".fon" ))
- add_system_font_resource( data, ADDFONT_ALLOW_BITMAP | ADDFONT_ADD_TO_CACHE );
+ add_system_font_resource( data, ADDFONT_ALLOW_BITMAP );
next:
vlen = ARRAY_SIZE(value);
dlen = sizeof(data);
@@ -7954,6 +7954,10 @@ void font_init(void)
update_codepage();
if (__wine_init_unix_lib( gdi32_module, DLL_PROCESS_ATTACH, &callback_funcs, &font_funcs )) return;
+ load_system_bitmap_fonts();
+ load_file_system_fonts();
+ font_funcs->load_fonts();
+
if (!(mutex = CreateMutexW( NULL, FALSE, L"__WINE_FONT_MUTEX__" ))) return;
WaitForSingleObject( mutex, INFINITE );
@@ -7962,16 +7966,18 @@ void font_init(void)
if (disposition == REG_CREATED_NEW_KEY)
{
- load_system_bitmap_fonts();
- load_file_system_fonts();
- font_funcs->load_fonts();
load_registry_fonts();
update_external_font_keys();
}
- else load_font_list_from_cache();
ReleaseMutex( mutex );
+ if (disposition != REG_CREATED_NEW_KEY)
+ {
+ load_registry_fonts();
+ load_font_list_from_cache();
+ }
+
reorder_font_list();
load_gdi_font_subst();
load_gdi_font_replacements();
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index e7684728c9c..1ee02795bed 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -1303,7 +1303,7 @@ static BOOL ReadFontDir(const char *dirname, BOOL external_fonts)
ReadFontDir(path, external_fonts);
else
{
- DWORD addfont_flags = ADDFONT_ADD_TO_CACHE;
+ DWORD addfont_flags = 0;
if(external_fonts) addfont_flags |= ADDFONT_EXTERNAL_FONT;
AddFontToList(NULL, path, NULL, 0, addfont_flags);
}
@@ -1523,7 +1523,7 @@ static void load_fontconfig_fonts( void )
if (!(done_set = pFcStrSetCreate())) goto done;
if (!(dir_list = pFcConfigGetFontDirs( config ))) goto done;
- fontconfig_add_fonts_from_dir_list( config, dir_list, done_set, ADDFONT_EXTERNAL_FONT | ADDFONT_ADD_TO_CACHE );
+ fontconfig_add_fonts_from_dir_list( config, dir_list, done_set, ADDFONT_EXTERNAL_FONT );
done:
if (dir_list) pFcStrListDone( dir_list );
@@ -1543,7 +1543,7 @@ static void load_mac_font_callback(const void *value, void *context)
if (path && CFStringGetFileSystemRepresentation(pathStr, path, len))
{
TRACE("font file %s\n", path);
- AddFontToList(NULL, path, NULL, 0, ADDFONT_EXTERNAL_FONT | ADDFONT_ADD_TO_CACHE);
+ AddFontToList(NULL, path, NULL, 0, ADDFONT_EXTERNAL_FONT);
}
RtlFreeHeap(GetProcessHeap(), 0, path);
}
--
2.29.2
More information about the wine-devel
mailing list