Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
e1fc8dcd
Commit
e1fc8dcd
authored
Mar 28, 2016
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wineconsole: If necessary, fallback to a font without the right properties instead of failing.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
8f567028
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
48 additions
and
27 deletions
+48
-27
dialog.c
programs/wineconsole/dialog.c
+3
-3
user.c
programs/wineconsole/user.c
+43
-22
winecon_user.h
programs/wineconsole/winecon_user.h
+2
-2
No files found.
programs/wineconsole/dialog.c
View file @
e1fc8dcd
...
...
@@ -303,7 +303,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
,
TRUE
))
if
(
WCUSER_ValidateFontMetric
(
di
->
data
,
tm
,
FontType
,
0
))
{
di
->
nFont
++
;
}
...
...
@@ -317,7 +317,7 @@ static int CALLBACK font_enum(const LOGFONTW* lf, const TEXTMETRICW* tm,
struct
dialog_info
*
di
=
(
struct
dialog_info
*
)
lParam
;
WCUSER_DumpLogFont
(
"DlgFamily: "
,
lf
,
FontType
);
if
(
WCUSER_ValidateFont
(
di
->
data
,
lf
))
if
(
WCUSER_ValidateFont
(
di
->
data
,
lf
,
0
))
{
if
(
FontType
&
RASTER_FONTTYPE
)
{
...
...
@@ -375,7 +375,7 @@ static int CALLBACK font_enum_size(const LOGFONTW* lf, const TEXTMETRICW* tm,
return
0
;
}
if
(
WCUSER_ValidateFontMetric
(
di
->
data
,
tm
,
FontType
,
TRUE
))
if
(
WCUSER_ValidateFontMetric
(
di
->
data
,
tm
,
FontType
,
0
))
{
int
idx
=
0
;
...
...
programs/wineconsole/user.c
View file @
e1fc8dcd
...
...
@@ -333,7 +333,7 @@ static BOOL WCUSER_AreFontsEqual(const struct config_data* config, const LOGFONT
struct
font_chooser
{
struct
inner_data
*
data
;
BOOL
check_screen_size
;
int
pass
;
BOOL
done
;
};
...
...
@@ -343,15 +343,26 @@ 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
type
,
BOOL
check_screen_size
)
DWORD
type
,
int
pass
)
{
BOOL
ret
=
TRUE
;
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
&&
(
tm
->
tmCharSet
==
DEFAULT_CHARSET
||
tm
->
tmCharSet
==
g_uiDefaultCharset
);
switch
(
pass
)
/* we get increasingly lenient in later passes */
{
case
0
:
if
(
type
&
RASTER_FONTTYPE
)
{
if
(
tm
->
tmMaxCharWidth
*
data
->
curcfg
.
win_width
>=
GetSystemMetrics
(
SM_CXSCREEN
)
||
tm
->
tmHeight
*
data
->
curcfg
.
win_height
>=
GetSystemMetrics
(
SM_CYSCREEN
))
return
FALSE
;
}
/* fall through */
case
1
:
if
(
tm
->
tmCharSet
!=
DEFAULT_CHARSET
&&
tm
->
tmCharSet
!=
g_uiDefaultCharset
)
return
FALSE
;
/* fall through */
case
2
:
if
(
tm
->
tmItalic
||
tm
->
tmUnderlined
||
tm
->
tmStruckOut
)
return
FALSE
;
break
;
}
return
TRUE
;
}
/******************************************************************
...
...
@@ -359,12 +370,22 @@ BOOL WCUSER_ValidateFontMetric(const struct inner_data* data, const TEXTMETRICW*
*
* Returns true if the font family described in lf is usable as a font for the renderer
*/
BOOL
WCUSER_ValidateFont
(
const
struct
inner_data
*
data
,
const
LOGFONTW
*
lf
)
BOOL
WCUSER_ValidateFont
(
const
struct
inner_data
*
data
,
const
LOGFONTW
*
lf
,
int
pass
)
{
return
(
lf
->
lfPitchAndFamily
&
3
)
==
FIXED_PITCH
&&
/* (lf->lfPitchAndFamily & 0xF0) == FF_MODERN && */
lf
->
lfFaceName
[
0
]
!=
'@'
&&
(
lf
->
lfCharSet
==
DEFAULT_CHARSET
||
lf
->
lfCharSet
==
g_uiDefaultCharset
);
switch
(
pass
)
/* we get increasingly lenient in later passes */
{
case
0
:
case
1
:
if
(
lf
->
lfCharSet
!=
DEFAULT_CHARSET
&&
lf
->
lfCharSet
!=
g_uiDefaultCharset
)
return
FALSE
;
/* fall through */
case
2
:
if
((
lf
->
lfPitchAndFamily
&
3
)
!=
FIXED_PITCH
)
return
FALSE
;
/* fall through */
case
3
:
if
(
lf
->
lfFaceName
[
0
]
==
'@'
)
return
FALSE
;
break
;
}
return
TRUE
;
}
/******************************************************************
...
...
@@ -379,7 +400,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
,
fc
->
check_screen_size
))
if
(
WCUSER_ValidateFontMetric
(
fc
->
data
,
tm
,
FontType
,
fc
->
pass
))
{
LOGFONTW
mlf
=
*
lf
;
...
...
@@ -417,7 +438,7 @@ static int CALLBACK get_first_font_enum(const LOGFONTW* lf, const TEXTMETRICW* t
struct
font_chooser
*
fc
=
(
struct
font_chooser
*
)
lParam
;
WCUSER_DumpLogFont
(
"InitFamily: "
,
lf
,
FontType
);
if
(
WCUSER_ValidateFont
(
fc
->
data
,
lf
))
if
(
WCUSER_ValidateFont
(
fc
->
data
,
lf
,
fc
->
pass
))
{
EnumFontFamiliesW
(
PRIVATE
(
fc
->
data
)
->
hMemDC
,
lf
->
lfFaceName
,
get_first_font_enum_2
,
lParam
);
...
...
@@ -537,13 +558,13 @@ 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
.
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
"
);
for
(
fc
.
pass
=
0
;
fc
.
pass
<=
4
;
fc
.
pass
++
)
{
EnumFontFamiliesW
(
PRIVATE
(
data
)
->
hMemDC
,
NULL
,
get_first_font_enum
,
(
LPARAM
)
&
fc
);
if
(
fc
.
done
)
return
;
}
WINECON_Fatal
(
"Couldn't find a decent font, aborting
\n
"
);
}
/******************************************************************
...
...
programs/wineconsole/winecon_user.h
View file @
e1fc8dcd
...
...
@@ -45,9 +45,9 @@ struct inner_data_user {
/* from user.c */
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_ValidateFont
(
const
struct
inner_data
*
data
,
const
LOGFONTW
*
lf
,
int
pass
);
extern
BOOL
WCUSER_ValidateFontMetric
(
const
struct
inner_data
*
data
,
const
TEXTMETRICW
*
tm
,
DWORD
type
,
BOOL
check_screen_size
);
DWORD
type
,
int
pass
);
extern
HFONT
WCUSER_CopyFont
(
struct
config_data
*
config
,
HWND
hWnd
,
const
LOGFONTW
*
lf
,
LONG
*
el
);
extern
void
WCUSER_FillLogFont
(
LOGFONTW
*
lf
,
const
WCHAR
*
name
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment