From bfacf5a78ddf09baa32c8d6c23d2dfb89d59c15d Mon Sep 17 00:00:00 2001 From: rodri Date: Wed, 1 Jul 2020 21:44:44 +0000 Subject: add better brush color management. fix issues with procrfork. replace procexecl with execl. fclamp is now part of libgeometry so get rid of it. --- main.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 647c3b0..c5f06a6 100644 --- a/main.c +++ b/main.c @@ -16,7 +16,7 @@ enum { RFrame worldrf; Image *background; Canvas *curcanvas; -Image *brushcolor; +Color *brushcolor; Image *pal[NCOLOR]; int zoom = 1; @@ -235,7 +235,7 @@ pickerproc(void *arg) snprint(mntdesc, sizeof mntdesc, "-pid %d -dx %d -dy %d", getpid(), 384, 320); newwindow(mntdesc); - procexecl(nil, "/bin/picker", "picker", "-e", nil); + execl("/bin/picker", "picker", "-e", nil); threadexits("procexecl: %r"); } @@ -323,9 +323,9 @@ rmb(Mousectl *mc, Keyboardctl *kc) case SETCOLOR: if(pipe(pfd) < 0) sysfatal("pipe: %r"); - procrfork(pickerproc, pfd, 4096, RFFDG|RFNAMEG); + procrfork(pickerproc, pfd, 4096, RFFDG|RFNAMEG|RFNOTEG); close(pfd[0]); - fprint(pfd[1], "0 %08ux\n", 0x000000ff); + fprint(pfd[1], "0 %08ulx\n", brushcolor->v); n = read(pfd[1], buf, sizeof(buf)-1); close(pfd[1]); if(n < 0) @@ -334,7 +334,8 @@ rmb(Mousectl *mc, Keyboardctl *kc) s = buf; while(*s && *s++ != '\t') ; - brushcolor = eallocimage(display, Rect(0,0,1,1), screen->chan, 1, strtoul(s, nil, 16)); + rmcolor(brushcolor); + brushcolor = newcolor(strtoul(s, nil, 16)); break; case SAVE: if(curcanvas == nil) @@ -401,7 +402,7 @@ lmb(Mousectl *mc, Keyboardctl *) mpos = rframexform(mpos, *curcanvas); p = Pt(mpos.x,mpos.y); - draw(curcanvas->curlayer->image, rectaddpt(r, p), brushcolor, nil, ZP); + draw(curcanvas->curlayer->image, rectaddpt(r, p), brushcolor->i, nil, ZP); redraw(); for(;;){ oldp = p; @@ -415,7 +416,7 @@ lmb(Mousectl *mc, Keyboardctl *) p = Pt(mpos.x,mpos.y); if(eqpt(p, oldp)) continue; - line(curcanvas->curlayer->image, oldp, p, Endsquare, Endsquare, 0, brushcolor, ZP); + line(curcanvas->curlayer->image, oldp, p, Endsquare, Endsquare, 0, brushcolor->i, ZP); redraw(); } } @@ -499,7 +500,7 @@ threadmain(int argc, char *argv[]) worldrf.by = Vec2(0,1); initpalette(); background = mkcheckerboard(4, 4); - brushcolor = pal[PCBlack]; + brushcolor = newcolor(DBlack); display->locking = 1; unlockdisplay(display); -- cgit v1.2.3