Allow a configurable border color. - sam - An updated version of the sam text e… | |
git clone git://vernunftzentrum.de/sam.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 24c99b85f003d2e76ca80334f5e8604e8ef15398 | |
parent bbfde92dd63eb2d1d28f48aff13ecd90e6574c76 | |
Author: Rob King <[email protected]> | |
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(-) | |
--- | |
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, unsigne… | |
+extern void bitblt2(Bitmap*, Point, Bitmap*, Rectangle, Fcode, unsigne… | |
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*); | |
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,… | |
{ | |
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, … | |
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); | |
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, _bor… | |
+ 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, _bor… | |
+ 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, … | |
+ 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, … | |
}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, _bor… | |
+ 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, _bor… | |
+ 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, … | |
+ 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, … | |
} | |
} | |
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 … | |
{ | |
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, unsign… | |
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, u… | |
{ | |
unsigned long spix, df, sf; | |
int xf, c; | |
XGCValues gcv; | |
unsigned long gcvm; | |
- unsigned long fg = _fgpixel; | |
- | |
f &= F; | |
gcvm = 0; | |
df = db->flag; | |
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); | |
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, uns… | |
+extern GC _getcopygc2(Fcode, Bitmap*, Bitmap*, int*, unsigned long, uns… | |
extern GC _getgc(Bitmap*, unsigned long, XGCValues *); | |
/* convert between different bitmap depths */ | |
diff --git a/libXg/menuhit.c b/libXg/menuhit.c | |
@@ -117,7 +117,7 @@ menuscrollpaint(Rectangle scrollr, int off, int nitem, int … | |
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); | |
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, ch… | |
widg = XtCreateManagedWidget("gwin", gwinWidgetClass, _toplevel, args, n); | |
char bgspec[512] = {0}; | |
- snprintf(bgspec, sizeof(bgspec) - 1, "%s", getenv("BACKGROUND") ? getenv("… | |
+ strncpy(bgspec, getenv("BACKGROUND") ? getenv("BACKGROUND") : "#ffffff", s… | |
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, ch… | |
XAllocNamedColor(_dpy, DefaultColormap(_dpy, DefaultScreen(_dpy)), getenv(… | |
XAllocNamedColor(_dpy, DefaultColormap(_dpy, DefaultScreen(_dpy)), tbg, &_… | |
XAllocNamedColor(_dpy, DefaultColormap(_dpy, DefaultScreen(_dpy)), cbg, &_… | |
+ XAllocNamedColor(_dpy, DefaultColormap(_dpy, DefaultScreen(_dpy)), getenv(… | |
n = 0; | |
XtSetArg(args[n], XtNdepth, &depth); n++; | |
@@ -195,6 +196,7 @@ xtbinit(Errfunc f, char *class, int *pargc, char **argv, ch… | |
_fgpixel = _fgcolor.pixel; | |
_bgpixel = _bgcolor.pixel; | |
_cmdbgpixel = _cmdbgcolor.pixel; | |
+ _borderpixel = _bordercolor.pixel; | |
XRenderColor xrcolor = {0}; | |
xrcolor.red = _fgcolor.red; | |
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… | |
- bitblt2(f->b, Pt(f->r.min.x, q0), f->b, Rect(f->r.min.… | |
+ bitblt2(f->b, pt0, f->b, Rect(pt1.x, pt1.y, f->r.max.x… | |
+ bitblt2(f->b, Pt(f->r.min.x, q0), f->b, Rect(f->r.min.… | |
frselectf(f, Pt(pt2.x, pt2.y-(pt1.y-pt0.y)), pt2, 0); | |
}else | |
frselectf(f, pt0, pt2, 0); | |
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, … | |
+ bitblt2(f->b, Pt(f->r.min.x, q1), f->b, r, S, … | |
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; | |
} | |
} | |
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,… | |
+ bitblt2(f->b, p0, f->b, Rect(p0.x, p0.y, f->r.max.x, q0.y), c,… | |
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)… | |
+ f->b, Rect(f->r.min.x, q0.y, f->r.max.x, p1.y)… | |
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… | |
+ f->b, Rect(f->r.min.x, p1.y, q1.x, q1.y), c, 0… | |
} | |
} | |
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->b… | |
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… | |
+ bitblt2(l->f.b, l->entire.min, l->f.b, l->entire, 0, 0… | |
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->ent… | |
+ bitblt2(&screen, l->entire.min, l->f.b, l->ent… | |
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)) | |
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 |