From fada06c4c9b26b78307dbaa7b7f25732f1faaab1 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Wed, 13 Feb 2008 23:29:12 +0000 Subject: [PATCH] Bug 515484: Pango on Windows is missing non-TrueType font support Patch 2008-02-14 Tor Lillqvist Bug 515484: Pango on Windows is missing non-TrueType font support Patch from Adrian Johnson. * pango/pangowin32-fontmap.c (pango_win32_enum_proc): Accept also OpenType/PS fonts. Interpret the metrics parameter as a NEWTEXTMETRICW struct and check the ntmFlags field. svn path=/trunk/; revision=2566 --- ChangeLog | 10 ++++++++++ pango/pangowin32-fontmap.c | 30 ++++++++++++++++++------------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index e511e7d..dcce2e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-02-14 Tor Lillqvist + + Bug 515484 – Pango on Windows is missing non-TrueType + font support + Patch from Adrian Johnson. + + * pango/pangowin32-fontmap.c (pango_win32_enum_proc): Accept also + OpenType/PS fonts. Interpret the metrics parameter as a + NEWTEXTMETRICW struct and check the ntmFlags field. + 2008-02-13 Sven Neumann * pango/pangoft2.c: indentation. diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c index 1df2475..da13443 100644 --- a/pango/pangowin32-fontmap.c +++ b/pango/pangowin32-fontmap.c @@ -53,6 +53,10 @@ struct _PangoWin32SizeInfo GSList *logfontws; }; +#if !defined(NTM_PS_OPENTYPE) +# define NTM_PS_OPENTYPE 0x20000 +#endif + #define PANGO_WIN32_TYPE_FAMILY (pango_win32_family_get_type ()) #define PANGO_WIN32_FAMILY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_WIN32_TYPE_FAMILY, PangoWin32Family)) #define PANGO_WIN32_IS_FAMILY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_WIN32_TYPE_FAMILY)) @@ -181,23 +185,25 @@ pango_win32_inner_enum_proc (LOGFONTW *lfp, } static int CALLBACK -pango_win32_enum_proc (LOGFONTW *lfp, - TEXTMETRICW *metrics, - DWORD fontType, - LPARAM lParam) +pango_win32_enum_proc (LOGFONTW *lfp, + NEWTEXTMETRICW *metrics, + DWORD fontType, + LPARAM lParam) { LOGFONTW lf; - PING(("%S", lfp->lfFaceName)); - - if (fontType != TRUETYPE_FONTTYPE) - return 1; + PING(("%S: %lu %lx", lfp->lfFaceName, fontType, metrics->ntmFlags)); - lf = *lfp; + if (fontType == TRUETYPE_FONTTYPE || + (_pango_win32_os_version_info.dwMajorVersion >= 5 && + (metrics->ntmFlags & NTM_PS_OPENTYPE))) + { + lf = *lfp; - EnumFontFamiliesExW (_pango_win32_hdc, &lf, - (FONTENUMPROCW) pango_win32_inner_enum_proc, - lParam, 0); + EnumFontFamiliesExW (_pango_win32_hdc, &lf, + (FONTENUMPROCW) pango_win32_inner_enum_proc, + lParam, 0); + } return 1; } -- 2.7.4