[PATCH 2/3] conhost: Only create the new console font once
Hugh McMaster
hugh.mcmaster at outlook.com
Tue Mar 1 05:37:01 CST 2022
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/conhost/window.c | 27 +++++++++------------------
1 file changed, 9 insertions(+), 18 deletions(-)
diff --git a/programs/conhost/window.c b/programs/conhost/window.c
index 9fc310f3111..e408a9830e1 100644
--- a/programs/conhost/window.c
+++ b/programs/conhost/window.c
@@ -1206,6 +1206,7 @@ struct dialog_info
struct console *console;
struct console_config config;
HWND dialog; /* handle to active propsheet */
+ HFONT hfont;
int font_count; /* number of fonts */
struct dialog_font_info
{
@@ -1571,7 +1572,6 @@ static int WINAPI font_enum_size( const LOGFONTW *lf, const TEXTMETRICW *tm,
static BOOL select_font( struct dialog_info *di )
{
- struct console_config config;
int font_idx, size_idx;
HFONT font, old_font;
DWORD_PTR args[2];
@@ -1588,19 +1588,20 @@ static BOOL select_font( struct dialog_info *di )
fill_logfont( &lf, di->font[size_idx].faceName,
wcslen(di->font[size_idx].faceName) * sizeof(WCHAR),
di->font[size_idx].height, di->font[size_idx].weight );
- font = select_font_config( &config, di->console->output_cp, di->console->win, &lf );
+ font = select_font_config( &di->config, di->console->output_cp, di->console->win, &lf );
if (!font) return FALSE;
- if (config.cell_height != di->font[size_idx].height)
- TRACE( "mismatched heights (%u<>%u)\n", config.cell_height, di->font[size_idx].height );
+ if (di->config.cell_height != di->font[size_idx].height)
+ TRACE( "mismatched heights (%u<>%u)\n", di->config.cell_height, di->font[size_idx].height );
old_font = (HFONT)SendDlgItemMessageW( di->dialog, IDC_FNT_PREVIEW, WM_GETFONT, 0, 0 );
SendDlgItemMessageW( di->dialog, IDC_FNT_PREVIEW, WM_SETFONT, (WPARAM)font, TRUE );
+ di->hfont = font;
if (old_font) DeleteObject( old_font );
LoadStringW( GetModuleHandleW(NULL), IDS_FNT_DISPLAY, fmt, ARRAY_SIZE(fmt) );
- args[0] = config.cell_width;
- args[1] = config.cell_height;
+ args[0] = di->config.cell_width;
+ args[1] = di->config.cell_height;
FormatMessageW( FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,
fmt, 0, 0, buf, ARRAY_SIZE(buf), (__ms_va_list*)args );
@@ -1702,18 +1703,7 @@ static INT_PTR WINAPI font_dialog_proc( HWND dialog, UINT msg, WPARAM wparam, LP
di->dialog = dialog;
break;
case PSN_APPLY:
- val = SendDlgItemMessageW( dialog, IDC_FNT_LIST_SIZE, LB_GETCURSEL, 0, 0 );
- if (val < di->font_count)
- {
- LOGFONTW lf;
-
- fill_logfont( &lf, di->font[val].faceName,
- wcslen(di->font[val].faceName) * sizeof(WCHAR),
- di->font[val].height, di->font[val].weight );
- DeleteObject( select_font_config( &di->config, di->console->output_cp,
- di->console->win, &lf ));
- }
-
+ DeleteObject( di->hfont );
val = (GetWindowLongW( GetDlgItem( dialog, IDC_FNT_COLOR_BK ), 0 ) << 4) |
GetWindowLongW( GetDlgItem( dialog, IDC_FNT_COLOR_FG ), 0 );
di->config.attr = val;
@@ -1980,6 +1970,7 @@ static BOOL config_dialog( struct console *console, BOOL current )
prev_config = di.config;
di.font_count = 0;
di.font = NULL;
+ di.hfont = NULL;
wndclass.style = 0;
wndclass.lpfnWndProc = font_preview_proc;
--
2.35.1
More information about the wine-devel
mailing list