/*
* spotlight - an xscreensaver module
- * Copyright (c) 1999, 2001 Rick Schultz <rick@skapunx.net>
+ * Copyright (c) 1999, 2001 Rick Schultz <rick.schultz@gmail.com>
*
* loosely based on the BackSpace module "StefView" by Darcy Brockbank
*/
struct state {
Display *dpy;
Window window;
+ Screen *screen;
int sizex, sizey; /* screen size */
- int delay; /* in case it's too fast... */
+ int delay;
+ int duration;
+ time_t start_time;
+
GC window_gc;
#ifdef DEBUG
GC white_gc;
XWindowAttributes xgwa;
long gcflags;
Colormap cmap;
- unsigned long fg, bg;
+ unsigned long bg;
GC clip_gc;
Pixmap clip_pm;
st->first_p = True;
XGetWindowAttributes (st->dpy, st->window, &xgwa);
+ st->screen = xgwa.screen;
st->sizex = xgwa.width;
st->sizey = xgwa.height;
cmap = xgwa.colormap;
- fg = get_pixel_resource (st->dpy, cmap, "foreground", "Foreground");
bg = get_pixel_resource (st->dpy, cmap, "background", "Background");
/* read parameters, keep em sane */
st->delay = get_integer_resource (st->dpy, "delay", "Integer");
if (st->delay < 1) st->delay = 1;
+ st->duration = get_integer_resource (st->dpy, "duration", "Seconds");
+ if (st->duration < 1) st->duration = 1;
st->radius = get_integer_resource (st->dpy, "radius", "Integer");
if (st->radius < 0) st->radius = 125;
#endif
st->window_gc = XCreateGC(st->dpy, st->window, gcflags, &gcv);
- /* grab screen to pixmap */
st->pm = XCreatePixmap(st->dpy, st->window, st->sizex, st->sizey, xgwa.depth);
XClearWindow(st->dpy, st->window);
clip_pm = XCreatePixmap(st->dpy, st->window, st->radius*4, st->radius*4, 1);
st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->pm,
0, 0);
+ st->start_time = time ((time_t) 0);
gcv.foreground = 0L;
clip_gc = XCreateGC(st->dpy, clip_pm, gcflags, &gcv);
if (st->img_loader) /* still loading */
{
st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0);
+ if (! st->img_loader) { /* just finished */
+ st->start_time = time ((time_t) 0);
+ }
return;
}
+ if (!st->img_loader &&
+ st->start_time + st->duration < time ((time_t) 0)) {
+ st->img_loader = load_image_async_simple (0, st->screen, st->window,
+ st->pm, 0, 0);
+ return;
+ }
+
#define nrnd(x) (random() % (x))
st->oldx = st->x;
".background: black",
".foreground: white",
"*dontClearRoot: True",
+ "*fpsSolid: true",
#ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */
"*visualID: Best",
#endif
"*delay: 10000",
+ "*duration: 120",
"*radius: 125",
0
};
static XrmOptionDescRec spotlight_options [] = {
{ "-delay", ".delay", XrmoptionSepArg, 0 },
+ { "-duration", ".duration", XrmoptionSepArg, 0 },
{ "-radius", ".radius", XrmoptionSepArg, 0 },
{ 0, 0, 0, 0 }
};