xterm-88.patch.txt

XFree86 3.9Nk - xterm patch #88 - 1998/10/31 - T.Dickey <dickey@clark.net>
 
A bug-fix/refinement for the bold-font computation.  (I sent the 3.3.2h
patch separately because it contained a resync nit for the html file).
 
This refines my #85 patch by checking for a case where the font server
returns a bold font that does not quite correspond to the normal font.
When I asked for a bold version of the 6x12 font, the font server
returned a near equivalent where the ascent and descent values did not
match, causing xterm to leave lines across the display.
This patch makes xterm reject that type of mismatch, falling back to the
old font behavior.
 
# ------------------------------------------------------------------------------
#  button.c       |    4 ++--
#  fontutils.c    |   22 ++++++++++++++++++++--
#  version.h      |    2 +-
#  xterm.log.html |   10 ++++++++++
#  4 files changed, 33 insertions, 5 deletions
# ------------------------------------------------------------------------------
Index: button.c
--- xterm-87+/button.c  Sun Oct 25 13:31:39 1998
+++ xterm-88/button.c   Sun Oct 25 15:55:45 1998
@@ -1274,7 +1274,7 @@
        unsigned long std_length;
        XmuConvertStandardSelection(
                    w, screen->selection_time, selection,
-                   target, type, (XtPointer *)&std_targets, &std_length, format
+                   target, type, (XPointer *)&std_targets, &std_length, format
                   );
        *length = std_length + 5;
        targetP = (Atom*)XtMalloc(sizeof(Atom)*(*length));
@@ -1340,7 +1340,7 @@
     }
     if (XmuConvertStandardSelection(w, screen->selection_time, selection,
                                    target, type,
-                                   (XtPointer *)value, length, format))
+                                   (XPointer *)value, length, format))
        return True;
 
     /* else */
Index: fontutils.c
--- xterm-87+/fontutils.c       Sun Oct 25 13:31:39 1998
+++ xterm-88/fontutils.c        Sat Oct 31 23:04:53 1998
@@ -1,5 +1,5 @@
 /*
- * $XFree86: xc/programs/xterm/fontutils.c,v 1.2 1998/10/25 04:31:23 dawes Exp $
+ * $XFree86$
  */
 
 /************************************************************
@@ -302,6 +302,23 @@
        return (*p == *fontname);       /* both should be NUL */
 }
 
+/*
+ * If the font server tries to adjust another font, it may not adjust it
+ * properly.  Check that the bounding boxes are compatible.  Otherwise we'll
+ * leave trash on the display when we mix normal and bold fonts.
+ */
+static int
+same_font_size(XFontStruct *nfs, XFontStruct *bfs)
+{
+       return (
+               nfs->ascent           == bfs->ascent
+        &&     nfs->descent          == bfs->descent
+        &&     nfs->min_bounds.width == bfs->min_bounds.width
+        &&     nfs->min_bounds.width == bfs->min_bounds.width
+        &&     nfs->max_bounds.width == bfs->max_bounds.width
+        &&     nfs->max_bounds.width == bfs->max_bounds.width);
+}
+
 #define EmptyFont(fs) ((fs)->ascent + (fs)->descent == 0 \
                   ||  (fs)->max_bounds.width == 0)
 
@@ -353,7 +370,8 @@
                 || (bfs = XLoadQueryFont (screen->display, bfontname)) == 0) {
                        bfs = nfs;
                        TRACE(("...cannot load a matching bold font\n"))
-               } else if (!got_bold_font(screen->display, bfs, bfontname)) {
+               } else if (!same_font_size(nfs, bfs)
+                || !got_bold_font(screen->display, bfs, bfontname)) {
                        XFreeFont(screen->display, bfs);
                        bfs = nfs;
                        TRACE(("...did not get a matching bold font\n"))
Index: version.h
--- xterm-87+/version.h Sun Oct 25 13:31:39 1998
+++ xterm-88/version.h  Sat Oct 31 23:13:52 1998
@@ -6,4 +6,4 @@
  * version of xterm has been built.  The number in parentheses is my patch
  * number (T.Dickey).
  */
-#define XTERM_VERSION "XFree86 3.9Nj(87)"
+#define XTERM_VERSION "XFree86 3.9Nk(88)"
Index: xterm.log.html
--- xterm-87+/xterm.log.html    Sun Oct 25 13:31:39 1998
+++ xterm-88/xterm.log.html     Sat Oct 31 23:41:16 1998
@@ -41,6 +41,7 @@
 xc/programs/Xserver/hw/xfree86).
 
 <UL>
+<LI><A HREF="#xterm_88">Patch #88 - 1998/10/31 - XFree86 3.9Nk and 3.3.2h</A>
 <LI><A HREF="#xterm_87">Patch #87 - 1998/10/21 - XFree86 3.9Nj and 3.3.2f</A>
 <LI><A HREF="#xterm_86">Patch #86 - 1998/10/14 - XFree86 3.9Nj and 3.3.2e</A>
 <LI><A HREF="#xterm_85">Patch #85 - 1998/10/12 - XFree86 3.9Nj and 3.3.2e</A>
@@ -130,6 +131,15 @@
 <LI><A HREF="#xterm_02">Patch #2 - 1996/1/7</A>
 <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
 </UL>
+
+<H1><A NAME="xterm_88">Patch #88 - 1998/10/31 - XFree86 3.9Nk and 3.3.2h</A></H1>
+This refines my #85 patch by checking for a case where the font server
+returns a bold font that does not quite correspond to the normal font.
+When I asked for a bold version of the 6x12 font, the font server
+returned a near equivalent where the ascent and descent values did not
+match, causing xterm to leave lines across the display.
+This patch makes xterm reject that type of mismatch, falling back to the
+old font behavior.
 
 <H1><A NAME="xterm_87">Patch #87 - 1998/10/21 - XFree86 3.9Nj and 3.3.2f</A></H1>
 This corrects a problem reported by Stefan Dalibor.  My table entries for the