Nikolay Sivov : dwrite: Use OS/2 table data to set font style, make it preferable.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Aug 12 09:17:54 CDT 2015
Module: wine
Branch: master
Commit: 4b4674bea84817d624bf34fb8efd010ec72e3775
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4b4674bea84817d624bf34fb8efd010ec72e3775
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Aug 10 13:49:52 2015 +0300
dwrite: Use OS/2 table data to set font style, make it preferable.
---
dlls/dwrite/opentype.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/dlls/dwrite/opentype.c b/dlls/dwrite/opentype.c
index f8c66fc..852ad96 100644
--- a/dlls/dwrite/opentype.c
+++ b/dlls/dwrite/opentype.c
@@ -131,6 +131,12 @@ typedef struct
SHORT glyphdata_format;
} TT_HEAD;
+enum TT_HEAD_MACSTYLE
+{
+ TT_HEAD_MACSTYLE_BOLD = 1 << 0,
+ TT_HEAD_MACSTYLE_ITALIC = 1 << 1,
+};
+
typedef struct
{
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 */
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)
props->stretch = GET_BE_WORD(tt_os2->usWidthClass);
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));
-
- TRACE("stretch=%d, weight=%d\n", props->stretch, props->weight);
}
-
- if (tt_head) {
+ else if (tt_head) {
USHORT macStyle = GET_BE_WORD(tt_head->macStyle);
- if (macStyle & 0x0002)
+ if (macStyle & TT_HEAD_MACSTYLE_ITALIC)
props->style = DWRITE_FONT_STYLE_ITALIC;
}
+ TRACE("stretch=%d, weight=%d, style %d\n", props->stretch, props->weight, props->style);
+
if (tt_os2)
IDWriteFontFileStream_ReleaseFileFragment(stream, os2_context);
if (tt_head)
More information about the wine-cvs
mailing list