changeset 36066:ea51e9f7266e

(best_matching_font): New parameter width_ratio. Multiply avgwidth by width_ratio. (choose_face_font): Call best_matching_font with width_ratio calculated from the column width of C.
author Gerd Moellmann <gerd@gnu.org>
date Tue, 13 Feb 2001 15:22:51 +0000
parents 117b2d7dad42
children f160c7ab017b
files src/xfaces.c
diffstat 1 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/xfaces.c	Tue Feb 13 15:14:22 2001 +0000
+++ b/src/xfaces.c	Tue Feb 13 15:22:51 2001 +0000
@@ -569,7 +569,7 @@
 static struct face *make_realized_face P_ ((Lisp_Object *));
 static void free_realized_faces P_ ((struct face_cache *));
 static char *best_matching_font P_ ((struct frame *, Lisp_Object *,
-				     struct font_name *, int));
+				     struct font_name *, int, int));
 static void cache_face P_ ((struct face_cache *, struct face *, unsigned));
 static void uncache_face P_ ((struct face_cache *, struct face *));
 static int xlfd_numeric_slant P_ ((struct font_name *));
@@ -5827,17 +5827,21 @@
 
 
 
-/* Return the name of the best matching font for face attributes
-   ATTRS in the array of font_name structures FONTS which contains
-   NFONTS elements.  Value is a font name which is allocated from
-   the heap.  FONTS is freed by this function.  */
+/* Return the name of the best matching font for face attributes ATTRS
+   in the array of font_name structures FONTS which contains NFONTS
+   elements.  WIDTH_RATIO is a factor with which to multiply average
+   widths if ATTRS specifies such a width.
+
+   Value is a font name which is allocated from the heap.  FONTS is
+   freed by this function.  */
 
 static char *
-best_matching_font (f, attrs, fonts, nfonts)
+best_matching_font (f, attrs, fonts, nfonts, width_ratio)
      struct frame *f;
      Lisp_Object *attrs;
      struct font_name *fonts;
      int nfonts;
+     int width_ratio;
 {
   char *font_name;
   struct font_name *best;
@@ -5868,7 +5872,7 @@
 
   avgwidth = (UNSPECIFIEDP (attrs[LFACE_AVGWIDTH_INDEX])
 	      ? 0
-	      : XFASTINT (attrs[LFACE_AVGWIDTH_INDEX]));
+	      : XFASTINT (attrs[LFACE_AVGWIDTH_INDEX]) * width_ratio);
 
   exact_p = 0;
 
@@ -6027,7 +6031,7 @@
   Lisp_Object pattern;
   char *font_name = NULL;
   struct font_name *fonts;
-  int nfonts;
+  int nfonts, width_ratio;
 
   /* Get (foundry and) family name and registry (and encoding) name of
      a font for C.  */
@@ -6052,7 +6056,10 @@
      best match for the specified face attributes from it.  */
   nfonts = try_font_list (f, attrs, Qnil, XCAR (pattern), XCDR (pattern),
 			  &fonts);
-  font_name = best_matching_font (f, attrs, fonts, nfonts);
+  width_ratio = (SINGLE_BYTE_CHAR_P (c)
+		 ? 1
+		 : CHARSET_WIDTH (CHAR_CHARSET (c)));
+  font_name = best_matching_font (f, attrs, fonts, nfonts, width_ratio);
   return font_name;
 }