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
fec78e62
Commit
fec78e62
authored
Jan 23, 2020
by
Nikolay Sivov
Committed by
Alexandre Julliard
Jan 23, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dwrite: Evaluate IsMonospacedFont() flag at font level.
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
0b0a2ce8
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
23 additions
and
40 deletions
+23
-40
dwrite_private.h
dlls/dwrite/dwrite_private.h
+1
-2
font.c
dlls/dwrite/font.c
+4
-17
freetype.c
dlls/dwrite/freetype.c
+0
-18
opentype.c
dlls/dwrite/opentype.c
+18
-1
font.c
dlls/dwrite/tests/font.c
+0
-2
No files found.
dlls/dwrite/dwrite_private.h
View file @
fec78e62
...
@@ -186,7 +186,7 @@ struct fontfacecached
...
@@ -186,7 +186,7 @@ struct fontfacecached
enum
font_flags
enum
font_flags
{
{
FONT_IS_SYMBOL
=
1
<<
0
,
FONT_IS_SYMBOL
=
1
<<
0
,
FONT
FACE_IS_MONOSPACED
=
1
<<
1
,
FONT
_IS_MONOSPACED
=
1
<<
1
,
FONTFACE_HAS_KERNING_PAIRS
=
1
<<
2
,
FONTFACE_HAS_KERNING_PAIRS
=
1
<<
2
,
FONTFACE_HAS_VERTICAL_VARIANTS
=
1
<<
3
FONTFACE_HAS_VERTICAL_VARIANTS
=
1
<<
3
};
};
...
@@ -391,7 +391,6 @@ extern void release_freetype(void) DECLSPEC_HIDDEN;
...
@@ -391,7 +391,6 @@ extern void release_freetype(void) DECLSPEC_HIDDEN;
extern
HRESULT
freetype_get_design_glyph_metrics
(
struct
dwrite_fontface
*
fontface
,
UINT16
glyph
,
extern
HRESULT
freetype_get_design_glyph_metrics
(
struct
dwrite_fontface
*
fontface
,
UINT16
glyph
,
DWRITE_GLYPH_METRICS
*
metrics
)
DECLSPEC_HIDDEN
;
DWRITE_GLYPH_METRICS
*
metrics
)
DECLSPEC_HIDDEN
;
extern
void
freetype_notify_cacheremove
(
IDWriteFontFace5
*
fontface
)
DECLSPEC_HIDDEN
;
extern
void
freetype_notify_cacheremove
(
IDWriteFontFace5
*
fontface
)
DECLSPEC_HIDDEN
;
extern
BOOL
freetype_is_monospaced
(
IDWriteFontFace5
*
fontface
)
DECLSPEC_HIDDEN
;
extern
HRESULT
freetype_get_glyphrun_outline
(
IDWriteFontFace5
*
fontface
,
float
emsize
,
UINT16
const
*
glyphs
,
extern
HRESULT
freetype_get_glyphrun_outline
(
IDWriteFontFace5
*
fontface
,
float
emsize
,
UINT16
const
*
glyphs
,
float
const
*
advances
,
DWRITE_GLYPH_OFFSET
const
*
offsets
,
unsigned
int
count
,
BOOL
is_rtl
,
float
const
*
advances
,
DWRITE_GLYPH_OFFSET
const
*
offsets
,
unsigned
int
count
,
BOOL
is_rtl
,
IDWriteGeometrySink
*
sink
)
DECLSPEC_HIDDEN
;
IDWriteGeometrySink
*
sink
)
DECLSPEC_HIDDEN
;
...
...
dlls/dwrite/font.c
View file @
fec78e62
...
@@ -955,7 +955,7 @@ static BOOL WINAPI dwritefontface1_IsMonospacedFont(IDWriteFontFace5 *iface)
...
@@ -955,7 +955,7 @@ static BOOL WINAPI dwritefontface1_IsMonospacedFont(IDWriteFontFace5 *iface)
TRACE
(
"%p.
\n
"
,
iface
);
TRACE
(
"%p.
\n
"
,
iface
);
return
!!
(
fontface
->
flags
&
FONT
FACE
_IS_MONOSPACED
);
return
!!
(
fontface
->
flags
&
FONT_IS_MONOSPACED
);
}
}
static
int
fontface_get_design_advance
(
struct
dwrite_fontface
*
fontface
,
DWRITE_MEASURING_MODE
measuring_mode
,
static
int
fontface_get_design_advance
(
struct
dwrite_fontface
*
fontface
,
DWRITE_MEASURING_MODE
measuring_mode
,
...
@@ -1765,19 +1765,10 @@ static HRESULT WINAPI dwritefont1_GetUnicodeRanges(IDWriteFont3 *iface, UINT32 m
...
@@ -1765,19 +1765,10 @@ static HRESULT WINAPI dwritefont1_GetUnicodeRanges(IDWriteFont3 *iface, UINT32 m
static
BOOL
WINAPI
dwritefont1_IsMonospacedFont
(
IDWriteFont3
*
iface
)
static
BOOL
WINAPI
dwritefont1_IsMonospacedFont
(
IDWriteFont3
*
iface
)
{
{
struct
dwrite_font
*
font
=
impl_from_IDWriteFont3
(
iface
);
struct
dwrite_font
*
font
=
impl_from_IDWriteFont3
(
iface
);
IDWriteFontFace5
*
fontface
;
HRESULT
hr
;
BOOL
ret
;
TRACE
(
"%p.
\n
"
,
iface
);
TRACE
(
"%p.
\n
"
,
iface
);
hr
=
get_fontface_from_font
(
font
,
&
fontface
);
return
!!
(
font
->
data
->
flags
&
FONT_IS_MONOSPACED
);
if
(
FAILED
(
hr
))
return
FALSE
;
ret
=
IDWriteFontFace5_IsMonospacedFont
(
fontface
);
IDWriteFontFace5_Release
(
fontface
);
return
ret
;
}
}
static
BOOL
WINAPI
dwritefont2_IsColorFont
(
IDWriteFont3
*
iface
)
static
BOOL
WINAPI
dwritefont2_IsColorFont
(
IDWriteFont3
*
iface
)
...
@@ -4690,8 +4681,6 @@ HRESULT create_fontface(const struct fontface_desc *desc, struct list *cached_li
...
@@ -4690,8 +4681,6 @@ HRESULT create_fontface(const struct fontface_desc *desc, struct list *cached_li
fontface
->
charmap
=
freetype_get_charmap_index
(
&
fontface
->
IDWriteFontFace5_iface
);
fontface
->
charmap
=
freetype_get_charmap_index
(
&
fontface
->
IDWriteFontFace5_iface
);
if
(
freetype_has_kerning_pairs
(
&
fontface
->
IDWriteFontFace5_iface
))
if
(
freetype_has_kerning_pairs
(
&
fontface
->
IDWriteFontFace5_iface
))
fontface
->
flags
|=
FONTFACE_HAS_KERNING_PAIRS
;
fontface
->
flags
|=
FONTFACE_HAS_KERNING_PAIRS
;
if
(
freetype_is_monospaced
(
&
fontface
->
IDWriteFontFace5_iface
))
fontface
->
flags
|=
FONTFACE_IS_MONOSPACED
;
if
(
opentype_has_vertical_variants
(
&
fontface
->
IDWriteFontFace5_iface
))
if
(
opentype_has_vertical_variants
(
&
fontface
->
IDWriteFontFace5_iface
))
fontface
->
flags
|=
FONTFACE_HAS_VERTICAL_VARIANTS
;
fontface
->
flags
|=
FONTFACE_HAS_VERTICAL_VARIANTS
;
fontface
->
glyph_image_formats
=
opentype_get_glyph_image_formats
(
&
fontface
->
IDWriteFontFace5_iface
);
fontface
->
glyph_image_formats
=
opentype_get_glyph_image_formats
(
&
fontface
->
IDWriteFontFace5_iface
);
...
@@ -4709,8 +4698,7 @@ HRESULT create_fontface(const struct fontface_desc *desc, struct list *cached_li
...
@@ -4709,8 +4698,7 @@ HRESULT create_fontface(const struct fontface_desc *desc, struct list *cached_li
fontface
->
panose
=
desc
->
font_data
->
panose
;
fontface
->
panose
=
desc
->
font_data
->
panose
;
fontface
->
fontsig
=
desc
->
font_data
->
fontsig
;
fontface
->
fontsig
=
desc
->
font_data
->
fontsig
;
fontface
->
lf
=
desc
->
font_data
->
lf
;
fontface
->
lf
=
desc
->
font_data
->
lf
;
if
(
desc
->
font_data
->
flags
&
FONT_IS_SYMBOL
)
fontface
->
flags
|=
desc
->
font_data
->
flags
&
(
FONT_IS_SYMBOL
|
FONT_IS_MONOSPACED
);
fontface
->
flags
|=
FONT_IS_SYMBOL
;
}
}
else
else
{
{
...
@@ -4730,8 +4718,7 @@ HRESULT create_fontface(const struct fontface_desc *desc, struct list *cached_li
...
@@ -4730,8 +4718,7 @@ HRESULT create_fontface(const struct fontface_desc *desc, struct list *cached_li
fontface
->
panose
=
data
->
panose
;
fontface
->
panose
=
data
->
panose
;
fontface
->
fontsig
=
data
->
fontsig
;
fontface
->
fontsig
=
data
->
fontsig
;
fontface
->
lf
=
data
->
lf
;
fontface
->
lf
=
data
->
lf
;
if
(
data
->
flags
&
FONT_IS_SYMBOL
)
fontface
->
flags
|=
data
->
flags
&
(
FONT_IS_SYMBOL
|
FONT_IS_MONOSPACED
);
fontface
->
flags
|=
FONT_IS_SYMBOL
;
IDWriteLocalizedStrings_Release
(
names
);
IDWriteLocalizedStrings_Release
(
names
);
release_font_data
(
data
);
release_font_data
(
data
);
...
...
dlls/dwrite/freetype.c
View file @
fec78e62
...
@@ -303,19 +303,6 @@ HRESULT freetype_get_design_glyph_metrics(struct dwrite_fontface *fontface, UINT
...
@@ -303,19 +303,6 @@ HRESULT freetype_get_design_glyph_metrics(struct dwrite_fontface *fontface, UINT
return
S_OK
;
return
S_OK
;
}
}
BOOL
freetype_is_monospaced
(
IDWriteFontFace5
*
fontface
)
{
BOOL
is_monospaced
=
FALSE
;
FT_Face
face
;
EnterCriticalSection
(
&
freetype_cs
);
if
(
pFTC_Manager_LookupFace
(
cache_manager
,
fontface
,
&
face
)
==
0
)
is_monospaced
=
!!
FT_IS_FIXED_WIDTH
(
face
);
LeaveCriticalSection
(
&
freetype_cs
);
return
is_monospaced
;
}
struct
decompose_context
{
struct
decompose_context
{
IDWriteGeometrySink
*
sink
;
IDWriteGeometrySink
*
sink
;
D2D1_POINT_2F
offset
;
D2D1_POINT_2F
offset
;
...
@@ -925,11 +912,6 @@ HRESULT freetype_get_design_glyph_metrics(struct dwrite_fontface *fontface, UINT
...
@@ -925,11 +912,6 @@ HRESULT freetype_get_design_glyph_metrics(struct dwrite_fontface *fontface, UINT
return
E_NOTIMPL
;
return
E_NOTIMPL
;
}
}
BOOL
freetype_is_monospaced
(
IDWriteFontFace5
*
fontface
)
{
return
FALSE
;
}
HRESULT
freetype_get_glyphrun_outline
(
IDWriteFontFace5
*
fontface
,
float
emSize
,
UINT16
const
*
glyphs
,
HRESULT
freetype_get_glyphrun_outline
(
IDWriteFontFace5
*
fontface
,
float
emSize
,
UINT16
const
*
glyphs
,
float
const
*
advances
,
DWRITE_GLYPH_OFFSET
const
*
offsets
,
unsigned
int
count
,
BOOL
is_rtl
,
float
const
*
advances
,
DWRITE_GLYPH_OFFSET
const
*
offsets
,
unsigned
int
count
,
BOOL
is_rtl
,
IDWriteGeometrySink
*
sink
)
IDWriteGeometrySink
*
sink
)
...
...
dlls/dwrite/opentype.c
View file @
fec78e62
...
@@ -1716,9 +1716,9 @@ void opentype_get_font_metrics(struct file_stream_desc *stream_desc, DWRITE_FONT
...
@@ -1716,9 +1716,9 @@ void opentype_get_font_metrics(struct file_stream_desc *stream_desc, DWRITE_FONT
void
opentype_get_font_properties
(
struct
file_stream_desc
*
stream_desc
,
struct
dwrite_font_props
*
props
)
void
opentype_get_font_properties
(
struct
file_stream_desc
*
stream_desc
,
struct
dwrite_font_props
*
props
)
{
{
struct
dwrite_fonttable
os2
,
head
;
struct
dwrite_fonttable
os2
,
head
;
BOOL
is_symbol
,
is_monospaced
;
const
TT_OS2_V2
*
tt_os2
;
const
TT_OS2_V2
*
tt_os2
;
const
TT_HEAD
*
tt_head
;
const
TT_HEAD
*
tt_head
;
BOOL
is_symbol
;
opentype_get_font_table
(
stream_desc
,
MS_OS2_TAG
,
&
os2
);
opentype_get_font_table
(
stream_desc
,
MS_OS2_TAG
,
&
os2
);
opentype_get_font_table
(
stream_desc
,
MS_HEAD_TAG
,
&
head
);
opentype_get_font_table
(
stream_desc
,
MS_HEAD_TAG
,
&
head
);
...
@@ -1733,6 +1733,7 @@ void opentype_get_font_properties(struct file_stream_desc *stream_desc, struct d
...
@@ -1733,6 +1733,7 @@ void opentype_get_font_properties(struct file_stream_desc *stream_desc, struct d
memset
(
&
props
->
panose
,
0
,
sizeof
(
props
->
panose
));
memset
(
&
props
->
panose
,
0
,
sizeof
(
props
->
panose
));
memset
(
&
props
->
fontsig
,
0
,
sizeof
(
props
->
fontsig
));
memset
(
&
props
->
fontsig
,
0
,
sizeof
(
props
->
fontsig
));
memset
(
&
props
->
lf
,
0
,
sizeof
(
props
->
lf
));
memset
(
&
props
->
lf
,
0
,
sizeof
(
props
->
lf
));
props
->
flags
=
0
;
/* DWRITE_FONT_STRETCH enumeration values directly match font data values */
/* DWRITE_FONT_STRETCH enumeration values directly match font data values */
if
(
tt_os2
)
if
(
tt_os2
)
...
@@ -1823,6 +1824,22 @@ void opentype_get_font_properties(struct file_stream_desc *stream_desc, struct d
...
@@ -1823,6 +1824,22 @@ void opentype_get_font_properties(struct file_stream_desc *stream_desc, struct d
if
(
is_symbol
)
if
(
is_symbol
)
props
->
flags
|=
FONT_IS_SYMBOL
;
props
->
flags
|=
FONT_IS_SYMBOL
;
if
(
!
(
is_monospaced
=
props
->
panose
.
text
.
proportion
==
DWRITE_PANOSE_PROPORTION_MONOSPACED
))
{
struct
dwrite_fonttable
post
;
opentype_get_font_table
(
stream_desc
,
MS_POST_TAG
,
&
post
);
if
(
post
.
data
)
{
is_monospaced
=
!!
table_read_dword
(
&
post
,
FIELD_OFFSET
(
TT_POST
,
fixed_pitch
));
IDWriteFontFileStream_ReleaseFileFragment
(
stream_desc
->
stream
,
post
.
context
);
}
}
if
(
is_monospaced
)
props
->
flags
|=
FONT_IS_MONOSPACED
;
TRACE
(
"stretch=%d, weight=%d, style %d
\n
"
,
props
->
stretch
,
props
->
weight
,
props
->
style
);
TRACE
(
"stretch=%d, weight=%d, style %d
\n
"
,
props
->
stretch
,
props
->
weight
,
props
->
style
);
if
(
os2
.
data
)
if
(
os2
.
data
)
...
...
dlls/dwrite/tests/font.c
View file @
fec78e62
...
@@ -4990,9 +4990,7 @@ static void test_IsMonospacedFont(void)
...
@@ -4990,9 +4990,7 @@ static void test_IsMonospacedFont(void)
IDWriteFont1_GetPanose
(
font1
,
&
panose
);
IDWriteFont1_GetPanose
(
font1
,
&
panose
);
/* FIXME: failures disabled on Wine for now */
is_monospaced_expected
=
get_expected_is_monospaced
(
fontface1
,
&
panose
);
is_monospaced_expected
=
get_expected_is_monospaced
(
fontface1
,
&
panose
);
todo_wine_if
(
is_monospaced_expected
!=
is_monospaced_face
)
ok
(
is_monospaced_expected
==
is_monospaced_face
,
"Unexpected is_monospaced flag %d for %s, font %d.
\n
"
,
ok
(
is_monospaced_expected
==
is_monospaced_face
,
"Unexpected is_monospaced flag %d for %s, font %d.
\n
"
,
is_monospaced_face
,
wine_dbgstr_w
(
nameW
),
j
);
is_monospaced_face
,
wine_dbgstr_w
(
nameW
),
j
);
...
...
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