X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fspotlight.c;h=aade77df66dfa1eb3b0e4505147838ecc601a646;hb=50be9bb40dc60130c99ffa568e6677779904ff70;hp=fffa6a83bcbaa4f836328676409a6ef38036abba;hpb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439;p=xscreensaver diff --git a/hacks/spotlight.c b/hacks/spotlight.c index fffa6a83..aade77df 100644 --- a/hacks/spotlight.c +++ b/hacks/spotlight.c @@ -1,6 +1,6 @@ /* * spotlight - an xscreensaver module - * Copyright (c) 1999, 2001 Rick Schultz + * Copyright (c) 1999, 2001 Rick Schultz * * loosely based on the BackSpace module "StefView" by Darcy Brockbank */ @@ -32,9 +32,13 @@ 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; @@ -87,7 +91,7 @@ spotlight_init (Display *dpy, Window window) XWindowAttributes xgwa; long gcflags; Colormap cmap; - unsigned long fg, bg; + unsigned long bg; GC clip_gc; Pixmap clip_pm; @@ -96,15 +100,17 @@ spotlight_init (Display *dpy, Window window) 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; @@ -129,7 +135,6 @@ spotlight_init (Display *dpy, Window window) #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); @@ -152,6 +157,7 @@ spotlight_init (Display *dpy, Window 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); @@ -193,9 +199,19 @@ onestep (struct state *st, Bool first_p) 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; @@ -287,18 +303,21 @@ static const char *spotlight_defaults [] = { ".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 } };