I've had to implement Unicode font drawing and settled on Pango for X11 and HarfBuzz for OpenGL (Embedded and Desktop).
Initial setup:
// fallback
pango_xft_set_default_substitute (m_display, m_screen, default_substitute,
NULL, NULL);
m_fontMap = pango_xft_get_font_map(display, screen);
#if PANGO_VERSION_CHECK(1,22,0)
m_context = pango_font_map_create_context (m_fontMap);
#else
m_context = pango_xft_get_context(m_display, m_screen);
#endif
Font Fallback:
#define DEFAULT_DPI 72
#define DEFAULT_HINTING HINT_AUTO
static void default_substitute (FcPattern *pattern, gpointer data)
{
FcPatternDel (pattern, FC_DPI);
FcPatternAddInteger (pattern, FC_DPI, DEFAULT_DPI);
FcPatternDel (pattern, FC_HINTING);
FcPatternAddBool (pattern, FC_HINTING, false);
FcPatternDel (pattern, FC_AUTOHINT);
FcPatternAddBool (pattern, FC_AUTOHINT, true);
}
Shutdown:
if (m_context)
g_object_unref(m_context);
pango_xft_shutdown_display(m_display, m_screen);
- Pango is not thread safe (at least my experience shows that it is not).
- Xft is not thread safe.
Initial setup:
// fallback
pango_xft_set_default_substitute (m_display, m_screen, default_substitute,
NULL, NULL);
m_fontMap = pango_xft_get_font_map(display, screen);
#if PANGO_VERSION_CHECK(1,22,0)
m_context = pango_font_map_create_context (m_fontMap);
#else
m_context = pango_xft_get_context(m_display, m_screen);
#endif
Font Fallback:
#define DEFAULT_DPI 72
#define DEFAULT_HINTING HINT_AUTO
static void default_substitute (FcPattern *pattern, gpointer data)
{
FcPatternDel (pattern, FC_DPI);
FcPatternAddInteger (pattern, FC_DPI, DEFAULT_DPI);
FcPatternDel (pattern, FC_HINTING);
FcPatternAddBool (pattern, FC_HINTING, false);
FcPatternDel (pattern, FC_AUTOHINT);
FcPatternAddBool (pattern, FC_AUTOHINT, true);
}
Shutdown:
if (m_context)
g_object_unref(m_context);
pango_xft_shutdown_display(m_display, m_screen);
Comments
Post a Comment