all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Mac OS Italic and Bold Font Display/Hollow Boxes Bug Fix
@ 2002-05-27 23:32 Andrew Choi
  0 siblings, 0 replies; only message in thread
From: Andrew Choi @ 2002-05-27 23:32 UTC (permalink / raw)


Hi Everyone,

The following patch (to be applied to the version in the CVS
repository) fixes a bug which prevents Emacs from correctly displaying
the italic, bold, and bold-italic variants of most fonts on the Mac OS
(classic and X).

Please test it.  I'll check it into the CVS once I have used it a bit
more.

Andrew.
-----

Index: lisp/term/mac-win.el
===================================================================
RCS file: /cvsroot/emacs//emacs/lisp/term/mac-win.el,v
retrieving revision 1.8
diff -u -r1.8 mac-win.el
--- lisp/term/mac-win.el	26 Apr 2002 23:39:04 -0000	1.8
+++ lisp/term/mac-win.el	27 May 2002 22:59:32 -0000
@@ -225,6 +225,12 @@
 ;; ange-ftp will not work without it.
 (setq process-connection-type nil)
 
+;; Assume that fonts are always scalable on the Mac.  This sometimes
+;; results in characters with jagged edges.  However, without it,
+;; fonts with both truetype and bitmap representations but no italic
+;; or bold bitmap versions will not display these variants correctly.
+(setq scalable-fonts-allowed t)
+
 ;; (prefer-coding-system 'mac-roman)
 
 ;;
Index: src/fontset.c
===================================================================
RCS file: /cvsroot/emacs//emacs/src/fontset.c,v
retrieving revision 1.67
diff -u -r1.67 fontset.c
--- src/fontset.c	20 May 2002 08:05:48 -0000	1.67
+++ src/fontset.c	27 May 2002 22:59:34 -0000
@@ -1413,7 +1413,7 @@
 #if defined (MAC_OS)
   FONTSET_ASCII (Vdefault_fontset)
     = Fcons (make_number (0),
-	     build_string ("-ETL-fixed-medium-r-*--*-160-*-*-*-*-iso8859-1"));
+	     build_string ("-apple-monaco-medium-r-*--*-120-*-*-*-*-mac-roman"));
 #elif defined (WINDOWSNT)
   FONTSET_ASCII (Vdefault_fontset)
     = Fcons (make_number (0),
Index: src/macfns.c
===================================================================
RCS file: /cvsroot/emacs//emacs/src/macfns.c,v
retrieving revision 1.3
diff -u -r1.3 macfns.c
--- src/macfns.c	20 May 2002 08:06:16 -0000	1.3
+++ src/macfns.c	27 May 2002 22:59:43 -0000
@@ -4434,7 +4434,7 @@
     }
 #endif /* 0 */
 
-  error ("Display has an unknown visual class");
+  return (intern ("true-color"));
 }
 
 DEFUN ("x-display-save-under", Fx_display_save_under,
Index: src/macterm.c
===================================================================
RCS file: /cvsroot/emacs//emacs/src/macterm.c,v
retrieving revision 1.3
diff -u -r1.3 macterm.c
--- src/macterm.c	8 May 2002 21:30:03 -0000	1.3
+++ src/macterm.c	27 May 2002 22:59:54 -0000
@@ -9559,6 +9559,13 @@
   /* Now make the frame display the given font.  */
   if (FRAME_MAC_WINDOW (f) != 0)
     {
+      XSetFont (FRAME_MAC_DISPLAY (f), f->output_data.mac->normal_gc,
+		f->output_data.mac->font);
+      XSetFont (FRAME_MAC_DISPLAY (f), f->output_data.mac->reverse_gc,
+		f->output_data.mac->font);
+      XSetFont (FRAME_MAC_DISPLAY (f), f->output_data.mac->cursor_gc,
+		f->output_data.mac->font);
+
       frame_update_line_height (f);
       if (NILP (tip_frame) || XFRAME (tip_frame) != f)
         x_set_window_size (f, 0, f->width, f->height);
@@ -10651,10 +10658,30 @@
 }
 
 
-/* Sets up the table font_name_table to contain the list of all
-   monospace fonts in the system the first time the table is used so
-   that the Resource Manager need not be accessed every time this
-   information is needed.  */
+static void
+add_font_name_table_entry (char *font_name)
+{
+  if (font_name_table_size == 0)
+    {
+      font_name_table_size = 16;
+      font_name_table = (char **)
+	xmalloc (font_name_table_size * sizeof (char *));
+    }
+  else if (font_name_count + 1 >= font_name_table_size)
+    {
+      font_name_table_size += 16;
+      font_name_table = (char **)
+	xrealloc (font_name_table,
+		  font_name_table_size * sizeof (char *));
+    }
+
+  font_name_table[font_name_count++] = font_name;
+}
+
+/* Sets up the table font_name_table to contain the list of all fonts
+   in the system the first time the table is used so that the Resource
+   Manager need not be accessed every time this information is
+   needed.  */
 
 static void
 init_font_name_table ()
@@ -10700,23 +10727,21 @@
       
 	  while (FMGetNextFontFamilyInstance (&ffii, &font, &style, &size)
 		 == noErr)
-	    {
-	      if (font_name_table_size == 0)
-		{
-		  font_name_table_size = 16;
-		  font_name_table = (char **)
-		    xmalloc (font_name_table_size * sizeof (char *));
-		}
-	      else if (font_name_count + 1 >= font_name_table_size)
-		{
-		  font_name_table_size += 16;
-		  font_name_table = (char **)
-		    xrealloc (font_name_table,
-			      font_name_table_size * sizeof (char *));
-		}
-	      font_name_table[font_name_count++]
-		= mac_to_x_fontname (name, size, style, sc);
-	    }
+	    if (size == 0)
+	      {
+		add_font_name_table_entry (mac_to_x_fontname (name, size,
+							      style, sc));
+		add_font_name_table_entry (mac_to_x_fontname (name, size,
+							      italic, sc));
+		add_font_name_table_entry (mac_to_x_fontname (name, size,
+							      bold, sc));
+		add_font_name_table_entry (mac_to_x_fontname (name, size,
+							      italic | bold,
+							      sc));
+	      }
+	    else
+	      add_font_name_table_entry (mac_to_x_fontname (name, size, style,
+							    sc));
 	}
   
       /* Dispose of the iterators.  */
Index: src/xfaces.c
===================================================================
RCS file: /cvsroot/emacs//emacs/src/xfaces.c,v
retrieving revision 1.253
diff -u -r1.253 xfaces.c
--- src/xfaces.c	20 May 2002 08:06:45 -0000	1.253
+++ src/xfaces.c	27 May 2002 22:59:59 -0000
@@ -918,6 +918,9 @@
 #ifdef WINDOWSNT
   if (!FRAME_WINDOW_P (f) || FRAME_W32_WINDOW (f))
 #endif
+#ifdef MAC_OS
+  if (!FRAME_MAC_P (f) || FRAME_MAC_WINDOW (f))
+#endif
     if (!realize_basic_faces (f))
       abort ();
 }
@@ -6026,6 +6029,17 @@
   if (STRINGP (face_family))
     nfonts = try_alternative_families (f, face_family, registry, fonts);
 
+#ifdef MAC_OS
+  /* When realizing the default face and a font spec does not matched
+     exactly, Emacs looks for ones with the same registry as the
+     default font.  On the Mac, this is mac-roman, which does not work
+     if the family is -etl-fixed, e.g.  The following widens the
+     choices and fixes that problem.  */
+  if (nfonts == 0 && STRINGP (face_family) && STRINGP (registry)
+      && xstricmp (XSTRING (registry)->data, "mac-roman") == 0)
+    nfonts = try_alternative_families (f, face_family, Qnil, fonts);
+#endif
+
   if (nfonts == 0 && !NILP (family))
     nfonts = try_alternative_families (f, family, registry, fonts);
 
@@ -6432,18 +6446,6 @@
 	fontset = default_face->fontset;
       face->fontset = make_fontset_for_ascii_face (f, fontset);
       face->font = NULL;	/* to force realize_face to load font */
-
-#ifdef MAC_OS
-      /* Load the font if it is specified in ATTRS.  This fixes
-         changing frame font on the Mac.  */
-      if (STRINGP (attrs[LFACE_FONT_INDEX]))
-        {
-          struct font_info *font_info =
-            FS_LOAD_FONT (f, 0, XSTRING (attrs[LFACE_FONT_INDEX])->data, -1);
-          if (font_info)
-            face->font = font_info->font;
-        }
-#endif
     }
 
   /* Load colors, and set remaining attributes.  */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-05-27 23:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-05-27 23:32 Mac OS Italic and Bold Font Display/Hollow Boxes Bug Fix Andrew Choi

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.