Module Name:    src
Committed By:   jmcneill
Date:           Fri Dec 24 18:12:59 UTC 2021

Modified Files:
        src/sys/dev/rasops: rasops.c rasops.h
        src/sys/dev/wsfb: genfb.c
        src/sys/dev/wsfont: wsfont.c wsfont.h

Log Message:
wsfb: Prefer wide fonts when EDID data is available.

To give us a better chance of picking a readable font, prefer fonts that
will render at least 3mm wide instead of picking the font that will be
closest to that size.


To generate a diff of this commit:
cvs rdiff -u -r1.124 -r1.125 src/sys/dev/rasops/rasops.c
cvs rdiff -u -r1.49 -r1.50 src/sys/dev/rasops/rasops.h
cvs rdiff -u -r1.84 -r1.85 src/sys/dev/wsfb/genfb.c
cvs rdiff -u -r1.76 -r1.77 src/sys/dev/wsfont/wsfont.c
cvs rdiff -u -r1.26 -r1.27 src/sys/dev/wsfont/wsfont.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/rasops/rasops.c
diff -u src/sys/dev/rasops/rasops.c:1.124 src/sys/dev/rasops/rasops.c:1.125
--- src/sys/dev/rasops/rasops.c:1.124	Mon Oct  4 12:26:29 2021
+++ src/sys/dev/rasops/rasops.c	Fri Dec 24 18:12:58 2021
@@ -1,4 +1,4 @@
-/*	 $NetBSD: rasops.c,v 1.124 2021/10/04 12:26:29 rin Exp $	*/
+/*	 $NetBSD: rasops.c,v 1.125 2021/12/24 18:12:58 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rasops.c,v 1.124 2021/10/04 12:26:29 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rasops.c,v 1.125 2021/12/24 18:12:58 jmcneill Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_rasops.h"
@@ -264,6 +264,8 @@ rasops_init(struct rasops_info *ri, int 
 			flags |= WSFONT_FIND_ALPHA;
 		if ((ri->ri_flg & RI_PREFER_ALPHA) != 0)
 			flags |= WSFONT_PREFER_ALPHA;
+		if ((ri->ri_flg & RI_PREFER_WIDEFONT) != 0)
+			flags |= WSFONT_PREFER_WIDE;
 		cookie = wsfont_find(NULL,
 			ri->ri_width / wantcols,
 			0,

Index: src/sys/dev/rasops/rasops.h
diff -u src/sys/dev/rasops/rasops.h:1.49 src/sys/dev/rasops/rasops.h:1.50
--- src/sys/dev/rasops/rasops.h:1.49	Sat Nov  2 01:14:57 2019
+++ src/sys/dev/rasops/rasops.h	Fri Dec 24 18:12:58 2021
@@ -1,4 +1,4 @@
-/* 	$NetBSD: rasops.h,v 1.49 2019/11/02 01:14:57 tsutsui Exp $ */
+/* 	$NetBSD: rasops.h,v 1.50 2021/12/24 18:12:58 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -70,6 +70,10 @@
  * use alpha fonts
  */ 
 #define RI_PREFER_ALPHA	0x4000
+/*
+ * Set this to prefer a wider font.
+ */
+#define RI_PREFER_WIDEFONT	0x8000
 
 struct rasops_info {
 	/* These must be filled in by the caller */

Index: src/sys/dev/wsfb/genfb.c
diff -u src/sys/dev/wsfb/genfb.c:1.84 src/sys/dev/wsfb/genfb.c:1.85
--- src/sys/dev/wsfb/genfb.c:1.84	Mon Aug 30 22:47:25 2021
+++ src/sys/dev/wsfb/genfb.c	Fri Dec 24 18:12:58 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfb.c,v 1.84 2021/08/30 22:47:25 jmcneill Exp $ */
+/*	$NetBSD: genfb.c,v 1.85 2021/12/24 18:12:58 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2007 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1.84 2021/08/30 22:47:25 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1.85 2021/12/24 18:12:58 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -81,7 +81,7 @@ static void	genfb_pollc(void *, int);
 
 static void	genfb_init_screen(void *, struct vcons_screen *, int, long *);
 static int	genfb_calc_hsize(struct genfb_softc *);
-static int	genfb_calc_cols(struct genfb_softc *);
+static int	genfb_calc_cols(struct genfb_softc *, struct rasops_info *);
 
 static int	genfb_putcmap(struct genfb_softc *, struct wsdisplay_cmap *);
 static int 	genfb_getcmap(struct genfb_softc *, struct wsdisplay_cmap *);
@@ -638,7 +638,7 @@ genfb_init_screen(void *cookie, struct v
 		break;
 	}
 
-	wantcols = genfb_calc_cols(sc);
+	wantcols = genfb_calc_cols(sc, ri);
 
 	rasops_init(ri, 0, wantcols);
 	ri->ri_caps = WSSCREEN_WSCOLORS | WSSCREEN_HILIT | WSSCREEN_UNDERLINE |
@@ -687,10 +687,14 @@ genfb_calc_hsize(struct genfb_softc *sc)
 
 /* Return the minimum number of character columns based on DPI */
 static int
-genfb_calc_cols(struct genfb_softc *sc)
+genfb_calc_cols(struct genfb_softc *sc, struct rasops_info *ri)
 {
 	const int hsize = genfb_calc_hsize(sc);
 
+	if (hsize != 0) {
+		ri->ri_flg |= RI_PREFER_WIDEFONT;
+	}
+
 	return MAX(RASOPS_DEFAULT_WIDTH, hsize / GENFB_CHAR_WIDTH_MM);
 }
 

Index: src/sys/dev/wsfont/wsfont.c
diff -u src/sys/dev/wsfont/wsfont.c:1.76 src/sys/dev/wsfont/wsfont.c:1.77
--- src/sys/dev/wsfont/wsfont.c:1.76	Sat Nov 20 08:16:30 2021
+++ src/sys/dev/wsfont/wsfont.c	Fri Dec 24 18:12:58 2021
@@ -1,4 +1,4 @@
-/* 	$NetBSD: wsfont.c,v 1.76 2021/11/20 08:16:30 rin Exp $	*/
+/* 	$NetBSD: wsfont.c,v 1.77 2021/12/24 18:12:58 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wsfont.c,v 1.76 2021/11/20 08:16:30 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wsfont.c,v 1.77 2021/12/24 18:12:58 jmcneill Exp $");
 
 #include "opt_wsfont.h"
 
@@ -610,10 +610,17 @@ wsfont_matches(struct wsdisplay_font *fo
 			if (font->fontwidth != width)
 				return (0);
 		} else {
-			if (font->fontwidth > width)
-				score -= 10000 + uimin(font->fontwidth - width, 9999);
-			else
+			if (font->fontwidth > width) {
+				score -= uimin(font->fontwidth - width, 9999);
+				if ((flags & WSFONT_PREFER_WIDE) == 0) {
+					score -= 10000;
+				}
+			} else {
 				score -= uimin(width - font->fontwidth, 9999);
+				if ((flags & WSFONT_PREFER_WIDE) != 0) {
+					score -= 10000;
+				}
+			}
 		}
 	}
 

Index: src/sys/dev/wsfont/wsfont.h
diff -u src/sys/dev/wsfont/wsfont.h:1.26 src/sys/dev/wsfont/wsfont.h:1.27
--- src/sys/dev/wsfont/wsfont.h:1.26	Sun Nov 20 15:44:40 2016
+++ src/sys/dev/wsfont/wsfont.h	Fri Dec 24 18:12:58 2021
@@ -1,4 +1,4 @@
-/* 	$NetBSD: wsfont.h,v 1.26 2016/11/20 15:44:40 macallan Exp $	*/
+/* 	$NetBSD: wsfont.h,v 1.27 2021/12/24 18:12:58 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002 The NetBSD Foundation, Inc.
@@ -67,6 +67,7 @@ int	wsfont_find(const char *, int, int, 
 #define WSFONT_FIND_ALL		0xff
 #define WSFONT_FIND_BESTWIDTH	0x1000
 #define WSFONT_PREFER_ALPHA	0x2000
+#define WSFONT_PREFER_WIDE	0x8000
 
 void	wsfont_walk(void (*)(struct wsdisplay_font *, void *, int), void *);
 

Reply via email to