dwrite: Use OS/2 table data to set font style, make it preferable.
This commit is contained in:
parent
c7d1b91154
commit
4b4674bea8
@ -131,6 +131,12 @@ typedef struct
|
|||||||
SHORT glyphdata_format;
|
SHORT glyphdata_format;
|
||||||
} TT_HEAD;
|
} TT_HEAD;
|
||||||
|
|
||||||
|
enum TT_HEAD_MACSTYLE
|
||||||
|
{
|
||||||
|
TT_HEAD_MACSTYLE_BOLD = 1 << 0,
|
||||||
|
TT_HEAD_MACSTYLE_ITALIC = 1 << 1,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
ULONG Version;
|
ULONG Version;
|
||||||
@ -1028,21 +1034,27 @@ void opentype_get_font_properties(IDWriteFontFileStream *stream, DWRITE_FONT_FAC
|
|||||||
|
|
||||||
/* 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) {
|
||||||
|
USHORT version = GET_BE_WORD(tt_os2->version);
|
||||||
|
USHORT fsSelection = GET_BE_WORD(tt_os2->fsSelection);
|
||||||
|
|
||||||
if (GET_BE_WORD(tt_os2->usWidthClass) <= DWRITE_FONT_STRETCH_ULTRA_EXPANDED)
|
if (GET_BE_WORD(tt_os2->usWidthClass) <= DWRITE_FONT_STRETCH_ULTRA_EXPANDED)
|
||||||
props->stretch = GET_BE_WORD(tt_os2->usWidthClass);
|
props->stretch = GET_BE_WORD(tt_os2->usWidthClass);
|
||||||
|
|
||||||
props->weight = GET_BE_WORD(tt_os2->usWeightClass);
|
props->weight = GET_BE_WORD(tt_os2->usWeightClass);
|
||||||
|
if (version >= 4 && (fsSelection & OS2_FSSELECTION_OBLIQUE))
|
||||||
|
props->style = DWRITE_FONT_STYLE_OBLIQUE;
|
||||||
|
else if (fsSelection & OS2_FSSELECTION_ITALIC)
|
||||||
|
props->style = DWRITE_FONT_STYLE_ITALIC;
|
||||||
memcpy(&props->panose, &tt_os2->panose, sizeof(props->panose));
|
memcpy(&props->panose, &tt_os2->panose, sizeof(props->panose));
|
||||||
|
|
||||||
TRACE("stretch=%d, weight=%d\n", props->stretch, props->weight);
|
|
||||||
}
|
}
|
||||||
|
else if (tt_head) {
|
||||||
if (tt_head) {
|
|
||||||
USHORT macStyle = GET_BE_WORD(tt_head->macStyle);
|
USHORT macStyle = GET_BE_WORD(tt_head->macStyle);
|
||||||
if (macStyle & 0x0002)
|
if (macStyle & TT_HEAD_MACSTYLE_ITALIC)
|
||||||
props->style = DWRITE_FONT_STYLE_ITALIC;
|
props->style = DWRITE_FONT_STYLE_ITALIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRACE("stretch=%d, weight=%d, style %d\n", props->stretch, props->weight, props->style);
|
||||||
|
|
||||||
if (tt_os2)
|
if (tt_os2)
|
||||||
IDWriteFontFileStream_ReleaseFileFragment(stream, os2_context);
|
IDWriteFontFileStream_ReleaseFileFragment(stream, os2_context);
|
||||||
if (tt_head)
|
if (tt_head)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user