X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fwander.c;h=50fe255f45844b131fc19b9dc0183d89a56051d8;hb=39809ded547bdbb08207d3e514950425215b4410;hp=881b92cc0b479c10de751670b5e0a66cf5b3d895;hpb=4ade52359b6eba3621566dac79793a33aa4c915f;p=xscreensaver diff --git a/hacks/wander.c b/hacks/wander.c index 881b92cc..50fe255f 100644 --- a/hacks/wander.c +++ b/hacks/wander.c @@ -33,6 +33,7 @@ struct state { int height; unsigned int length; unsigned int reset; + Bool reset_p; unsigned int size; int width; int delay; @@ -83,7 +84,7 @@ wander_init (Display *dpy, Window window) XAllocColor (st->dpy, st->color_map, &st->colors [0]); XAllocColor (st->dpy, st->color_map, &st->colors [1]); } - st->color_index = random () % st->color_count; + st->color_index = NRAND (st->color_count); st->advance = get_integer_resource (st->dpy, "advance", "Integer"); st->density = get_integer_resource (st->dpy, "density", "Integer"); @@ -100,16 +101,16 @@ wander_init (Display *dpy, Window window) XSetForeground (st->dpy, st->context, st->colors [st->color_index].pixel); - st->x = random () % st->width; - st->y = random () % st->height; + st->x = NRAND (st->width); + st->y = NRAND (st->height); st->last_x = st->x; st->last_y = st->y; st->width_1 = st->width - 1; st->height_1 = st->height - 1; st->length_limit = st->length; st->reset_limit = st->reset; - st->color_index = random () % st->color_count; - st->color = st->colors [random () % st->color_count].pixel; + st->color_index = NRAND (st->color_count); + st->color = st->colors [NRAND (st->color_count)].pixel; st->pixmap = XCreatePixmap (st->dpy, window, st->size, st->size, st->depth); @@ -137,7 +138,7 @@ wander_draw (Display *dpy, Window window, void *closure) for (i = 0; i < 2000; i++) { - if (random () % st->density) + if (NRAND (st->density)) { st->x = st->last_x; st->y = st->last_y; @@ -146,15 +147,19 @@ wander_draw (Display *dpy, Window window, void *closure) { st->last_x = st->x; st->last_y = st->y; - st->x = (st->x + st->width_1 + (random () % 3)) % st->width; - st->y = (st->y + st->height_1 + (random () % 3)) % st->height; + st->x += st->width_1 + NRAND (3); + while (st->x >= st->width) + st->x -= st->width; + st->y += st->height_1 + NRAND (3); + while (st->y >= st->height) + st->y -= st->height; } - if ((random () % st->length_limit) == 0) + if (NRAND (st->length_limit) == 0) { if (st->advance == 0) { - st->color_index = random () % st->color_count; + st->color_index = NRAND (st->color_count); } else { @@ -169,12 +174,13 @@ wander_draw (Display *dpy, Window window, void *closure) } } - if ((random () % st->reset_limit) == 0) + if (st->reset_p || NRAND (st->reset_limit) == 0) { + st->reset_p = 0; st->eraser = erase_window (st->dpy, st->window, st->eraser); - st->color = st->colors [random () % st->color_count].pixel; - st->x = random () % st->width; - st->y = random () % st->height; + st->color = st->colors [NRAND (st->color_count)].pixel; + st->x = NRAND (st->width); + st->y = NRAND (st->height); st->last_x = st->x; st->last_y = st->y; if (st->circles) @@ -221,16 +227,26 @@ wander_reshape (Display *dpy, Window window, void *closure, static Bool wander_event (Display *dpy, Window window, void *closure, XEvent *event) { + struct state *st = (struct state *) closure; + if (screenhack_event_helper (dpy, window, event)) + { + st->reset_p = 1; + return True; + } return False; } static void wander_free (Display *dpy, Window window, void *closure) { + struct state *st = (struct state *) closure; + XFreeGC (st->dpy, st->context); + free (st); } static const char *wander_defaults [] = { + ".lowrez: true", ".background: black", ".foreground: white", ".fpsSolid: true", @@ -241,7 +257,7 @@ static const char *wander_defaults [] = ".reset: 2500000", ".circles: False", ".size: 1", -#ifdef USE_IPHONE +#ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0