X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Ffireworkx.c;h=faf3745e23a160240ba3f391e85c20861ee86efe;hb=c85f503f5793839a6be4c818332aca4a96927bb2;hp=11bc5e5b478c3755443ed12437dcfe22da1ef17f;hpb=4ade52359b6eba3621566dac79793a33aa4c915f;p=xscreensaver diff --git a/hacks/fireworkx.c b/hacks/fireworkx.c index 11bc5e5b..faf3745e 100644 --- a/hacks/fireworkx.c +++ b/hacks/fireworkx.c @@ -100,6 +100,9 @@ struct state int depth; int bigendian; int ncolors; + Bool button_down_p; + int deferred; + }; /* @@ -140,8 +143,8 @@ static void render_light_map(struct state *st, fireshell *fs) { for (x = 0; x < st->width; x += 2, v += SHELLCOUNT) { - float f; - f = sqrtf((fs->cx - x) * (fs->cx - x) + (fs->cy - y) * (fs->cy - y)) + 4.0; + double f; + f = sqrt((fs->cx - x) * (fs->cx - x) + (fs->cy - y) * (fs->cy - y)) + 4.0; f = FLASH_ZOOM / f; f += pow(f,0.1) * frand(0.0001); /* dither */ st->light_map[v] = f; @@ -777,11 +780,19 @@ fireworkx_draw (Display *dpy, Window win, void *closure) { if (!explode(st, fs)) { - recycle(st, fs, rnd(st->width), rnd(st->height)); + if (st->button_down_p) + st->deferred++; + else + recycle(st, fs, rnd(st->width), rnd(st->height)); } } } + while (!st->button_down_p && st->deferred) { + st->deferred--; + recycle_oldest(st, rnd(st->width), rnd(st->height)); + } + glow_blur(st); if (st->flash_on) @@ -810,8 +821,15 @@ fireworkx_event (Display *dpy, Window window, void *closure, XEvent *event) if (event->type == ButtonPress) { recycle_oldest(st, event->xbutton.x, event->xbutton.y); + st->button_down_p = True; + return True; + } + else if (event->type == ButtonRelease) + { + st->button_down_p = False; return True; } + return False; }