tacme: fix rounding in rows computation - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a208917e7a935c019095acd1acd8165f08a54b7a
 (DIR) parent a06877afa9b778570f599e0e8fa83347426fa0b9
 (HTM) Author: Rob Pike <robpike@gmail.com>
       Date:   Tue, 24 Aug 2010 10:16:32 -0400
       
       acme: fix rounding in rows computation
       
       R=rsc
       CC=codebot
       http://codereview.appspot.com/2007045
       
       Diffstat:
         M CONTRIBUTORS                        |       3 ++-
         M src/cmd/acme/rows.c                 |       9 ++++++---
       
       2 files changed, 8 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/CONTRIBUTORS b/CONTRIBUTORS
       t@@ -21,8 +21,9 @@ Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
        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>
       +
 (DIR) diff --git a/src/cmd/acme/rows.c b/src/cmd/acme/rows.c
       t@@ -102,12 +102,14 @@ rowadd(Row *row, Column *c, int x)
        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;
       t@@ -121,10 +123,11 @@ rowresize(Row *row, Rectangle r)
                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;