Alexandre Julliard : wineconsole: Accept a too large font if we can' t find one that fits the screen.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Oct 20 11:28:30 CDT 2015


Module: wine
Branch: master
Commit: 8e77d6a24da3823fca7c718e4a104242d4cb351f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8e77d6a24da3823fca7c718e4a104242d4cb351f

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Oct 20 16:47:35 2015 +0900

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 493990d..4f73a3a 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 879529c..e723745 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 73a7701..7c5174f 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,




More information about the wine-cvs mailing list