Alexandre Julliard : user32: Cache full name of non-client metrics fonts.
Alexandre Julliard
julliard at winehq.org
Mon Jan 7 16:23:01 CST 2019
Module: wine
Branch: master
Commit: 8563a2c4f529c3d3b255a1364241169d95ecad43
URL: https://source.winehq.org/git/wine.git/?a=commit;h=8563a2c4f529c3d3b255a1364241169d95ecad43
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Jan 7 10:20:22 2019 -0600
user32: Cache full name of non-client metrics fonts.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/sysparams.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 70dce3f..f5dc47c 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -324,6 +324,7 @@ struct sysparam_font_entry
struct sysparam_entry hdr;
UINT weight;
LOGFONTW val;
+ WCHAR fullname[LF_FACESIZE];
};
struct sysparam_pref_entry
@@ -661,15 +662,18 @@ static int map_to_dpi( int val, UINT dpi )
static INT CALLBACK real_fontname_proc(const LOGFONTW *lf, const TEXTMETRICW *ntm, DWORD type, LPARAM lparam)
{
const ENUMLOGFONTW *elf = (const ENUMLOGFONTW *)lf;
- LOGFONTW *lfW = (LOGFONTW *)lparam;
+ WCHAR *fullname = (WCHAR *)lparam;
- lstrcpynW(lfW->lfFaceName, elf->elfFullName, LF_FACESIZE);
+ lstrcpynW( fullname, elf->elfFullName, LF_FACESIZE );
return 0;
}
-static void get_real_fontname( HDC hdc, LOGFONTW *lf )
+static void get_real_fontname( LOGFONTW *lf, WCHAR fullname[LF_FACESIZE] )
{
- EnumFontFamiliesExW(hdc, lf, real_fontname_proc, (LPARAM)lf, 0);
+ HDC hdc = get_display_dc();
+ strcpyW( fullname, lf->lfFaceName );
+ EnumFontFamiliesExW( hdc, lf, real_fontname_proc, (LPARAM)fullname, 0 );
+ release_display_dc( hdc );
}
/* adjust some of the raw values found in the registry */
@@ -686,16 +690,10 @@ static void normalize_nonclientmetrics( NONCLIENTMETRICSW *pncm)
/* adjust some heights to the corresponding font */
get_text_metr_size( hdc, &pncm->lfMenuFont, &tm, NULL);
pncm->iMenuHeight = max( pncm->iMenuHeight, 2 + tm.tmHeight + tm.tmExternalLeading );
- get_real_fontname( hdc, &pncm->lfMenuFont );
get_text_metr_size( hdc, &pncm->lfCaptionFont, &tm, NULL);
pncm->iCaptionHeight = max( pncm->iCaptionHeight, 2 + tm.tmHeight);
- get_real_fontname( hdc, &pncm->lfCaptionFont );
get_text_metr_size( hdc, &pncm->lfSmCaptionFont, &tm, NULL);
pncm->iSmCaptionHeight = max( pncm->iSmCaptionHeight, 2 + tm.tmHeight);
- get_real_fontname( hdc, &pncm->lfSmCaptionFont );
-
- get_real_fontname( hdc, &pncm->lfStatusFont );
- get_real_fontname( hdc, &pncm->lfMessageFont );
release_display_dc( hdc );
}
@@ -1004,10 +1002,12 @@ static BOOL get_font_entry( union sysparam_all_entry *entry, UINT int_param, voi
entry->font.val = font;
break;
}
+ get_real_fontname( &entry->font.val, entry->font.fullname );
entry->hdr.loaded = TRUE;
}
font = entry->font.val;
font.lfHeight = map_to_dpi( font.lfHeight, dpi );
+ strcpyW( font.lfFaceName, entry->font.fullname );
*(LOGFONTW *)ptr_param = font;
return TRUE;
}
@@ -1026,6 +1026,7 @@ static BOOL set_font_entry( union sysparam_all_entry *entry, UINT int_param, voi
if (!save_entry( &entry->hdr, &font, sizeof(font), REG_BINARY, flags )) return FALSE;
entry->font.val = font;
+ get_real_fontname( &entry->font.val, entry->font.fullname );
entry->hdr.loaded = TRUE;
return TRUE;
}
@@ -1036,6 +1037,7 @@ static BOOL init_font_entry( union sysparam_all_entry *entry )
GetObjectW( GetStockObject( DEFAULT_GUI_FONT ), sizeof(entry->font.val), &entry->font.val );
entry->font.val.lfHeight = map_from_system_dpi( entry->font.val.lfHeight );
entry->font.val.lfWeight = entry->font.weight;
+ get_real_fontname( &entry->font.val, entry->font.fullname );
return init_entry( &entry->hdr, &entry->font.val, sizeof(entry->font.val), REG_BINARY );
}
More information about the wine-cvs
mailing list