X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Frotzoomer.c;h=610b952030c49c8d2eb6e9a84ab2798d23cccd2a;hb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;hp=29a566275445ae07a6e70bacd5698a057e9bae53;hpb=07faf451b99879183ed7e909e43a0e065be1ee7f;p=xscreensaver diff --git a/hacks/rotzoomer.c b/hacks/rotzoomer.c index 29a56627..610b9520 100644 --- a/hacks/rotzoomer.c +++ b/hacks/rotzoomer.c @@ -59,6 +59,8 @@ struct state { int sweep; int delay; int anim; + int duration; + time_t start_time; async_load_state *img_loader; @@ -264,6 +266,7 @@ init_hack (struct state *st) { int i; + st->start_time = time ((time_t) 0); st->zoom_box = calloc (st->num_zoom, sizeof (struct zoom_area *)); for (i = 0; i < st->num_zoom; i++) { st->zoom_box[i] = create_zoom (st); @@ -281,7 +284,7 @@ static unsigned long rotzoomer_draw (Display *disp, Window win, void *closure) { struct state *st = (struct state *) closure; - int delay = (st->delay * 1000); + int delay = st->delay; int i; if (st->img_loader) /* still loading */ @@ -295,6 +298,16 @@ rotzoomer_draw (Display *disp, Window win, void *closure) return st->delay; } + if (!st->img_loader && + st->start_time + st->duration < time ((time_t) 0)) { + XWindowAttributes xgwa; + XGetWindowAttributes(st->dpy, st->window, &xgwa); + st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, + st->window, 0, 0); + st->start_time = time ((time_t) 0); + return st->delay; + } + for (i = 0; i < st->num_zoom; i++) { if (st->move || st->sweep) update_position (st->zoom_box[i]); @@ -395,6 +408,9 @@ rotzoomer_init (Display *dpy, Window window) st->anim = get_boolean_resource (st->dpy, "anim", "Boolean"); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); + st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); + if (st->delay < 0) st->delay = 0; + if (st->duration < 1) st->duration = 1; /* In sweep or static mode, we want only one box */ if (st->sweep || !st->anim) @@ -404,6 +420,8 @@ rotzoomer_init (Display *dpy, Window window) if (!st->anim) st->sweep = 0; + st->start_time = time ((time_t) 0); + setup_X (st); return st; @@ -432,6 +450,7 @@ rotzoomer_free (Display *dpy, Window window, void *closure) static const char *rotzoomer_defaults[] = { ".background: black", ".foreground: white", + "*fpsSolid: true", #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", #else @@ -440,7 +459,8 @@ static const char *rotzoomer_defaults[] = { "*anim: True", "*mode: stationary", "*numboxes: 2", - "*delay: 10", + "*delay: 10000", + "*duration: 120", 0 }; @@ -454,9 +474,10 @@ static XrmOptionDescRec rotzoomer_options[] = { { "-anim", ".anim", XrmoptionNoArg, "True" }, { "-no-anim", ".anim", XrmoptionNoArg, "False" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, + {"-duration", ".duration", XrmoptionSepArg, 0 }, { "-n", ".numboxes", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; -XSCREENSAVER_MODULE ("Rotzoomer", rotzoomer) +XSCREENSAVER_MODULE ("RotZoomer", rotzoomer)