diff options
author | Russ Cox <rsc@swtch.com> | 2017-01-06 10:35:12 -0500 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2017-01-06 15:36:59 +0000 |
commit | d296c18e379547218c4c50445c56e725ec3be91d (patch) | |
tree | e49c0a03b4ad07a9638c6df3a30a25edeee2a0a2 /src/cmd | |
parent | 657f699ef7e5a91a529337cac76ed48c68a28583 (diff) | |
download | plan9port-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/cmd')
-rw-r--r-- | src/cmd/9term/bsdpty.c | 8 | ||||
-rw-r--r-- | src/cmd/draw/mc.c | 19 |
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; |