PangoContext* wxApp::GetPangoContext() { static PangoContext *s_pangoContext = NULL; if ( !s_pangoContext ) { Display *dpy = wxGlobalDisplay(); #ifdef HAVE_PANGO_XFT int xscreen = DefaultScreen(dpy); static int use_xft = -1; if (use_xft == -1) { wxString val = wxGetenv( L"GDK_USE_XFT" ); use_xft = val == L"1"; } if (use_xft) s_pangoContext = pango_xft_get_context(dpy, xscreen); else #endif // HAVE_PANGO_XFT s_pangoContext = pango_x_get_context(dpy); if (!PANGO_IS_CONTEXT(s_pangoContext)) { wxLogError( wxT("No pango context.") ); } } return s_pangoContext; }
static int _pango_xft_Load(TextState * ts, const char *name) { FontCtxPangoXft *fdc; PangoFontDescription *font; PangoFontMask flags; if (!_pango_ctx) _pango_ctx = pango_xft_get_context(disp, Dpy.screen); if (!_pango_ctx) return -1; font = pango_font_description_from_string(name); if (!font) return -1; flags = pango_font_description_get_set_fields(font); if ((flags & PANGO_FONT_MASK_FAMILY) == 0) pango_font_description_set_family(font, "sans"); if ((flags & PANGO_FONT_MASK_SIZE) == 0) pango_font_description_set_size(font, 10 * PANGO_SCALE); fdc = EMALLOC(FontCtxPangoXft, 1); if (!fdc) return -1; fdc->font = font; ts->fdc = fdc; ts->need_utf8 = 1; ts->type = FONT_TYPE_PANGO_XFT; ts->ops = &FontOps_pango; return 0; }
static bool pango_load (Lisp_Font *f) { PangoLanguage *language; PangoFontDescription *fontdesc; PangoFont *font; PangoFontMetrics *metrics; if (pango_context) { language = pango_context_get_language (pango_context); } else { char *langname, *p; #ifdef HAVE_PANGO_XFT pango_context = pango_xft_get_context (dpy, screen_num); #endif langname = g_strdup (setlocale (LC_CTYPE, NULL)); p = strchr (langname, '.'); if (p) *p = 0; p = strchr (langname, '@'); if (p) *p = 0; language = pango_language_from_string (langname); pango_context_set_language (pango_context, language); g_free (langname); } fontdesc = pango_font_description_from_string (rep_STR (f->name)); if (!pango_font_description_get_family (fontdesc)) pango_font_description_set_family (fontdesc, "Sans"); if (pango_font_description_get_size (fontdesc) <= 0) pango_font_description_set_size (fontdesc, 12 * PANGO_SCALE); pango_context_set_font_description (pango_context, fontdesc); font = pango_context_load_font (pango_context, fontdesc); if (!font) { pango_font_description_free(fontdesc); return FALSE; } metrics = pango_font_get_metrics (font, language); f->ascent = metrics->ascent / PANGO_SCALE; f->descent = metrics->descent / PANGO_SCALE; pango_font_metrics_unref (metrics); f->font = fontdesc; /* We save the font description, not the font itself! That's because it seems we can't recover it perfectly later, and the layout routines want a description */ return TRUE; }
RrInstance* RrInstanceNew (Display *display, gint screen) { definst = g_slice_new(RrInstance); definst->display = display; definst->screen = screen; definst->depth = DefaultDepth(display, screen); definst->visual = DefaultVisual(display, screen); definst->colormap = DefaultColormap(display, screen); definst->pango = pango_xft_get_context(display, screen); definst->pseudo_colors = NULL; definst->color_hash = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, dest); switch (definst->visual->class) { case TrueColor: RrTrueColorSetup(definst); break; case PseudoColor: case StaticColor: case GrayScale: case StaticGray: RrPseudoColorSetup(definst); break; default: g_critical("Unsupported visual class"); g_free (definst); return definst = NULL; } return definst; }
void initfont(DC *dc, const char *fontstr) { dc->pgc = pango_xft_get_context(dc->dpy, screen); dc->pfd = pango_font_description_from_string(fontstr); dc->plo = pango_layout_new(dc->pgc); pango_layout_set_font_description(dc->plo, dc->pfd); pango_layout_set_wrap(dc->plo, PANGO_WRAP_WORD_CHAR); pango_layout_set_alignment(dc->plo, PANGO_ALIGN_LEFT); }
PangoContext* wxApp::GetPangoContext() { static PangoContext *s_pangoContext = NULL; if ( !s_pangoContext ) { Display *dpy = wxGlobalDisplay(); int xscreen = DefaultScreen(dpy); s_pangoContext = pango_xft_get_context(dpy, xscreen); if (!PANGO_IS_CONTEXT(s_pangoContext)) { wxLogError( wxT("No pango context.") ); } } return s_pangoContext; }
void initfont(DC *dc, const char *fontstr) { PangoFontMetrics *metrics; dc->pgc = pango_xft_get_context(dc->dpy, 0); dc->pfd = pango_font_description_from_string(fontstr); if(pango_font_description_get_size(dc->pfd) == 0) pango_font_description_set_size(dc->pfd, 12 * PANGO_SCALE); metrics = pango_context_get_metrics(dc->pgc, dc->pfd, pango_language_from_string("")); dc->font.ascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE; dc->font.descent = pango_font_metrics_get_descent(metrics) / PANGO_SCALE; dc->font.height = dc->font.ascent + dc->font.descent; pango_font_metrics_unref(metrics); dc->plo = pango_layout_new(dc->pgc); pango_layout_set_font_description(dc->plo, dc->pfd); }
int main(int argc, char *argv[]) { pango_xft_get_context(NULL, 0); return 0; }