X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fslidescreen.c;h=60d2fd4c1015a0c8d14547671b40866663f46941;hb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;hp=42d3fefca029a6b10a03d81b640f7f334f942f90;hpb=07faf451b99879183ed7e909e43a0e065be1ee7f;p=xscreensaver diff --git a/hacks/slidescreen.c b/hacks/slidescreen.c index 42d3fefc..60d2fd4c 100644 --- a/hacks/slidescreen.c +++ b/hacks/slidescreen.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992-2006 Jamie Zawinski +/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -25,6 +25,7 @@ struct state { int xoff, yoff; int grid_w, grid_h; int delay, delay2; + int duration; GC gc; unsigned long fg, bg; int max_width, max_height; @@ -36,6 +37,7 @@ struct state { int draw_last; int draw_initted; + time_t start_time; async_load_state *img_loader; }; @@ -54,6 +56,7 @@ slidescreen_init (Display *dpy, Window window) 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); visual = xgwa.visual; st->max_width = xgwa.width; @@ -61,6 +64,7 @@ slidescreen_init (Display *dpy, Window window) st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->delay2 = get_integer_resource (st->dpy, "delay2", "Integer"); + st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); st->grid_size = get_integer_resource (st->dpy, "gridSize", "Integer"); st->pix_inc = get_integer_resource (st->dpy, "pixelIncrement", "Integer"); @@ -72,6 +76,7 @@ slidescreen_init (Display *dpy, Window window) if (st->delay < 0) st->delay = 0; if (st->delay2 < 0) st->delay2 = 0; + if (st->duration < 1) st->duration = 1; if (st->pix_inc < 1) st->pix_inc = 1; if (st->grid_size < 1) st->grid_size = 1; @@ -303,11 +308,24 @@ slidescreen_draw (Display *dpy, Window window, void *closure) 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 */ + if (! st->img_loader) { /* just finished */ + st->start_time = time ((time_t) 0); draw_grid (st); + } 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); + st->draw_initted = 0; + return st->delay; + } + if (! st->draw_initted) { if (!slidescreen_draw_early (st)) @@ -429,6 +447,7 @@ slidescreen_free (Display *dpy, Window window, void *closure) static const char *slidescreen_defaults [] = { "*dontClearRoot: True", + "*fpsSolid: true", #ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */ "*visualID: Best", @@ -441,6 +460,7 @@ static const char *slidescreen_defaults [] = { "*internalBorderWidth: 4", "*delay: 50000", "*delay2: 1000000", + "*duration: 120", 0 }; @@ -450,7 +470,8 @@ static XrmOptionDescRec slidescreen_options [] = { { "-increment", ".pixelIncrement", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-delay2", ".delay2", XrmoptionSepArg, 0 }, + {"-duration", ".duration", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; -XSCREENSAVER_MODULE ("Slidescreen", slidescreen) +XSCREENSAVER_MODULE ("SlideScreen", slidescreen)