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