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
17586e30
Commit
17586e30
authored
Dec 04, 2016
by
Nikolay Sivov
Committed by
Alexandre Julliard
Dec 05, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dwrite: Improve face name returned by ConvertFontToLOGFONT().
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
3ffa9ee0
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
54 additions
and
19 deletions
+54
-19
dwrite_private.h
dlls/dwrite/dwrite_private.h
+1
-1
font.c
dlls/dwrite/font.c
+1
-1
gdiinterop.c
dlls/dwrite/gdiinterop.c
+0
-14
opentype.c
dlls/dwrite/opentype.c
+24
-2
font.c
dlls/dwrite/tests/font.c
+28
-1
No files found.
dlls/dwrite/dwrite_private.h
View file @
17586e30
...
...
@@ -224,7 +224,7 @@ extern void opentype_get_font_properties(struct file_stream_desc*,struct dwrite_
extern
void
opentype_get_font_metrics
(
struct
file_stream_desc
*
,
DWRITE_FONT_METRICS1
*
,
DWRITE_CARET_METRICS
*
)
DECLSPEC_HIDDEN
;
extern
HRESULT
opentype_get_font_info_strings
(
const
void
*
,
DWRITE_INFORMATIONAL_STRING_ID
,
IDWriteLocalizedStrings
**
)
DECLSPEC_HIDDEN
;
extern
HRESULT
opentype_get_font_familyname
(
struct
file_stream_desc
*
,
IDWriteLocalizedStrings
**
)
DECLSPEC_HIDDEN
;
extern
HRESULT
opentype_get_font_facename
(
struct
file_stream_desc
*
,
IDWriteLocalizedStrings
**
)
DECLSPEC_HIDDEN
;
extern
HRESULT
opentype_get_font_facename
(
struct
file_stream_desc
*
,
WCHAR
*
,
IDWriteLocalizedStrings
**
)
DECLSPEC_HIDDEN
;
extern
HRESULT
opentype_get_typographic_features
(
IDWriteFontFace
*
,
UINT32
,
UINT32
,
UINT32
,
UINT32
*
,
DWRITE_FONT_FEATURE_TAG
*
)
DECLSPEC_HIDDEN
;
extern
BOOL
opentype_get_vdmx_size
(
const
void
*
,
INT
,
UINT16
*
,
UINT16
*
)
DECLSPEC_HIDDEN
;
extern
UINT32
opentype_get_cpal_palettecount
(
const
void
*
)
DECLSPEC_HIDDEN
;
...
...
dlls/dwrite/font.c
View file @
17586e30
...
...
@@ -3247,7 +3247,7 @@ static HRESULT init_font_data(const struct fontface_desc *desc, IDWriteLocalized
stream_desc
.
face_index
=
desc
->
index
;
opentype_get_font_properties
(
&
stream_desc
,
&
props
);
opentype_get_font_metrics
(
&
stream_desc
,
&
data
->
metrics
,
NULL
);
opentype_get_font_facename
(
&
stream_desc
,
&
data
->
names
);
opentype_get_font_facename
(
&
stream_desc
,
props
.
lf
.
lfFaceName
,
&
data
->
names
);
/* get family name from font file */
hr
=
opentype_get_font_familyname
(
&
stream_desc
,
family_name
);
...
...
dlls/dwrite/gdiinterop.c
View file @
17586e30
...
...
@@ -623,12 +623,8 @@ static HRESULT WINAPI gdiinterop_ConvertFontToLOGFONT(IDWriteGdiInterop1 *iface,
IDWriteFont
*
font
,
LOGFONTW
*
logfont
,
BOOL
*
is_systemfont
)
{
struct
gdiinterop
*
This
=
impl_from_IDWriteGdiInterop1
(
iface
);
static
const
WCHAR
enusW
[]
=
{
'e'
,
'n'
,
'-'
,
'u'
,
's'
,
0
};
IDWriteFontCollection
*
collection
;
IDWriteLocalizedStrings
*
name
;
IDWriteFontFamily
*
family
;
UINT32
index
;
BOOL
exists
;
HRESULT
hr
;
TRACE
(
"(%p)->(%p %p %p)
\n
"
,
This
,
font
,
logfont
,
is_systemfont
);
...
...
@@ -655,17 +651,7 @@ static HRESULT WINAPI gdiinterop_ConvertFontToLOGFONT(IDWriteGdiInterop1 *iface,
get_logfont_from_font
(
font
,
logfont
);
logfont
->
lfCharSet
=
DEFAULT_CHARSET
;
logfont
->
lfOutPrecision
=
OUT_OUTLINE_PRECIS
;
logfont
->
lfFaceName
[
0
]
=
0
;
exists
=
FALSE
;
hr
=
IDWriteFont_GetInformationalStrings
(
font
,
DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES
,
&
name
,
&
exists
);
if
(
FAILED
(
hr
)
||
!
exists
)
return
hr
;
hr
=
IDWriteLocalizedStrings_FindLocaleName
(
name
,
enusW
,
&
index
,
&
exists
);
if
(
hr
==
S_OK
)
hr
=
IDWriteLocalizedStrings_GetString
(
name
,
index
,
logfont
->
lfFaceName
,
sizeof
(
logfont
->
lfFaceName
)
/
sizeof
(
WCHAR
));
IDWriteLocalizedStrings_Release
(
name
);
return
hr
;
}
...
...
dlls/dwrite/opentype.c
View file @
17586e30
...
...
@@ -1612,10 +1612,11 @@ HRESULT opentype_get_font_familyname(struct file_stream_desc *stream_desc, IDWri
/* FaceName locating order is WWS Face Name -> Preferred Face Name -> Face Name. If font claims to
have 'Preferred Face Name' in WWS format, then WWS name is not used. */
HRESULT
opentype_get_font_facename
(
struct
file_stream_desc
*
stream_desc
,
IDWriteLocalizedStrings
**
names
)
HRESULT
opentype_get_font_facename
(
struct
file_stream_desc
*
stream_desc
,
WCHAR
*
lfname
,
IDWriteLocalizedStrings
**
names
)
{
const
TT_OS2_V2
*
tt_os2
;
IDWriteLocalizedStrings
*
lfnames
;
void
*
os2_context
,
*
name_context
;
const
TT_OS2_V2
*
tt_os2
;
const
void
*
name_table
;
HRESULT
hr
;
...
...
@@ -1635,6 +1636,27 @@ HRESULT opentype_get_font_facename(struct file_stream_desc *stream_desc, IDWrite
if
(
FAILED
(
hr
))
hr
=
opentype_get_font_strings_from_id
(
name_table
,
OPENTYPE_STRING_SUBFAMILY_NAME
,
names
);
/* User locale is preferred, with fallback to en-us. */
*
lfname
=
0
;
if
(
SUCCEEDED
(
opentype_get_font_strings_from_id
(
name_table
,
OPENTYPE_STRING_FAMILY_NAME
,
&
lfnames
)))
{
static
const
WCHAR
enusW
[]
=
{
'e'
,
'n'
,
'-'
,
'u'
,
's'
,
0
};
WCHAR
localeW
[
LOCALE_NAME_MAX_LENGTH
];
UINT32
index
;
BOOL
exists
;
exists
=
FALSE
;
if
(
GetUserDefaultLocaleName
(
localeW
,
sizeof
(
localeW
)
/
sizeof
(
WCHAR
)))
IDWriteLocalizedStrings_FindLocaleName
(
lfnames
,
localeW
,
&
index
,
&
exists
);
if
(
!
exists
)
IDWriteLocalizedStrings_FindLocaleName
(
lfnames
,
enusW
,
&
index
,
&
exists
);
if
(
exists
)
IDWriteLocalizedStrings_GetString
(
lfnames
,
index
,
lfname
,
LF_FACESIZE
);
IDWriteLocalizedStrings_Release
(
lfnames
);
}
if
(
tt_os2
)
IDWriteFontFileStream_ReleaseFileFragment
(
stream_desc
->
stream
,
os2_context
);
if
(
name_context
)
...
...
dlls/dwrite/tests/font.c
View file @
17586e30
...
...
@@ -3459,6 +3459,7 @@ static void test_TryGetFontTable(void)
static
void
get_logfont_from_font
(
IDWriteFont
*
font
,
LOGFONTW
*
logfont
)
{
void
*
os2_context
,
*
head_context
;
IDWriteLocalizedStrings
*
names
;
DWRITE_FONT_SIMULATIONS
sim
;
IDWriteFontFace
*
fontface
;
const
TT_OS2_V2
*
tt_os2
;
...
...
@@ -3531,6 +3532,31 @@ static void get_logfont_from_font(IDWriteFont *font, LOGFONTW *logfont)
}
}
/* lfFaceName */
exists
=
FALSE
;
logfont
->
lfFaceName
[
0
]
=
0
;
hr
=
IDWriteFont_GetInformationalStrings
(
font
,
DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES
,
&
names
,
&
exists
);
if
(
SUCCEEDED
(
hr
))
{
if
(
exists
)
{
static
const
WCHAR
enusW
[]
=
{
'e'
,
'n'
,
'-'
,
'u'
,
's'
,
0
};
WCHAR
localeW
[
LOCALE_NAME_MAX_LENGTH
];
UINT32
index
;
/* Fallback to en-us if there's no string for user locale. */
exists
=
FALSE
;
if
(
GetUserDefaultLocaleName
(
localeW
,
sizeof
(
localeW
)
/
sizeof
(
WCHAR
)))
IDWriteLocalizedStrings_FindLocaleName
(
names
,
localeW
,
&
index
,
&
exists
);
if
(
!
exists
)
IDWriteLocalizedStrings_FindLocaleName
(
names
,
enusW
,
&
index
,
&
exists
);
if
(
exists
)
IDWriteLocalizedStrings_GetString
(
names
,
index
,
logfont
->
lfFaceName
,
sizeof
(
logfont
->
lfFaceName
)
/
sizeof
(
WCHAR
));
}
IDWriteLocalizedStrings_Release
(
names
);
}
if
(
tt_os2
)
IDWriteFontFace_ReleaseFontTable
(
fontface
,
os2_context
);
if
(
tt_head
)
...
...
@@ -3631,6 +3657,8 @@ if (0) { /* crashes on native */
sim
&
DWRITE_FONT_SIMULATIONS_BOLD
?
"yes"
:
"no"
);
ok
(
logfont
.
lfItalic
==
lf
.
lfItalic
,
"%s: unexpected italic flag %d, oblique simulation %s
\n
"
,
wine_dbgstr_w
(
nameW
),
logfont
.
lfItalic
,
sim
&
DWRITE_FONT_SIMULATIONS_OBLIQUE
?
"yes"
:
"no"
);
ok
(
!
lstrcmpW
(
logfont
.
lfFaceName
,
lf
.
lfFaceName
),
"%s: unexpected facename %s, expected %s
\n
"
,
wine_dbgstr_w
(
nameW
),
wine_dbgstr_w
(
logfont
.
lfFaceName
),
wine_dbgstr_w
(
lf
.
lfFaceName
));
ok
(
logfont
.
lfOutPrecision
==
OUT_OUTLINE_PRECIS
,
"%s: unexpected output precision %d
\n
"
,
wine_dbgstr_w
(
nameW
),
logfont
.
lfOutPrecision
);
...
...
@@ -3639,7 +3667,6 @@ if (0) { /* crashes on native */
ok
(
logfont
.
lfQuality
==
DEFAULT_QUALITY
,
"%s: unexpected quality %d
\n
"
,
wine_dbgstr_w
(
nameW
),
logfont
.
lfQuality
);
ok
(
logfont
.
lfPitchAndFamily
==
DEFAULT_PITCH
,
"%s: unexpected pitch %d
\n
"
,
wine_dbgstr_w
(
nameW
),
logfont
.
lfPitchAndFamily
);
ok
(
logfont
.
lfFaceName
[
0
]
!=
0
,
"got face name %s
\n
"
,
wine_dbgstr_w
(
logfont
.
lfFaceName
));
IDWriteFont_Release
(
font
);
}
...
...
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