[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