added "-b" option to set background image. Notes: Wed Apr 6 09:47:12 EDT 2005 rsc Rob doesn't believe in these kind of options, and neither do I. Same reason there aren't options to set the colors used by rio/acme/sam, etc. A few people have proposed this over the years, and I'm glad it's easy. ;-) Russ Reference: /n/sources/patch/saved/rio-background Date: Sun Feb 24 00:53:57 CET 2008 Reviewed-by: geoff --- /sys/src/cmd/rio/fns.h Sun Feb 24 00:53:56 2008 +++ /sys/src/cmd/rio/fns.h Sun Feb 24 00:53:56 2008 @@ -16,7 +16,7 @@ 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*); --- /sys/src/cmd/rio/data.c Sun Feb 24 00:53:56 2008 +++ /sys/src/cmd/rio/data.c Sun Feb 24 00:53:55 2008 @@ -173,8 +173,25 @@ }; void -iconinit(void) +iconinit(char *bf) { - background = allocimage(display, Rect(0,0,1,1), RGB24, 1, 0x777777FF); + int fd; + Image *bimg = nil; + + if(bf != nil){ + fd = open(bf, OREAD); + if(fd >= 0){ + bimg = readimage(display, fd, 0); + close(fd); + }else + fprint(2, "iconinit: %r\n"); + } + + if(bimg == nil) + background = allocimage(display, Rect(0,0,1,1), RGB24, 1, 0x777777FF); + else{ + background = allocimage(display, Rect(0, 0, Dx(bimg->r), Dy(bimg->r)), RGB24, 1, 0xFFFFFFFF); + draw(background, background->r, bimg, 0, bimg->r.min); + } red = allocimage(display, Rect(0,0,1,1), RGB24, 1, 0xDD0000FF); } --- /sys/src/cmd/rio/rio.c Sun Feb 24 00:53:57 2008 +++ /sys/src/cmd/rio/rio.c Sun Feb 24 00:53:57 2008 @@ -42,7 +42,7 @@ void deletethread(void*); void initcmd(void*); -char *fontname; +char *fontname, *backname; int mainpid; enum @@ -111,7 +111,7 @@ void usage(void) { - fprint(2, "usage: rio [-f font] [-i initcmd] [-k kbdcmd] [-s]\n"); + fprint(2, "usage: rio [-f background] [-f font] [-i initcmd] [-k kbdcmd] [-s]\n"); exits("usage"); } @@ -132,6 +132,11 @@ kbdin = nil; maxtab = 0; ARGBEGIN{ + case 'b': + backname = ARGF(); + if(backname == nil) + usage(); + break; case 'f': fontname = ARGF(); if(fontname == nil) @@ -182,7 +187,7 @@ fprint(2, "rio: can't open display: %r\n"); exits("display open"); } - iconinit(); + iconinit(backname); view = screen; viewr = view->r; mousectl = initmouse(nil, screen); @@ -195,7 +200,7 @@ wscreen = allocscreen(screen, background, 0); if(wscreen == nil) error("can't allocate screen"); - draw(view, viewr, background, nil, ZP); + draw(view, viewr, background, nil, viewr.min); flushimage(display, 1); exitchan = chancreate(sizeof(int), 0); @@ -612,7 +617,7 @@ 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, view->r.min); o = subpt(viewr.max, viewr.min); n = subpt(view->clipr.max, view->clipr.min); for(i=0; i