Allow a configurable border color. - sam - An updated version of the sam text editor.
 (HTM) git clone git://vernunftzentrum.de/sam.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 24c99b85f003d2e76ca80334f5e8604e8ef15398
 (DIR) parent bbfde92dd63eb2d1d28f48aff13ecd90e6574c76
 (HTM) Author: Rob King <jking@deadpixi.com>
       Date:   Sun, 14 Aug 2016 23:24:39 -0500
       
       Allow a configurable border color.
       
       Diffstat:
         include/libg.h                      |       4 ++--
         libXg/bitblt.c                      |       9 ++++++---
         libXg/border.c                      |      36 ++++++++++++++++---------------
         libXg/gcs.c                         |      12 ++++--------
         libXg/getrect.c                     |       4 ++--
         libXg/libgint.h                     |       4 ++--
         libXg/menuhit.c                     |       4 ++--
         libXg/xtbinit.c                     |       8 +++++---
         libframe/frdelete.c                 |       8 ++++----
         libframe/frinsert.c                 |      10 +++++-----
         libframe/frselect.c                 |       8 ++++----
         samterm/flayer.c                    |      20 ++++++++++----------
         samterm/scroll.c                    |       8 ++++----
       
       13 files changed, 69 insertions(+), 66 deletions(-)
       ---
 (DIR) diff --git a/include/libg.h b/include/libg.h
       @@ -155,7 +155,7 @@ extern int         rectclip(Rectangle*, Rectangle);
        extern void         xtbinit(Errfunc, char*, int*, char**, char**);
        extern void         bclose(void);
        extern void         berror(char*);
       -extern void         bitblt2(Bitmap*, Point, Bitmap*, Rectangle, Fcode, unsigned long);
       +extern void         bitblt2(Bitmap*, Point, Bitmap*, Rectangle, Fcode, unsigned long, unsigned long);
        extern void         bitblt(Bitmap*, Point, Bitmap*, Rectangle, Fcode);
        extern void         copymasked(Bitmap*, Point, Bitmap*, Bitmap*, Rectangle);
        extern int         bitbltclip(void*);
       @@ -179,7 +179,7 @@ extern int         ptinrect(Point, Rectangle);
        extern int         rectXrect(Rectangle, Rectangle);
        extern int         eqpt(Point, Point);
        extern int         eqrect(Rectangle, Rectangle);
       -extern void         border(Bitmap*, Rectangle, int, Fcode);
       +extern void         border(Bitmap*, Rectangle, int, Fcode, unsigned long);
        extern void         cursorswitch(Cursor*);
        extern void         cursorset(Point);
        extern Rectangle bscreenrect(Rectangle*);
 (DIR) diff --git a/libXg/bitblt.c b/libXg/bitblt.c
       @@ -7,17 +7,20 @@
        void
        bitblt(Bitmap *d, Point p, Bitmap *s, Rectangle r, Fcode f)
        {
       -    bitblt2(d, p, s, r, f, _bgpixel);
       +    bitblt2(d, p, s, r, f, _fgpixel, _bgpixel);
        }
        
        void
       -bitblt2(Bitmap *d, Point p, Bitmap *s, Rectangle r, Fcode f, unsigned long bg)
       +bitblt2(Bitmap *d, Point p, Bitmap *s, Rectangle r, Fcode f, unsigned long fg, unsigned long bg)
        {
                int sx, sy, dx, dy, bfunc;
                GC g;
                unsigned long plane;
                Bitmap *btmp;
        
       +    if (fg == 0)
       +        fg = _fgpixel;
       +
            if (bg == 0)
                bg = _bgpixel;
        
       @@ -35,7 +38,7 @@ bitblt2(Bitmap *d, Point p, Bitmap *s, Rectangle r, Fcode f, unsigned long bg)
                        dx -= d->r.min.x;
                        dy -= d->r.min.y;
                }
       -        g = _getcopygc2(f, d, s, &bfunc, bg);
       +        g = _getcopygc2(f, d, s, &bfunc, fg, bg);
                if(bfunc == UseCopyArea)
                        XCopyArea(_dpy, (Drawable)s->id, (Drawable)d->id, g,
                                sx, sy, Dx(r), Dy(r), dx, dy);
 (DIR) diff --git a/libXg/border.c b/libXg/border.c
       @@ -3,26 +3,28 @@
        #include <libc.h>
        #include <libg.h>
        
       +extern unsigned long _borderpixel;
       +
        void
       -border(Bitmap *l, Rectangle r, int i, Fcode c)
       +border(Bitmap *l, Rectangle r, int i, Fcode c, unsigned long bg)
        {
                if(i > 0){
       -                bitblt(l, r.min,
       -                        l, Rect(r.min.x, r.min.y, r.max.x, r.min.y+i), c);
       -                bitblt(l, Pt(r.min.x, r.max.y-i),
       -                        l, Rect(r.min.x, r.max.y-i, r.max.x, r.max.y), c);
       -                bitblt(l, Pt(r.min.x, r.min.y+i),
       -                        l, Rect(r.min.x, r.min.y+i, r.min.x+i, r.max.y-i), c);
       -                bitblt(l, Pt(r.max.x-i, r.min.y+i),
       -                        l, Rect(r.max.x-i, r.min.y+i, r.max.x, r.max.y-i), c);
       +                bitblt2(l, r.min,
       +                        l, Rect(r.min.x, r.min.y, r.max.x, r.min.y+i), c, _borderpixel, bg);
       +                bitblt2(l, Pt(r.min.x, r.max.y-i),
       +                        l, Rect(r.min.x, r.max.y-i, r.max.x, r.max.y), c, _borderpixel, bg);
       +                bitblt2(l, Pt(r.min.x, r.min.y+i),
       +                        l, Rect(r.min.x, r.min.y+i, r.min.x+i, r.max.y-i), c, _borderpixel, bg);
       +                bitblt2(l, Pt(r.max.x-i, r.min.y+i),
       +                        l, Rect(r.max.x-i, r.min.y+i, r.max.x, r.max.y-i), c, _borderpixel, bg);
                }else if(i < 0){
       -                bitblt(l, Pt(r.min.x, r.min.y+i),
       -                        l, Rect(r.min.x, r.min.y+i, r.max.x, r.min.y), c);
       -                bitblt(l, Pt(r.min.x, r.max.y),
       -                        l, Rect(r.min.x, r.max.y, r.max.x, r.max.y-i), c);
       -                bitblt(l, Pt(r.min.x+i, r.min.y+i),
       -                        l, Rect(r.min.x+i, r.min.y+i, r.min.x, r.max.y-i), c);
       -                bitblt(l, Pt(r.max.x, r.min.y+i),
       -                        l, Rect(r.max.x, r.min.y+i, r.max.x-i, r.max.y-i), c);
       +                bitblt2(l, Pt(r.min.x, r.min.y+i),
       +                        l, Rect(r.min.x, r.min.y+i, r.max.x, r.min.y), c, _borderpixel, bg);
       +                bitblt2(l, Pt(r.min.x, r.max.y),
       +                        l, Rect(r.min.x, r.max.y, r.max.x, r.max.y-i), c, _borderpixel, bg);
       +                bitblt2(l, Pt(r.min.x+i, r.min.y+i),
       +                        l, Rect(r.min.x+i, r.min.y+i, r.min.x, r.max.y-i), c, _borderpixel, bg);
       +                bitblt2(l, Pt(r.max.x, r.min.y+i),
       +                        l, Rect(r.max.x, r.min.y+i, r.max.x-i, r.max.y-i), c, _borderpixel, bg);
                }
        }
 (DIR) diff --git a/libXg/gcs.c b/libXg/gcs.c
       @@ -201,18 +201,16 @@ _getgc(Bitmap *b, unsigned long gcvm, XGCValues *pgcv)
        GC
        _getfillgc(Fcode f, Bitmap *b, unsigned long val)
        {
       -    return _getfillgc2(f, b, val, _bgpixel);
       +    return _getfillgc2(f, b, val, _fgpixel, _bgpixel);
        }
        
        GC
       -_getfillgc2(Fcode f, Bitmap *b, unsigned long val, unsigned long bg)
       +_getfillgc2(Fcode f, Bitmap *b, unsigned long val, unsigned long fg, unsigned long bg)
        {
                int xf, m;
                unsigned long v, spix, vmax;
                XGCValues gcv;
        
       -    unsigned long fg = _fgpixel;
       -
                f &= F;
                vmax = _ld2dmask[b->ldepth];
                v = val & vmax;
       @@ -303,19 +301,17 @@ _getfillgc2(Fcode f, Bitmap *b, unsigned long val, unsigned long bg)
        GC
        _getcopygc(Fcode f, Bitmap *db, Bitmap *sb, int *bltfunc)
        {
       -    return _getcopygc2(f, db, sb, bltfunc, _bgpixel);
       +    return _getcopygc2(f, db, sb, bltfunc, _fgpixel, _bgpixel);
        }
        
        GC
       -_getcopygc2(Fcode f, Bitmap *db, Bitmap *sb, int *bltfunc, unsigned long bg)
       +_getcopygc2(Fcode f, Bitmap *db, Bitmap *sb, int *bltfunc, unsigned long fg, unsigned long bg)
        {
                unsigned long spix, df, sf;
                int xf, c;
                XGCValues gcv;
                unsigned long gcvm;
        
       -    unsigned long fg = _fgpixel;
       -
                f &= F;
                gcvm = 0;
                df = db->flag;
 (DIR) diff --git a/libXg/getrect.c b/libXg/getrect.c
       @@ -57,9 +57,9 @@ getrect(int but, Mouse *m){
                r.max = m->xy;
                do{
                        rc = rcanon(r);
       -                border(&screen, rc, 2, F&~D);
       +                border(&screen, rc, 2, F&~D, _bgpixel);
                        *m = emouse();
       -                border(&screen, rc, 2, F&~D);
       +                border(&screen, rc, 2, F&~D, _bgpixel);
                        r.max = m->xy;
                }while(m->buttons & but);
        
 (DIR) diff --git a/libXg/libgint.h b/libXg/libgint.h
       @@ -34,8 +34,8 @@ typedef        char*        caddr_t;
        /* Return a GCs for solid filling/strings/etc., segments/points, and tiling */
        extern GC        _getfillgc(Fcode, Bitmap*, unsigned long);
        extern GC        _getcopygc(Fcode, Bitmap*, Bitmap*, int*);
       -extern GC        _getfillgc2(Fcode, Bitmap*, unsigned long, unsigned long);
       -extern GC        _getcopygc2(Fcode, Bitmap*, Bitmap*, int*, unsigned long);
       +extern GC        _getfillgc2(Fcode, Bitmap*, unsigned long, unsigned long, unsigned long);
       +extern GC        _getcopygc2(Fcode, Bitmap*, Bitmap*, int*, unsigned long, unsigned long);
        extern GC        _getgc(Bitmap*, unsigned long, XGCValues *);
        
        /* convert between different bitmap depths */
 (DIR) diff --git a/libXg/menuhit.c b/libXg/menuhit.c
       @@ -117,7 +117,7 @@ menuscrollpaint(Rectangle scrollr, int off, int nitem, int nitemdrawn)
                r.max.y = scrollr.min.y + (Dy(scrollr)*(off+nitemdrawn))/nitem;
                if(r.max.y < r.min.y+2)
                        r.max.y = r.min.y+2;
       -        border(&screen, r, 1, F);
       +        border(&screen, r, 1, F, _bgpixel);
                if(menutxt == 0){
                        menutxt = balloc(Rect(0, 0, 16, 16), 0);
                        if(menutxt)
       @@ -197,7 +197,7 @@ menuhit(int but, Mouse *m, Menu *menu)
                        b = &screen;
                bitblt(b, menur.min, &screen, menur, S);
                bitblt(&screen, menur.min, &screen, menur, 0);
       -        border(&screen, menur, Blackborder, F);
       +        border(&screen, menur, Blackborder, F, _bgpixel);
                r = menurect(textr, lasti);
                cursorset(divpt(add(r.min, r.max), 2));
                menupaint(menu, textr, off, nitemdrawn);
 (DIR) diff --git a/libXg/xtbinit.c b/libXg/xtbinit.c
       @@ -41,8 +41,8 @@ XftColor bgcolor;
        extern char *machine;
        Display                *_dpy;
        Widget                _toplevel;
       -unsigned long        _fgpixel, _bgpixel, _cmdbgpixel;
       -XColor                _fgcolor, _bgcolor, _cmdbgcolor;
       +unsigned long        _fgpixel, _bgpixel, _cmdbgpixel, _borderpixel;
       +XColor                _fgcolor, _bgcolor, _cmdbgcolor, _bordercolor;
        int                _ld2d[6] = { 1, 2, 4, 8, 16, 24 };
        unsigned long        _ld2dmask[6] = { 0x1, 0x3, 0xF, 0xFF, 0xFFFF, 0x00FFFFFF };
        Colormap        _libg_cmap;
       @@ -163,7 +163,7 @@ xtbinit(Errfunc f, char *class, int *pargc, char **argv, char **fallbacks)
            widg = XtCreateManagedWidget("gwin", gwinWidgetClass, _toplevel, args, n);
        
            char bgspec[512] = {0};
       -    snprintf(bgspec, sizeof(bgspec) - 1, "%s", getenv("BACKGROUND") ? getenv("BACKGROUND") : "#ffffff");
       +    strncpy(bgspec, getenv("BACKGROUND") ? getenv("BACKGROUND") : "#ffffff", sizeof(bgspec) - 1);
           
            char tbg[512], cbg[512];
            if (sscanf(bgspec, "%511[^:]:%s", &tbg, &cbg) == 1)
       @@ -173,6 +173,7 @@ xtbinit(Errfunc f, char *class, int *pargc, char **argv, char **fallbacks)
            XAllocNamedColor(_dpy, DefaultColormap(_dpy, DefaultScreen(_dpy)), getenv("FOREGROUND") ? getenv("FOREGROUND") : "#000000", &_fgcolor, &_fgcolor);
            XAllocNamedColor(_dpy, DefaultColormap(_dpy, DefaultScreen(_dpy)), tbg, &_bgcolor, &_bgcolor);
            XAllocNamedColor(_dpy, DefaultColormap(_dpy, DefaultScreen(_dpy)), cbg, &_cmdbgcolor, &_cmdbgcolor);
       +    XAllocNamedColor(_dpy, DefaultColormap(_dpy, DefaultScreen(_dpy)), getenv("BORDER") ? getenv("BORDER") : "#add8e6", &_bordercolor, &_bordercolor);
        
            n = 0;
            XtSetArg(args[n], XtNdepth, &depth);                n++; 
       @@ -195,6 +196,7 @@ xtbinit(Errfunc f, char *class, int *pargc, char **argv, char **fallbacks)
            _fgpixel = _fgcolor.pixel;
            _bgpixel = _bgcolor.pixel;
            _cmdbgpixel = _cmdbgcolor.pixel;
       +    _borderpixel = _bordercolor.pixel;
        
            XRenderColor xrcolor = {0};
            xrcolor.red = _fgcolor.red;
 (DIR) diff --git a/libframe/frdelete.c b/libframe/frdelete.c
       @@ -53,10 +53,10 @@ frdelete(Frame *f, ulong p0, ulong p1)
                                r.max = pt1;
                                r.max.x += b->wid;
                                r.max.y += f->fheight;
       -                        bitblt2(f->b, pt0, f->b, r, S, f->bg);
       +                        bitblt2(f->b, pt0, f->b, r, S, 0, f->bg);
                                if(pt0.y == pt1.y)
                                        r.min.x = r.max.x-(pt1.x-pt0.x);
       -                        bitblt2(f->b, r.min, f->b, r, 0, f->bg);
       +                        bitblt2(f->b, r.min, f->b, r, 0, 0, f->bg);
                        }
                        _fradvance(f, &pt1, b);
                        pt0.x += _frnewwid(f, pt0, b);
       @@ -75,8 +75,8 @@ frdelete(Frame *f, ulong p0, ulong p1)
                                q0 = pt0.y+f->fheight;
                                q1 = pt1.y+f->fheight;
                                q2 = pt2.y+f->fheight;
       -                        bitblt2(f->b, pt0, f->b, Rect(pt1.x, pt1.y, f->r.max.x, q1), S, f->bg);
       -                        bitblt2(f->b, Pt(f->r.min.x, q0), f->b, Rect(f->r.min.x, q1, f->r.max.x, q2), S, f->bg);
       +                        bitblt2(f->b, pt0, f->b, Rect(pt1.x, pt1.y, f->r.max.x, q1), S, 0, f->bg);
       +                        bitblt2(f->b, Pt(f->r.min.x, q0), f->b, Rect(f->r.min.x, q1, f->r.max.x, q2), S, 0, f->bg);
                                frselectf(f, Pt(pt2.x, pt2.y-(pt1.y-pt0.y)), pt2, 0);
                        }else
                                frselectf(f, pt0, pt2, 0);
 (DIR) diff --git a/libframe/frinsert.c b/libframe/frinsert.c
       @@ -185,10 +185,10 @@ frinsert(Frame *f, Rune *sp, Rune *ep, ulong p0)
                                r.min.y = q0;
                                r.max.y = y-(q1-q0);
                                if(q1 < y)
       -                                bitblt2(f->b, Pt(f->r.min.x, q1), f->b, r, S, f->bg);
       +                                bitblt2(f->b, Pt(f->r.min.x, q1), f->b, r, S, 0, f->bg);
                                r.min = pt0;
                                r.max.y = q0;
       -                        bitblt2(f->b, pt1, f->b, r, S, f->bg);
       +                        bitblt2(f->b, pt1, f->b, r, S, 0, f->bg);
                        }
                }
                /*
       @@ -203,14 +203,14 @@ frinsert(Frame *f, Rune *sp, Rune *ep, ulong p0)
                                r.max = r.min;
                                r.max.x += b->wid;
                                r.max.y += f->fheight;
       -                        bitblt2(f->b, pt, f->b, r, S, f->bg);
       +                        bitblt2(f->b, pt, f->b, r, S, 0, f->bg);
                                if(pt.y < y){        /* clear bit hanging off right */
                                        r.min = pt;
                                        r.max = pt;
                                        r.min.x += b->wid;
                                        r.max.x = f->r.max.x;
                                        r.max.y += f->fheight;
       -                                bitblt2(f->b, r.min, f->b, r, 0, f->bg);
       +                                bitblt2(f->b, r.min, f->b, r, 0, 0, f->bg);
                                }
                                y = pt.y;
                        }else{
       @@ -220,7 +220,7 @@ frinsert(Frame *f, Rune *sp, Rune *ep, ulong p0)
                                r.max.y += f->fheight;
                                if(r.max.x >= f->r.max.x)
                                        r.max.x = f->r.max.x;
       -                        bitblt2(f->b, r.min, f->b, r, 0, f->bg);
       +                        bitblt2(f->b, r.min, f->b, r, 0, 0, f->bg);
                                y = (pt.x == f->left)? pt.y : 0;
                        }
                }
 (DIR) diff --git a/libframe/frselect.c b/libframe/frselect.c
       @@ -70,16 +70,16 @@ frselectf(Frame *f, Point p0, Point p1, Fcode c)
                                        q1.x++;
                                else
                                        p0.x--;
       -                bitblt2(f->b, p0, f->b, Rpt(p0, q1), c, f->bg);
       +                bitblt2(f->b, p0, f->b, Rpt(p0, q1), c, 0, f->bg);
                }else{
                        if(p0.x >= f->r.max.x)
                                p0.x = f->r.max.x-1;
       -                bitblt2(f->b, p0, f->b, Rect(p0.x, p0.y, f->r.max.x, q0.y), c, f->bg);
       +                bitblt2(f->b, p0, f->b, Rect(p0.x, p0.y, f->r.max.x, q0.y), c, 0, f->bg);
                        if(n > 1)
                                bitblt2(f->b, Pt(f->r.min.x, q0.y),
       -                                f->b, Rect(f->r.min.x, q0.y, f->r.max.x, p1.y), c, f->bg);
       +                                f->b, Rect(f->r.min.x, q0.y, f->r.max.x, p1.y), c, 0, f->bg);
                        bitblt2(f->b, Pt(f->r.min.x, p1.y),
       -                                f->b, Rect(f->r.min.x, p1.y, q1.x, q1.y), c, f->bg);
       +                                f->b, Rect(f->r.min.x, p1.y, q1.x, q1.y), c, 0, f->bg);
                }
        }
        
 (DIR) diff --git a/samterm/flayer.c b/samterm/flayer.c
       @@ -65,7 +65,7 @@ flinit(Flayer *l, Rectangle r, XftFont *ft, unsigned long bg)
                l->origin = l->p0 = l->p1 = 0;
                frinit(&l->f, inset(flrect(l, r), FLMARGIN), ft, &screen, bg);
                newvisibilities(1);
       -        bitblt2(&screen, l->entire.min, &screen, l->entire, 0, l->bg);
       +        bitblt2(&screen, l->entire.min, &screen, l->entire, 0, 0, l->bg);
                scrdraw(l, 0L);
                flborder(l, 0);
        }
       @@ -74,12 +74,12 @@ void
        flclose(Flayer *l)
        {
                if(l->visible == All)
       -                bitblt2(&screen, l->entire.min, &screen, l->entire, 0, l->bg);
       +                bitblt2(&screen, l->entire.min, &screen, l->entire, 0, 0, l->bg);
                else if(l->visible == Some){
                        if(l->f.b == 0)
                                l->f.b = balloc(l->entire, screen.ldepth);
                        if(l->f.b){
       -                        bitblt2(l->f.b, l->entire.min, l->f.b, l->entire, 0, l->bg);
       +                        bitblt2(l->f.b, l->entire.min, l->f.b, l->entire, 0, 0, l->bg);
                                flrefresh(l, l->entire, 0);
                        }
                }
       @@ -95,8 +95,8 @@ void
        flborder(Flayer *l, int wide)
        {
                if(flprepare(l)){
       -                border(l->f.b, l->entire, FLMARGIN, 0);
       -                border(l->f.b, l->entire, wide? FLMARGIN : 1, F&~D);
       +                border(l->f.b, l->entire, FLMARGIN, 0, l->bg);
       +                border(l->f.b, l->entire, wide? FLMARGIN : 1, F&~D, l->bg);
                        if(l->visible==Some)
                                flrefresh(l, l->entire, 0);
                }
       @@ -166,7 +166,7 @@ newvisibilities(int redraw)
        
                        case V(Some, All):
                                if(l->f.b){
       -                                bitblt2(&screen, l->entire.min, l->f.b, l->entire, S, l->bg);
       +                                bitblt2(&screen, l->entire.min, l->f.b, l->entire, S, 0, l->bg);
                                        bfree(l->f.b);
                                        l->f.b = &screen;
                                        break;
       @@ -319,7 +319,7 @@ flreshape(Rectangle dr)
                lDrect = dr;
                move = 0;
                /* no moving on rio; must repaint */
       -                bitblt2(&screen, lDrect.min, &screen, lDrect, 0, l->bg);
       +                bitblt2(&screen, lDrect.min, &screen, lDrect, 0, 0, l->bg);
                for(i=0; i<nllist; i++){
                        l = llist[i];
                        f = &l->f;
       @@ -371,8 +371,8 @@ flprepare(Flayer *l)
                                f->b = &screen;
                        else if((f->b = balloc(l->entire, screen.ldepth))==0)
                                return 0;
       -                bitblt2(f->b, l->entire.min, f->b, l->entire, 0, l->bg);
       -                border(f->b, l->entire, l==llist[0]? FLMARGIN : 1, F&~D);
       +                bitblt2(f->b, l->entire.min, f->b, l->entire, 0, 0, l->bg);
       +                border(f->b, l->entire, l==llist[0]? FLMARGIN : 1, F&~D, l->bg);
                        n = f->nchars;
                        frinit(f, f->entire, f->font, f->b, l->bg);
                        r = (*l->textfn)(l, n, &n);
       @@ -410,7 +410,7 @@ flrefresh(Flayer *l, Rectangle r, int i)
            Top:
                if((t=llist[i++]) == l){
                        if(!justvis)
       -                        bitblt2(&screen, r.min, l->f.b, r, S, l->bg);
       +                        bitblt2(&screen, r.min, l->f.b, r, S, 0, l->bg);
                        somevis = 1;
                }else{
                        if(!rectXrect(t->entire, r))
 (DIR) diff --git a/samterm/scroll.c b/samterm/scroll.c
       @@ -38,7 +38,7 @@ void
        scrflip(Flayer *l, Rectangle r)
        {
                if(rectclip(&r, l->scroll))
       -                bitblt2(l->f.b, r.min, l->f.b, r, F&~D, l->bg);
       +                bitblt2(l->f.b, r.min, l->f.b, r, F&~D, 0, l->bg);
        }
        
        void
       @@ -67,12 +67,12 @@ scrdraw(Flayer *l, long tot)
                        r1.max.x = Dx(r);
                }else
                        b = l->f.b;
       -        bitblt2(b, r1.min, b, r1, F, l->bg);
       +        bitblt2(b, r1.min, b, r1, F, 0, l->bg);
                texture(b, inset(r1, 1), darkgrey, S);
                r2 = scrpos(r1, l->origin, l->origin+l->f.nchars, tot);
       -        bitblt2(b, r2.min, b, r2, 0, l->bg);
       +        bitblt2(b, r2.min, b, r2, 0, 0, l->bg);
                if(b!=l->f.b)
       -                bitblt2(l->f.b, r.min, b, r1, S, l->bg);
       +                bitblt2(l->f.b, r.min, b, r1, S, 0, l->bg);
        }
        
        void