From be71a952d5551b60f081ea06a3f1abacba5fcd3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Wed, 18 Mar 2026 19:03:26 +0100 Subject: [PATCH] Rice --- sys/include/draw.h | 2 +- sys/src/cmd/acme/acme.c | 10 +++++----- sys/src/cmd/rio/dat.h | 4 +++- sys/src/cmd/rio/data.c | 39 +++++++++++++++++++++++++++++++++------ sys/src/cmd/rio/fns.h | 2 +- sys/src/cmd/rio/rio.c | 17 +++++++++++------ sys/src/cmd/rio/wind.c | 3 ++- 7 files changed, 56 insertions(+), 21 deletions(-) diff --git a/sys/include/draw.h b/sys/include/draw.h index a67ecd189..e59ba8deb 100644 --- a/sys/include/draw.h +++ b/sys/include/draw.h @@ -61,7 +61,7 @@ enum { Displaybufsize = 8000, ICOSSCALE = 1024, - Borderwidth = 4, + Borderwidth = 8, }; enum diff --git a/sys/src/cmd/acme/acme.c b/sys/src/cmd/acme/acme.c index 269da52bf..853358717 100644 --- a/sys/src/cmd/acme/acme.c +++ b/sys/src/cmd/acme/acme.c @@ -872,16 +872,16 @@ iconinit(void) Image *tmp; /* Blue */ - tagcols[BACK] = allocimagemix(display, DPalebluegreen, DWhite); + tagcols[BACK] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0xFFF5DFFF); tagcols[HIGH] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DPalegreygreen); - tagcols[BORD] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DPurpleblue); + tagcols[BORD] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0xF9AC68FF); tagcols[TEXT] = display->black; tagcols[HTEXT] = display->black; /* Yellow */ - textcols[BACK] = allocimagemix(display, DPaleyellow, DWhite); + textcols[BACK] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DWhite); textcols[HIGH] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DDarkyellow); - textcols[BORD] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DYellowgreen); + textcols[BORD] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0xCCCCCCFF); textcols[TEXT] = display->black; textcols[HTEXT] = display->black; @@ -906,7 +906,7 @@ iconinit(void) freeimage(tmp); r = button->r; - colbutton = allocimage(display, r, screen->chan, 0, DPurpleblue); + colbutton = allocimage(display, r, screen->chan, 0, 0xF9AC68FF); but2col = allocimage(display, r, screen->chan, 1, 0xAA0000FF); but3col = allocimage(display, r, screen->chan, 1, 0x006600FF); diff --git a/sys/src/cmd/rio/dat.h b/sys/src/cmd/rio/dat.h index 498bccdc9..a822247d2 100644 --- a/sys/src/cmd/rio/dat.h +++ b/sys/src/cmd/rio/dat.h @@ -46,7 +46,8 @@ typedef struct Tapmesg Tapmesg; enum { - Selborder = 4, /* border of selected window */ + Outerborder = 4, /* outer white border */ + Selborder = 8, /* border of selected window */ Unselborder = 1, /* border of unselected window */ Scrollwid = 12, /* width of scroll bar */ Scrollgap = 4, /* gap right of scroll bar */ @@ -299,6 +300,7 @@ Cursor skull; Image *background; Image *cols[NCOL]; +Image *whitebordercol; Image *titlecol; Image *lighttitlecol; Image *dholdcol; diff --git a/sys/src/cmd/rio/data.c b/sys/src/cmd/rio/data.c index d65ca55f0..0ff08033d 100644 --- a/sys/src/cmd/rio/data.c +++ b/sys/src/cmd/rio/data.c @@ -184,24 +184,51 @@ Cursor *corners[9] = { &bl, &b, &br, }; +static Image* +loadwallpaper(char *file) +{ + enum { + Big = 0x3FFFFFFF + }; + int fd; + Image *i; + + fd = open(file, OREAD|OCEXEC); + if(fd < 0) + return nil; + i = readimage(display, fd, 0); + close(fd); + if(i != nil) + replclipr(i, 1, Rect(-Big, -Big, Big, Big)); + return i; +} + void -iconinit(void) +iconinit(char *wallpaper) { - background = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0x777777FF); + if(wallpaper != nil){ + background = loadwallpaper(wallpaper); + if(background == nil){ + fprint(2, "rio: can't load wallpaper %s: %r\n", wallpaper); + exits("wallpaper"); + } + }else + background = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0x000000FF); /* greys are multiples of 0x11111100+0xFF, 14* being palest */ cols[BACK] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0xFFFFFFFF^reverse); cols[BORD] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x999999FF^reverse); cols[TEXT] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x000000FF^reverse); cols[HTEXT] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x000000FF); + whitebordercol = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0xFFFFFFFF); if(!reverse) { cols[HIGH] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0xCCCCCCFF); - titlecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DGreygreen); - lighttitlecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DPalegreygreen); + titlecol = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0x000000FF); + lighttitlecol = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0x4D6B75FF); } else { cols[HIGH] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DPurpleblue); - titlecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DPurpleblue); - lighttitlecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x222222FF); + titlecol = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0x000000FF); + lighttitlecol = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0x4D6B75FF); } dholdcol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DMedblue); lightholdcol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DGreyblue); diff --git a/sys/src/cmd/rio/fns.h b/sys/src/cmd/rio/fns.h index 8562c2cd9..50b81d402 100644 --- a/sys/src/cmd/rio/fns.h +++ b/sys/src/cmd/rio/fns.h @@ -16,7 +16,7 @@ Timer* timerstart(int); void error(char*); void killprocs(void); int shutdown(void*, char*); -void iconinit(void); +void iconinit(char*); void *erealloc(void*, uint); void *emalloc(uint); char *estrdup(char*); diff --git a/sys/src/cmd/rio/rio.c b/sys/src/cmd/rio/rio.c index 6ed77f898..dad9a2630 100644 --- a/sys/src/cmd/rio/rio.c +++ b/sys/src/cmd/rio/rio.c @@ -113,20 +113,21 @@ derror(Display*, char *errorstr) void usage(void) { - fprint(2, "usage: rio [-b] [-f font] [-i initcmd] [-k kbdcmd] [-s]\n"); + fprint(2, "usage: rio [-b] [-f font] [-i initcmd] [-k kbdcmd] [-s] [-w wallpaper]\n"); exits("usage"); } void threadmain(int argc, char *argv[]) { - char *initstr, *kbdin, *s; + char *initstr, *kbdin, *s, *wallpaper; char buf[256]; Image *i; Rectangle r; initstr = nil; kbdin = nil; + wallpaper = nil; maxtab = 0; ARGBEGIN{ case 'b': @@ -146,6 +147,9 @@ threadmain(int argc, char *argv[]) case 's': scrolling = TRUE; break; + case 'w': + wallpaper = EARGF(usage()); + break; case 'D': debug++; break; @@ -182,7 +186,7 @@ threadmain(int argc, char *argv[]) fprint(2, "rio: can't open display: %r\n"); exits("display open"); } - iconinit(); + iconinit(wallpaper); exitchan = chancreate(sizeof(int), 0); winclosechan = chancreate(sizeof(Window*), 0); @@ -203,7 +207,7 @@ threadmain(int argc, char *argv[]) wscreen = allocscreen(screen, background, 0); if(wscreen == nil) error("can't allocate screen"); - draw(view, viewr, background, nil, ZP); + draw(view, viewr, background, nil, addpt(background->r.min, viewr.min)); flushimage(display, 1); timerinit(); @@ -664,7 +668,7 @@ resized(void) wscreen = allocscreen(screen, background, 0); if(wscreen == nil) error("can't re-allocate screen"); - draw(view, view->r, background, nil, ZP); + draw(view, view->r, background, nil, addpt(background->r.min, view->r.min)); o = subpt(viewr.max, viewr.min); n = subpt(view->clipr.max, view->clipr.min); qsort(window, nwindow, sizeof(window[0]), wtopcmp); @@ -893,7 +897,8 @@ sweep(void) if(i == nil) goto Rescue; oi = i; - border(i, r, Selborder, sizecol, ZP); + border(i, r, Outerborder, whitebordercol, ZP); + border(i, insetrect(r, Outerborder), Selborder-Outerborder, sizecol, ZP); draw(i, insetrect(r, Selborder), cols[BACK], nil, ZP); } } diff --git a/sys/src/cmd/rio/wind.c b/sys/src/cmd/rio/wind.c index 37e7afda7..a50e6d60c 100644 --- a/sys/src/cmd/rio/wind.c +++ b/sys/src/cmd/rio/wind.c @@ -308,7 +308,8 @@ wborder(Window *w, int type) else col = lighttitlecol; } - border(w->i, w->i->r, Selborder, col, ZP); + border(w->i, w->i->r, Outerborder, whitebordercol, ZP); + border(w->i, insetrect(w->i->r, Outerborder), Selborder-Outerborder, col, ZP); } static void -- 2.53.0