libdraw: add scalesize

R=rsc
http://codereview.appspot.com/6855092
This commit is contained in:
Russ Cox 2012-11-25 22:15:57 -05:00
parent 323e7d0193
commit 9f3851871e
3 changed files with 24 additions and 0 deletions

View file

@ -351,6 +351,7 @@ extern Image* namedimage(Display*, char*);
extern int nameimage(Image*, char*, int); extern int nameimage(Image*, char*, int);
extern Image* allocimagemix(Display*, u32int, u32int); extern Image* allocimagemix(Display*, u32int, u32int);
extern int drawsetlabel(char*); extern int drawsetlabel(char*);
extern int scalesize(Display*, int);
/* /*
* Colors * Colors

View file

@ -62,6 +62,9 @@ int gengetwindow(Display *d, char *winname,
Image **ip, Screen **sp, int ref) Image **ip, Screen **sp, int ref)
.PP .PP
.B .B
int scalesize(Display *d, int n)
.PP
.B
void cursorswitch(Cursor *curs) void cursorswitch(Cursor *curs)
.PP .PP
.B .B
@ -502,6 +505,19 @@ and
.B Screen .B Screen
variables for the new window. variables for the new window.
.PP .PP
Historically, Plan 9 graphics programs have used fixed-size graphics features that assume a narrow range of display densities, around 100 dpi: pixels (or dots) per inch.
The new field
.B display->dpi
contains the display's actual density if known, or else
.B DefaultDPI
(100).
.I Scalesize
scales the fixed pixel count
.I n
by
.BR display->dpi / DefaultDPI ,
rounding appropriately.
.PP
The mouse cursor is always displayed. The mouse cursor is always displayed.
The initial cursor is an arrow. The initial cursor is an arrow.
.I Cursorswitch .I Cursorswitch

View file

@ -428,3 +428,10 @@ bufimage(Display *d, int n)
return p; return p;
} }
int
scalesize(Display *d, int n)
{
if(d == nil || d->dpi <= DefaultDPI)
return n;
return (n*d->dpi+DefaultDPI/2)/DefaultDPI;
}