acme: fix rounding in rows computation

R=rsc
CC=codebot
http://codereview.appspot.com/2007045
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 21efdc2..544ba99 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -21,8 +21,9 @@
 Michael Teichgräber <mt4swm@googlemail.com>
 Michael Teichgräber <mt@ib.wmipf.de>
 Nikolai Saoukh <nikolai.saoukh@gmail.com>
+Rob Pike <robpike@gmail.com>
 Russ Cox <rsc@swtch.com>
 Tim Newsham <tim.newsham@gmail.com>
 Tony Lainson <t.lainson@gmail.com>
 Venkatesh Srinivas <extrudedaluminiu@gmail.com>
-grai <t.lainson@gmail.com>
+
diff --git a/src/cmd/acme/rows.c b/src/cmd/acme/rows.c
index 36e244b..c57a41b 100644
--- a/src/cmd/acme/rows.c
+++ b/src/cmd/acme/rows.c
@@ -102,12 +102,14 @@
 void
 rowresize(Row *row, Rectangle r)
 {
-	int i, dx, odx;
-	Rectangle r1, r2;
+	int i, dx, odx, deltax;
+	Rectangle or, r1, r2;
 	Column *c;
 
 	dx = Dx(r);
 	odx = Dx(row->r);
+	or = row->r;
+	deltax = r.min.x - or.min.x;
 	row->r = r;
 	r1 = r;
 	r1.max.y = r1.min.y + font->height;
@@ -121,10 +123,11 @@
 	for(i=0; i<row->ncol; i++){
 		c = row->col[i];
 		r1.min.x = r1.max.x;
+		/* the test should not be necessary, but guarantee we don't lose a pixel */
 		if(i == row->ncol-1)
 			r1.max.x = r.max.x;
 		else
-			r1.max.x = r1.min.x+Dx(c->r)*dx/odx;
+			r1.max.x = (c->r.max.x-or.min.x)*Dx(r)/Dx(or) + deltax;
 		if(i > 0){
 			r2 = r1;
 			r2.max.x = r2.min.x+Border;