int sweep;
int delay;
int anim;
+ int duration;
+ time_t start_time;
async_load_state *img_loader;
{
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);
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 */
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]);
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)
if (!st->anim)
st->sweep = 0;
+ st->start_time = time ((time_t) 0);
+
setup_X (st);
return st;
static const char *rotzoomer_defaults[] = {
".background: black",
".foreground: white",
+ "*fpsSolid: true",
#ifdef HAVE_XSHM_EXTENSION
"*useSHM: True",
#else
"*anim: True",
"*mode: stationary",
"*numboxes: 2",
- "*delay: 10",
+ "*delay: 10000",
+ "*duration: 120",
0
};
{ "-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)