Date: Sat, 11 Jan 2014 08:47:26 GMT From: clutton <clutton@zoho.com> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/185656: A x11/rxvt-unicode [PATCH] for the font width bug. Message-ID: <201401110847.s0B8lQNS094293@oldred.freebsd.org> Resent-Message-ID: <201401110850.s0B8o0HC067296@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 185656 >Category: ports >Synopsis: A x11/rxvt-unicode [PATCH] for the font width bug. >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: update >Submitter-Id: current-users >Arrival-Date: Sat Jan 11 08:50:00 UTC 2014 >Closed-Date: >Last-Modified: >Originator: clutton >Release: >Organization: >Environment: >Description: A lot of fancy fonts like «monaco», «PragmataPro» wouldn't display correctly without this patch. And you'll see enormously large «approche». http://i1.someimage.com/I5wLFQb.png >How-To-Repeat: >Fix: Patch attached with submission follows: diff --git a/x11/rxvt-unicode/files/patch-src_rxvtfont.C b/x11/rxvt-unicode/files/patch-src_rxvtfont.C new file mode 100644 index 0000000..83cbbfc --- /dev/null +++ b/x11/rxvt-unicode/files/patch-src_rxvtfont.C @@ -0,0 +1,47 @@ +--- 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; + } >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201401110847.s0B8lQNS094293>