all repos — openbox @ 0417d1226c7a523cd4420195d86dd744f514b2fe

openbox fork - make it a bit more like ryudo

RrFontHeight is meaningless with pango, it will be different for every string drawn, so ask pango for the height after we tell it the text to draw. Should make text be centered vertically better when mixing fonts. Still moves a pixel down for some strings for me, but it was several before. If anyone knows more about this please mail or bugzilla etc. Also fix an indenting error.
Mikael Magnusson mikachu@comhem.se
commit

0417d1226c7a523cd4420195d86dd744f514b2fe

parent

07b340385045e93ed6c534fb8f4b0de92449da1f

1 files changed, 11 insertions(+), 34 deletions(-)

jump to
M render/font.crender/font.c

@@ -217,36 +217,8 @@ }

gint RrFontHeight(const RrFont *f) { -#ifndef USE_PANGO return f->xftfont->ascent + f->xftfont->descent + (f->shadow ? f->offset : 0); -#else /* USE_PANGO */ - /* - PangoContext *context = pango_context_new (); - - PangoFontMetrics *metrics = pango_context_get_metrics(context, f->pango_font, NULL); - - gint result = pango_font_metrics_get_ascent (metrics) + - pango_font_metrics_get_descent(metrics) + - (f->shadow ? f->offset : 0); - - pango_font_metrics_unref(metrics); - g_object_unref(context); - return result; - */ -#ifndef ANNOYING_QUESTION -// Obviously you either remove this or pass -DANNOYING_QUESTION to actually -// compile the code. -#error XXX Does anyone have any idea how the above is supposed to work? -#else -#warning XXX Using very ugly workaround in the meantime. -#endif - - gint x, y; - font_measure_full(f, " ", &x, &y); - return y; - -#endif /* USE_PANGO */ } gint RrFontMaxCharWidth(const RrFont *f)

@@ -266,14 +238,17 @@ gboolean shortened = FALSE;

#else PangoLayout *pl; PangoContext *context; + PangoRectangle rect; context = pango_xft_get_context (RrDisplay(t->font->inst), RrScreen(t->font->inst)); pl = pango_layout_new (context); #endif /* USE_PANGO */ /* center vertically */ +#ifndef USE_PANGO /* We have to wait for the text string with pango */ y = area->y + (area->height - RrFontHeight(t->font)) / 2; +#endif /* the +2 and -4 leave a small blank edge on the sides */ x = area->x + 2; w = area->width - 4;

@@ -319,6 +294,10 @@ pango_layout_set_single_paragraph_mode(pl, TRUE);

pango_layout_set_width(pl, w * PANGO_SCALE); pango_layout_set_ellipsize(pl, PANGO_ELLIPSIZE_MIDDLE); pango_layout_set_alignment(pl, (PangoAlignment)(t->justify)); + pango_layout_get_pixel_extents(pl, NULL, &rect); + y = area->y + + (area->height - rect.height) / 2; + #endif /* USE_PANGO */ if (t->font->shadow) {

@@ -336,18 +315,16 @@ c.color.blue = 0xffff;

c.color.alpha = 0xffff * -t->font->tint / 100; c.pixel = WhitePixel(RrDisplay(t->font->inst), RrScreen(t->font->inst)); -#ifndef USE_PANGO } +#ifndef USE_PANGO XftDrawStringUtf8(d, &c, t->font->xftfont, x + t->font->offset, t->font->xftfont->ascent + y + t->font->offset, (FcChar8*)text->str, l); - } #else /* USE_PANGO */ - } - pango_xft_render_layout(d, &c, pl, (x + t->font->offset) * PANGO_SCALE, - (y + t->font->offset) * PANGO_SCALE); + pango_xft_render_layout(d, &c, pl, (x + t->font->offset) * PANGO_SCALE, + (y + t->font->offset) * PANGO_SCALE); +#endif /* USE_PANGO */ } -#endif /* USE_PANGO */ c.color.red = t->color->r | t->color->r << 8; c.color.green = t->color->g | t->color->g << 8; c.color.blue = t->color->b | t->color->b << 8;