#define HEIGHT 632 /* 548 */
#define SHELLCOUNT 4 /* FIXED NUMBER; for SSE optimization */
#define PIXCOUNT 500 /* 500 */
-#define SHELL_LIFE_DEFAULT 3200 /* 3200 */
+#define SHELL_LIFE_DEFAULT 32 /* 32 */
#define SHELL_LIFE_RATIO 6 /* 6 */
#define POWDER 5.0 /* 5.0 */
#define FTWEAK 12 /* 12 */
int depth;
int bigendian;
int ncolors;
+ Bool button_down_p;
+ int deferred;
+
};
/*
{
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;
st->shoot = get_boolean_resource(st->dpy, "shoot" , "Boolean");
st->verbose = get_boolean_resource(st->dpy, "verbose" , "Boolean");
st->max_shell_life = get_integer_resource(st->dpy, "maxlife" , "Integer");
+ /* transition from xscreensaver <= 5.20 */
+ if (st->max_shell_life > 100) st->max_shell_life = 100;
+
st->delay = get_integer_resource(st->dpy, "delay" , "Integer");
st->max_shell_life = pow(10.0,(st->max_shell_life/50.0)+2.7);
{
st->colors = (XColor *) calloc(sizeof(XColor),st->ncolors+1);
writable = False;
- make_smooth_colormap(st->dpy, vi, cmap, st->colors, &st->ncolors,
+ make_smooth_colormap(xwa.screen, vi, cmap,
+ st->colors, &st->ncolors,
False, &writable, True);
}
st->gc = XCreateGC(st->dpy, win, 0, &gcv);
{
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)
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;
}