From 8e77d6a24da3823fca7c718e4a104242d4cb351f Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 20 Oct 2015 16:47:35 +0900 Subject: [PATCH] wineconsole: Accept a too large font if we can't find one that fits the screen. --- programs/wineconsole/dialog.c | 4 ++-- programs/wineconsole/user.c | 16 +++++++++++----- programs/wineconsole/winecon_user.h | 4 ++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/programs/wineconsole/dialog.c b/programs/wineconsole/dialog.c index 493990da403..4f73a3acb09 100644 --- a/programs/wineconsole/dialog.c +++ b/programs/wineconsole/dialog.c @@ -300,7 +300,7 @@ static int CALLBACK font_enum_size2(const LOGFONTW* lf, const TEXTMETRICW* tm, struct dialog_info* di = (struct dialog_info*)lParam; WCUSER_DumpTextMetric(tm, FontType); - if (WCUSER_ValidateFontMetric(di->data, tm, FontType)) + if (WCUSER_ValidateFontMetric(di->data, tm, FontType, TRUE)) { di->nFont++; } @@ -372,7 +372,7 @@ static int CALLBACK font_enum_size(const LOGFONTW* lf, const TEXTMETRICW* tm, return 0; } - if (WCUSER_ValidateFontMetric(di->data, tm, FontType)) + if (WCUSER_ValidateFontMetric(di->data, tm, FontType, TRUE)) { int idx = 0; diff --git a/programs/wineconsole/user.c b/programs/wineconsole/user.c index 879529cdb3c..e723745ecf6 100644 --- a/programs/wineconsole/user.c +++ b/programs/wineconsole/user.c @@ -333,7 +333,8 @@ static BOOL WCUSER_AreFontsEqual(const struct config_data* config, const LOGFONT struct font_chooser { struct inner_data* data; - int done; + BOOL check_screen_size; + BOOL done; }; /****************************************************************** @@ -341,11 +342,12 @@ struct font_chooser * * Returns true if the font described in tm is usable as a font for the renderer */ -BOOL WCUSER_ValidateFontMetric(const struct inner_data* data, const TEXTMETRICW* tm, DWORD fontType) +BOOL WCUSER_ValidateFontMetric(const struct inner_data* data, const TEXTMETRICW* tm, + DWORD type, BOOL check_screen_size) { BOOL ret = TRUE; - if (fontType & RASTER_FONTTYPE) + if (check_screen_size && (type & RASTER_FONTTYPE)) ret = (tm->tmMaxCharWidth * data->curcfg.win_width < GetSystemMetrics(SM_CXSCREEN) && tm->tmHeight * data->curcfg.win_height < GetSystemMetrics(SM_CYSCREEN)); return ret && !tm->tmItalic && !tm->tmUnderlined && !tm->tmStruckOut && @@ -377,7 +379,7 @@ static int CALLBACK get_first_font_enum_2(const LOGFONTW* lf, const TEXTMETRICW* struct font_chooser* fc = (struct font_chooser*)lParam; WCUSER_DumpTextMetric(tm, FontType); - if (WCUSER_ValidateFontMetric(fc->data, tm, FontType)) + if (WCUSER_ValidateFontMetric(fc->data, tm, FontType, fc->check_screen_size)) { LOGFONTW mlf = *lf; @@ -535,7 +537,11 @@ static void WCUSER_SetFontPmt(struct inner_data* data, const WCHAR* font, /* try to find an acceptable font */ WINE_WARN("Couldn't match the font from registry... trying to find one\n"); fc.data = data; - fc.done = 0; + fc.check_screen_size = TRUE; + fc.done = FALSE; + EnumFontFamiliesW(PRIVATE(data)->hMemDC, NULL, get_first_font_enum, (LPARAM)&fc); + if (fc.done) return; + fc.check_screen_size = FALSE; EnumFontFamiliesW(PRIVATE(data)->hMemDC, NULL, get_first_font_enum, (LPARAM)&fc); if (!fc.done) WINECON_Fatal("Couldn't find a decent font, aborting\n"); } diff --git a/programs/wineconsole/winecon_user.h b/programs/wineconsole/winecon_user.h index 73a77018ce8..7c5174f9c30 100644 --- a/programs/wineconsole/winecon_user.h +++ b/programs/wineconsole/winecon_user.h @@ -46,8 +46,8 @@ struct inner_data_user { extern const COLORREF WCUSER_ColorMap[16]; extern BOOL WCUSER_GetProperties(struct inner_data*, BOOL); extern BOOL WCUSER_ValidateFont(const struct inner_data* data, const LOGFONTW* lf); -extern BOOL WCUSER_ValidateFontMetric(const struct inner_data* data, - const TEXTMETRICW* tm, DWORD fontType); +extern BOOL WCUSER_ValidateFontMetric(const struct inner_data* data, const TEXTMETRICW* tm, + DWORD type, BOOL check_screen_size); extern HFONT WCUSER_CopyFont(struct config_data* config, HWND hWnd, const LOGFONTW* lf, LONG* el); extern void WCUSER_FillLogFont(LOGFONTW* lf, const WCHAR* name,