commit d0e0701913f3aede1fcb256f3d1e9c60c9af6edf from: Russ Cox date: Mon Nov 26 02:41:52 2012 UTC devdraw, libdraw: add display->dpi Fixed at 100 right now, but the plan is to make it accurate and then use it. R=rsc http://codereview.appspot.com/6856091 commit - 7b9ef735a8d1fddf3887853abbd065271fa9c293 commit + d0e0701913f3aede1fcb256f3d1e9c60c9af6edf blob - 07992c2153dffa22c0c161b12f35bfe473c1ac45 blob + 3e21ff1803b36a38a95b9fcdef11fc049a875b3b --- include/draw.h +++ include/draw.h @@ -204,6 +204,7 @@ struct Display int _isnewdisplay; struct Mux *mux; int srvfd; + int dpi; }; struct Image blob - 0e2226cdf1aafa116be199d138a138f8bc2f2371 blob + 3fabd34e2bfcc1440339c4133fbfcde00b6496e6 --- src/cmd/devdraw/devdraw.c +++ src/cmd/devdraw/devdraw.c @@ -11,6 +11,7 @@ #include "devdraw.h" extern void _flushmemscreen(Rectangle); +int displaydpi = 100; #define NHASH (1<<5) #define HASHMASK (NHASH-1) @@ -776,6 +777,7 @@ _drawmsgwrite(void *v, int n) DName *dn; DScreen *dscrn; FChar *fc; + Fmt fmt; Memimage *dst, *i, *l, **lp, *mask, *src; Memscreen *scrn; Point p, *pp, q, sp; @@ -1083,7 +1085,31 @@ _drawmsgwrite(void *v, int n) memmove(client->readdata, ibuf, ni); client->nreaddata = ni; client->infoid = -1; - continue; + continue; + + /* query: 'Q' n[1] queryspec[n] */ + case 'q': + if(n < 2) + goto Eshortdraw; + m = 1+1+a[1]; + if(n < m) + goto Eshortdraw; + fmtstrinit(&fmt); + for(c=0; creaddata = (uchar*)fmtstrflush(&fmt); + if(client->readdata == nil) + goto Enomem; + client->nreaddata = strlen((char*)client->readdata); + continue; /* load character: 'l' fontid[4] srcid[4] index[2] R[4*4] P[2*4] left[1] width[1] */ case 'l': blob - 7abf212ef51443490c353f4494ecf8673e01e78a blob + 454cfe033a0a227b3e578e2f4b74b91617c1d296 --- src/cmd/devdraw/devdraw.h +++ src/cmd/devdraw/devdraw.h @@ -6,4 +6,4 @@ int parsewinsize(char*, Rectangle*, int*); int mouseswap(int); void abortcompose(void); - +extern int displaydpi; blob - 0ddb3adc46751fdb4bc3fb5c953ce478c4867e83 blob + c698ec68aa040f75c8d24fdfe812ce5433cf871b --- src/libdraw/init.c +++ src/libdraw/init.c @@ -179,6 +179,15 @@ getimage0(Display *d, Image *image) image->clipr.min.y = atoi(info+9*12); image->clipr.max.x = atoi(info+10*12); image->clipr.max.y = atoi(info+11*12); + + a = bufimage(d, 3); + a[0] = 'q'; + a[1] = 1; + a[2] = 'd'; + d->dpi = 100; + if(flushimage(d, 0) >= 0 && _displayrddraw(d, info, 12) == 12) + d->dpi = atoi(info); + return image; }