libdraw: add scalesize

R=rsc
http://codereview.appspot.com/6855092
diff --git a/include/draw.h b/include/draw.h
index 9bf5ce1..fe059ac 100644
--- a/include/draw.h
+++ b/include/draw.h
@@ -351,6 +351,7 @@
 extern int	nameimage(Image*, char*, int);
 extern Image* allocimagemix(Display*, u32int, u32int);
 extern int	drawsetlabel(char*);
+extern int	scalesize(Display*, int);
 
 /*
  * Colors
diff --git a/man/man3/graphics.3 b/man/man3/graphics.3
index 4b39332..d07c269 100644
--- a/man/man3/graphics.3
+++ b/man/man3/graphics.3
@@ -62,6 +62,9 @@
 	   Image **ip, Screen **sp, int ref)
 .PP
 .B
+int	scalesize(Display *d, int n)
+.PP
+.B
 void	cursorswitch(Cursor *curs)
 .PP
 .B
@@ -502,6 +505,19 @@
 .B Screen
 variables for the new window.
 .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 initial cursor is an arrow.
 .I Cursorswitch
diff --git a/src/libdraw/init.c b/src/libdraw/init.c
index c698ec6..b2df7fd 100644
--- a/src/libdraw/init.c
+++ b/src/libdraw/init.c
@@ -428,3 +428,10 @@
 	return p;
 }
 
+int
+scalesize(Display *d, int n)
+{
+	if(d == nil || d->dpi <= DefaultDPI)
+		return n;
+	return (n*d->dpi+DefaultDPI/2)/DefaultDPI;
+}