X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Ffont.c;h=a32bf7ce0a5ae995f3c3bcf567d22917d2c41289;hb=49b14e7bf5eb6256b69e6da66fbf7a0bca383038;hp=166b9abb8182bafc8c782ca2f8a71931bdcff59e;hpb=c4385c098fb5547dd80b06636c946676f274d396;p=chaz%2Fopenbox diff --git a/render/font.c b/render/font.c index 166b9abb..a32bf7ce 100644 --- a/render/font.c +++ b/render/font.c @@ -37,7 +37,8 @@ static void measure_font(const RrInstance *inst, RrFont *f) static PangoLanguage *lang = NULL; if (lang == NULL) { -#if PANGO_VERSION_CHECK(1,16,0) +#if PANGO_VERSION_MAJOR > 1 || \ + (PANGO_VERSION_MAJOR == 1 && PANGO_VERSION_MINOR >= 16) lang = pango_language_get_default(); #else gchar *locale, *p; @@ -108,7 +109,6 @@ RrFont *RrFontOpen(const RrInstance *inst, const gchar *name, gint size, /* setup the layout */ pango_layout_set_font_description(out->layout, out->font_desc); pango_layout_set_single_paragraph_mode(out->layout, TRUE); - pango_layout_set_ellipsize(out->layout, PANGO_ELLIPSIZE_MIDDLE); /* get the ascent and descent */ measure_font(inst, out); @@ -145,7 +145,19 @@ static void font_measure_full(const RrFont *f, const gchar *str, pango_layout_set_text(f->layout, str, -1); pango_layout_set_width(f->layout, -1); - pango_layout_get_pixel_extents(f->layout, NULL, &rect); + + /* pango_layout_get_pixel_extents lies! this is the right way to get the + size of the text's area */ + pango_layout_get_extents(f->layout, NULL, &rect); +#if PANGO_VERSION_MAJOR > 1 || \ + (PANGO_VERSION_MAJOR == 1 && PANGO_VERSION_MINOR >= 16) + /* pass the logical rect as the ink rect, this is on purpose so we get the + full area for the text */ + pango_extents_to_pixels(&rect, NULL); +#else + rect.width = (rect.width + PANGO_SCALE - 1) / PANGO_SCALE; + rect.height = (rect.height + PANGO_SCALE - 1) / PANGO_SCALE; +#endif *x = rect.width + ABS(shadow_x) + 4 /* we put a 2 px edge on each side */; *y = rect.height + ABS(shadow_y); } @@ -194,6 +206,7 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area) gint mw; PangoRectangle rect; PangoAttrList *attrlist; + PangoEllipsizeMode ell; /* center the text vertically We do this centering based on the 'baseline' since different fonts have @@ -207,8 +220,24 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area) w = area->width - 4; h = area->height; + switch (t->ellipsize) { + case RR_ELLIPSIZE_NONE: + ell = PANGO_ELLIPSIZE_NONE; + break; + case RR_ELLIPSIZE_START: + ell = PANGO_ELLIPSIZE_START; + break; + case RR_ELLIPSIZE_MIDDLE: + ell = PANGO_ELLIPSIZE_MIDDLE; + break; + case RR_ELLIPSIZE_END: + ell = PANGO_ELLIPSIZE_END; + break; + } + pango_layout_set_text(t->font->layout, t->string, -1); pango_layout_set_width(t->font->layout, w * PANGO_SCALE); + pango_layout_set_ellipsize(t->font->layout, ell); /* * * end of setting up the layout * * */