diff options
Diffstat (limited to 'pango')
-rw-r--r-- | pango/pangowin32-fontcache.c | 33 | ||||
-rw-r--r-- | pango/pangowin32-private.h | 1 | ||||
-rw-r--r-- | pango/pangowin32.c | 10 | ||||
-rw-r--r-- | pango/pangowin32.h | 2 |
4 files changed, 42 insertions, 4 deletions
diff --git a/pango/pangowin32-fontcache.c b/pango/pangowin32-fontcache.c index f05d341c..6dd87c5b 100644 --- a/pango/pangowin32-fontcache.c +++ b/pango/pangowin32-fontcache.c @@ -184,10 +184,37 @@ pango_win32_font_cache_load (PangoWin32FontCache *cache, } else { - BOOL aa; + BOOL font_smoothing; lf = *lfp; - SystemParametersInfo (SPI_GETFONTSMOOTHING, 0, &aa, 0); - lf.lfQuality = (aa ? ANTIALIASED_QUALITY : DEFAULT_QUALITY); + SystemParametersInfo (SPI_GETFONTSMOOTHING, 0, &font_smoothing, 0); + /* If on XP or better, try to use ClearType if the global system + * settings ask for it. + */ + if (font_smoothing && + (pango_win32_os_version_info.dwMajorVersion > 5 || + (pango_win32_os_version_info.dwMajorVersion == 5 && + pango_win32_os_version_info.dwMinorVersion >= 1))) + { + UINT smoothing_type; + +#ifndef SPI_GETFONTSMOOTHINGTYPE +#define SPI_GETFONTSMOOTHINGTYPE 0x200a +#endif +#ifndef FE_FONTSMOOTHINGCLEARTYPE +#define FE_FONTSMOOTHINGCLEARTYPE 2 +#endif +#ifndef CLEARTYPE_QUALITY +#define CLEARTYPE_QUALITY 5 +#endif + SystemParametersInfo (SPI_GETFONTSMOOTHINGTYPE, 0, &smoothing_type, 0); + lf.lfQuality = + (font_smoothing ? + (smoothing_type == FE_FONTSMOOTHINGCLEARTYPE ? + CLEARTYPE_QUALITY : ANTIALIASED_QUALITY) : + DEFAULT_QUALITY); + } + else + lf.lfQuality = (font_smoothing ? ANTIALIASED_QUALITY : DEFAULT_QUALITY); lf.lfCharSet = DEFAULT_CHARSET; for (tries = 0; ; tries++) { diff --git a/pango/pangowin32-private.h b/pango/pangowin32-private.h index 8e3500f2..f0d21914 100644 --- a/pango/pangowin32-private.h +++ b/pango/pangowin32-private.h @@ -119,5 +119,6 @@ void pango_win32_fontmap_cache_remove (PangoFontMap *fontmap, PangoWin32Font *xfont); extern HDC pango_win32_hdc; +extern OSVERSIONINFO pango_win32_os_version_info; #endif /* __PANGOWIN32_PRIVATE_H__ */ diff --git a/pango/pangowin32.c b/pango/pangowin32.c index 2ed7d555..ee0e14f8 100644 --- a/pango/pangowin32.c +++ b/pango/pangowin32.c @@ -40,6 +40,7 @@ #define PANGO_WIN32_FONT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_WIN32_FONT, PangoWin32FontClass)) HDC pango_win32_hdc; +OSVERSIONINFO pango_win32_os_version_info; typedef struct _PangoWin32FontClass PangoWin32FontClass; @@ -188,7 +189,14 @@ pango_win32_font_class_init (PangoWin32FontClass *class) font_class->get_metrics = pango_win32_font_get_metrics; if (pango_win32_hdc == NULL) - pango_win32_hdc = CreateDC ("DISPLAY", NULL, NULL, NULL); + { + pango_win32_hdc = CreateDC ("DISPLAY", NULL, NULL, NULL); + memset (&pango_win32_os_version_info, 0, + sizeof (pango_win32_os_version_info)); + pango_win32_os_version_info.dwOSVersionInfoSize = + sizeof (OSVERSIONINFO); + GetVersionEx (&pango_win32_os_version_info); + } } PangoWin32Font * diff --git a/pango/pangowin32.h b/pango/pangowin32.h index f060bdbb..fc5e0955 100644 --- a/pango/pangowin32.h +++ b/pango/pangowin32.h @@ -31,7 +31,9 @@ G_BEGIN_DECLS #define STRICT +#define _WIN32_WINNT 0x0501 /* To get ClearType-related macros */ #include <windows.h> +#undef STRICT #define PANGO_RENDER_TYPE_WIN32 "PangoRenderWin32" |