X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fhelix.c;h=cb6bd38b3e91b96848748b04a9283c9df03dfb86;hb=186b0b9f1638444c650c9273df38085e0db71e4a;hp=758c5557e1a7ef1d57cf44688603a088753576cc;hpb=f3e0240915ed9f9b3a61781f5c7002d587563fe0;p=xscreensaver diff --git a/hacks/helix.c b/hacks/helix.c index 758c5557..cb6bd38b 100644 --- a/hacks/helix.c +++ b/hacks/helix.c @@ -12,19 +12,26 @@ /* Algorithm from a Mac program by Chris Tate, written in 1988 or so. */ -/* 10-May-97: merged ellipse code by Dan Stromberg +/* 18-Sep-97: Johannes Keukelaar (johannes@nada.kth.se): Improved screen + * eraser. + * 10-May-97: merged ellipse code by Dan Stromberg * as found in xlockmore 4.03a10. * 1992: jwz created. */ #include #include "screenhack.h" +#include "erase.h" static double sins [360]; static double coss [360]; static GC draw_gc, erase_gc; static unsigned int default_fg_pixel; +static int erase_speed, sleep_time, erase_mode; + +void erase_window (Display *dpy, Window win, GC gc, int width, int height, + int mode, int delay); static void init_helix (Display *dpy, Window window) @@ -267,17 +274,10 @@ random_helix_or_trig (Display *dpy, Window window) random_trig(dpy, window, &color, &free_color); XSync (dpy, True); - sleep (5); + sleep ( sleep_time ); + + erase_window(dpy, window, erase_gc, width, height, erase_mode, erase_speed); - for (i = 0; i < height; i++) - { - int y = (random () % height); - XDrawLine (dpy, window, erase_gc, 0, y, width, y); - XFlush (dpy); - if ((i % 50) == 0) - usleep (10000); - } - XClearWindow (dpy, window); if (free_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0); XSync (dpy, True); sleep (1); @@ -288,14 +288,26 @@ char *progclass = "Helix"; char *defaults [] = { "Helix.background: black", /* to placate SGI */ + "Helix.eraseSpeed: 400", + "Helix.delay: 5", + "Helix.eraseMode: -1", 0 }; -XrmOptionDescRec options [] = { { 0, } }; +XrmOptionDescRec options [] = { + { "-erase-speed", ".eraseSpeed", XrmoptionSepArg, 0 }, + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { "-erase-mode", ".eraseMode", XrmoptionSepArg, 0 }, + { 0 }, +}; +int options_size = (sizeof (options) / sizeof (options[0])); void screenhack (Display *dpy, Window window) { + erase_speed = get_integer_resource("eraseSpeed", "Integer"); + sleep_time = get_integer_resource("delay", "Integer"); + erase_mode = get_integer_resource("eraseMode", "Integer"); init_helix (dpy, window); while (1) random_helix_or_trig (dpy, window);