i don't think there are any tricks. here's a pretty minimal program
that displays colors. usage might be:
color 0x448844FF 0x000055FF
- erik
----
#include <u.h>
#include <libc.h>
#include <thread.h>
#include <draw.h>
#include <mouse.h>
#include <keyboard.h>
static Mousectl *m;
static long colors[1024];
static Image *c[1024];
static int ncolor;
int rflag;
void
redraw(int)
{
int i, x, y;
ulong chan;
chan = rflag ? CHAN3(CGreen, 8, CBlue, 8, CRed, 8) : RGB24;
if(c[0] == 0)
for(i = 0; i < ncolor; i++){
c[i] = allocimage(display, Rect(0, 0, 1, 1), chan, 1,
colors[i]);
if(c[i] == 0)
sysfatal("allocimage: %r");
}
x = screen->r.min.x;
y = screen->r.min.y;
for(i = 0; i < ncolor; i++){
draw(screen, Rect(x, y, x+48, y+48), c[i], nil, ZP);
x += 50;
if(x > screen->r.max.x-60){
x = screen->r.min.x;
y += 50;
}
}
}
void
resizeproc(void *)
{
for(; recv(m->resizec, 0);){
if(getwindow(display, Refnone) < 0){
fprint(2, "test: can't reattach to window\n");
threadexitsall("resize");
}
redraw(1);
flushimage(display, 1);
}
}
static void
drawe(Display*, char *e)
{
fprint(2, "%s\n", e);
threadexitsall("libdraw");
}
int
init(void)
{
// newwindow("-dx 300 -dy 300");
if(initdraw(drawe, 0, "test") < 0){
fprint(2, "test: initdraw failed: %r");
return -1;
}
m = initmouse(0, screen);
return 0;
}
void
kbdproc(void*)
{
Keyboardctl *k;
k = initkeyboard(0);
recv(k->c, 0);
threadexitsall("");
}
void
mouseproc(void*)
{
while(readmouse(m) >= 0)
;
threadexitsall("readmouse");
}
void
usage(void)
{
fprint(2, "usage: color [-r] color1 ...\n");
threadexitsall("usage");
}
void
threadmain(int argc, char *argv[])
{
ARGBEGIN{
case 'r':
rflag ^= rflag;
break;
default:
usage();
}ARGEND;
if(argc == 0)
usage();
if(argc > nelem(colors))
argc = nelem(colors);
for(ncolor = 0; ncolor < argc; ncolor++)
colors[ncolor] = strtoul(argv[ncolor], 0, 16);
if(init() < 0)
threadexitsall("initdraw");
redraw(1);
proccreate(kbdproc, 0, 1024);
proccreate(mouseproc, 0, 8192);
proccreate(resizeproc, 0, 8*8192);
for(;;)
sleep(10000);
}