Hi list.

I was trying to fix enormous font width for urxvt running on FreeBSD.
The fonts I have are «Monaco» and «PragmataPro».

Perhaps you all know that patch. Even Arch Linux FAQ mentioned it.
But the patch doesn't resolve a missing unicode chars borrowing logic.
I mean rxvt_font_xft::has_char doesn't work as expected after that
patch.

The method a little tricky buy the way :), it requires a good
understanding the domain.

I wish I had the same fond width for rxvt like mate-terminal, xterm, etc
do have.
--- src/rxvtfont.C	2013-03-27 18:59:20.000000000 +0200
+++ /tmp/rxvtfont.C	2014-01-11 10:11:32.000000000 +0200
@@ -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,12 +1276,21 @@
           XGlyphInfo g;
           XftTextExtents16 (disp, f, &ch, 1, &g);

+/*
+ * bukind: don't use g.width as a width of a character!
+ * instead use g.xOff, see e.g.: http://keithp.com/~keithp/render/Xft.tutorial
+
           g.width -= g.x;

           int wcw = WCWIDTH (ch);
           if (wcw > 0) g.width = (g.width + wcw - 1) / wcw;

           if (width    < g.width       ) width    = g.width;
+ */
+          int wcw = WCWIDTH (ch);
+          if (wcw > 1) g.xOff = g.xOff / wcw;
+          if (width < g.xOff) width = g.xOff;
+
           if (height   < g.height      ) height   = g.height;
           if (glheight < g.height - g.y) glheight = g.height - g.y;
         }

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
rxvt-unicode mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/rxvt-unicode

Reply via email to