[PATCH 2/5] dwrite: Use OS/2 table data to set font style, make it preferable

Nikolay Sivov nsivov at codeweavers.com
Mon Aug 10 05:49:52 CDT 2015


---

-------------- next part --------------
>From 9fdbb15a34b529f8e35594edb25e297b91d2a3d8 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri, 7 Aug 2015 15:23:19 +0300
Subject: [PATCH 2/5] 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)
-- 
2.1.4



More information about the wine-patches mailing list