--- src/rxvtfont.C.orig 2011-07-20 22:19:29.878012201 -0300 +++ src/rxvtfont.C 2011-07-20 22:19:33.634671723 -0300 @@ -1237,11 +1237,22 @@ FT_Face face = XftLockFace (f); +/* + * use ascent, descent and height from XftFont *f instead of FT_Face face. + * this somehow reproduces the behaviour of the line height as seen on xterm. + ascent = (face->size->metrics.ascender + 63) >> 6; descent = (-face->size->metrics.descender + 63) >> 6; height = max (ascent + descent, (face->size->metrics.height + 63) >> 6); width = 0; + */ + + ascent = f->ascent; + descent = f->descent; + height = max (ascent + descent, f->height); + width = 0; + bool scalable = face->face_flags & FT_FACE_FLAG_SCALABLE; XftUnlockFace (f); @@ -1265,6 +1276,11 @@ XGlyphInfo g; XftTextExtents16 (disp, f, &ch, 1, &g); +/* + * don't use g.width/g.height as width/height of a character! + * instead use g.xOff/g.yOff. + * see e.g.: http://keithp.com/~keithp/render/Xft.tutorial + g.width -= g.x; int wcw = WCWIDTH (ch); @@ -1273,6 +1289,15 @@ if (width < g.width ) width = g.width; if (height < g.height ) height = g.height; if (glheight < g.height - g.y) glheight = g.height - g.y; + + */ + + int wcw = WCWIDTH (ch); + if (wcw > 1) g.xOff = g.xOff / wcw; + + if (width < g.xOff ) width = g.xOff; + if (height < g.yOff ) height = g.yOff; + if (glheight < g.yOff - g.y) glheight = g.yOff - g.y; } if (!width)