Bug 515484: Pango on Windows is missing non-TrueType font support Patch
authorTor Lillqvist <tml@novell.com>
Wed, 13 Feb 2008 23:29:12 +0000 (23:29 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Wed, 13 Feb 2008 23:29:12 +0000 (23:29 +0000)
2008-02-14  Tor Lillqvist  <tml@novell.com>

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
pango/pangowin32-fontmap.c

index e511e7d..dcce2e8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-02-14  Tor Lillqvist  <tml@novell.com>
+
+       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  <sven@gimp.org>
 
        * pango/pangoft2.c: indentation.
index 1df2475..da13443 100644 (file)
@@ -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;
 }