aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2017-01-06 10:35:12 -0500
committerRuss Cox <rsc@swtch.com>2017-01-06 15:36:59 +0000
commitd296c18e379547218c4c50445c56e725ec3be91d (patch)
treee49c0a03b4ad07a9638c6df3a30a25edeee2a0a2 /src
parent657f699ef7e5a91a529337cac76ed48c68a28583 (diff)
downloadplan9port-d296c18e379547218c4c50445c56e725ec3be91d.tar.gz
plan9port-d296c18e379547218c4c50445c56e725ec3be91d.tar.bz2
plan9port-d296c18e379547218c4c50445c56e725ec3be91d.zip
9term, mc: conspire to handle hidpi displays
9term now uses the low bit of ws.ws_ypixel to signal whether this is a hidpi display, and mc adjusts the font it uses for columnation accordingly. Makes 'lc' work right on hidpi displays. Change-Id: I52928871ffb7f4c6fd6722f3d59f1836379148c6 Reviewed-on: https://plan9port-review.googlesource.com/2760 Reviewed-by: Russ Cox <rsc@swtch.com>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/9term/bsdpty.c8
-rw-r--r--src/cmd/draw/mc.c19
2 files changed, 26 insertions, 1 deletions
diff --git a/src/cmd/9term/bsdpty.c b/src/cmd/9term/bsdpty.c
index 4836d24d..fe0367f0 100644
--- a/src/cmd/9term/bsdpty.c
+++ b/src/cmd/9term/bsdpty.c
@@ -11,6 +11,7 @@
#endif
#include <fcntl.h>
#include <libc.h>
+#include <draw.h>
#include "term.h"
#define debug 0
@@ -75,7 +76,14 @@ updatewinsize(int row, int col, int dx, int dy)
ws.ws_row = row;
ws.ws_col = col;
ws.ws_xpixel = dx;
+
+
+ // Leave "is this a hidpi display" in the low bit of the ypixel height for mc.
+ dy &= ~1;
+ if(display->dpi >= DefaultDPI*3/2)
+ dy |= 1;
ws.ws_ypixel = dy;
+
if(ws.ws_row != ows.ws_row || ws.ws_col != ows.ws_col){
if(ioctl(rcfd, TIOCSWINSZ, &ws) < 0)
fprint(2, "ioctl: %r\n");
diff --git a/src/cmd/draw/mc.c b/src/cmd/draw/mc.c
index 3f9c21fb..c24d67b3 100644
--- a/src/cmd/draw/mc.c
+++ b/src/cmd/draw/mc.c
@@ -268,9 +268,10 @@ void
getwidth(void)
{
CFsys *fs;
- char buf[500], *p, *f[10];
+ char buf[500], *p, *q, *f[10];
int fd, n, nf;
struct winsize ws;
+ Font *f1;
if((p = getenv("winid")) != nil){
fs = nsmount("acme", "");
@@ -306,6 +307,22 @@ getwidth(void)
if(ws.ws_xpixel == 0)
font = nil;
if(font){
+ // 9term leaves "is this a hidpi display" in the low bit of the ypixel height.
+ if(ws.ws_ypixel&1) {
+ // need hidpi font.
+ // loadhifpi creates a font that crashes in stringwidth,
+ // for reasons i don't understand.
+ // do it ourselves
+ p = getenv("font");
+ q = strchr(p, ',');
+ f1 = nil;
+ if(q != nil)
+ f1 = openfont(nil, q+1);
+ if(f1 != nil)
+ font = f1;
+ else
+ ws.ws_xpixel /= 2;
+ }
mintab = stringwidth(font, "0");
if((p = getenv("tabstop")) != nil)
tabwid = atoi(p)*mintab;