On 10.08.2015 14:40, Dmitry Timoshkov wrote:
Nikolay Sivov bunglehead@gmail.com wrote:
On 10.08.2015 14:23, Dmitry Timoshkov wrote:
Nikolay Sivov nsivov@codeweavers.com wrote:
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;
It's much better to use freetype flags for bold and italic, that way styles will match between gdi32 and dwrite. Besides I'd prefer to trust freetype instead of some handmade code which was not tested by thousands of fonts out there.
I don't think so, no. And it doesn't have to match gdi32 in that regard.
Why do you think that your handcrafted code is better than the one in freetype, which has been proven to work for thousands fonts, and why do you think that dwrite doesn't need to match gdi32 behaviour, do you have a test/prove for that?
This article should answer your questions http://blogs.msdn.com/b/text/archive/2009/04/15/introducing-the-directwrite-..., and it described logic that I'm going to use. Also keep in mind that dwrite doesn't support Type1 and FON (vector and bitmap), it only works with TTF/OTF and TTC collections of those; another thing is that there's much more to it than reading a couple of table fields to determine final font properties, that has to be handcrafted too. So using freetype for getting a couple of flags seems like too much, not to mention that it won't necessary match what we need either, I'd rather stick to documentation of how this is supposed to work.