X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fhelix.c;h=7ca03da7760377aed93d87006bac39bb71ae977d;hb=2d04c4f22466851aedb6ed0f2919d148f726b889;hp=cb6bd38b3e91b96848748b04a9283c9df03dfb86;hpb=186b0b9f1638444c650c9273df38085e0db71e4a;p=xscreensaver diff --git a/hacks/helix.c b/hacks/helix.c index cb6bd38b..7ca03da7 100644 --- a/hacks/helix.c +++ b/hacks/helix.c @@ -1,5 +1,5 @@ /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997 - * Jamie Zawinski + * 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 @@ -19,6 +19,9 @@ * 1992: jwz created. */ +/* 25 April 2002: Matthew Strait added +-subdelay option so the drawing process can be watched */ + #include #include "screenhack.h" #include "erase.h" @@ -26,12 +29,10 @@ static double sins [360]; static double coss [360]; -static GC draw_gc, erase_gc; +static GC draw_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 int sleep_time; +static int subdelay; static void init_helix (Display *dpy, Window window) @@ -46,7 +47,6 @@ init_helix (Display *dpy, Window window) get_pixel_resource ("foreground", "Foreground", dpy, cmap); draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); gcv.foreground = get_pixel_resource ("background", "Background", dpy, cmap); - erase_gc = XCreateGC (dpy, window, GCForeground, &gcv); for (i = 0; i < 360; i++) { @@ -103,9 +103,12 @@ helix (Display *dpy, Window window, XDrawLine (dpy, window, draw_gc, x1, y1, x2, y2); x2 = xmid + (((double) radius2) * sins [pmod ((angle * factor3), 360)]); y2 = ymid + (((double) radius1) * coss [pmod ((angle * factor4), 360)]); - XDrawLine (dpy, window, draw_gc, x1, y1, x2, y2); angle += d_angle; + + /* if we sleep every time, it's too slow */ + if(subdelay && i%16 == 0) usleep(subdelay); + XFlush (dpy); } } @@ -143,6 +146,12 @@ trig (Display *dpy, Window window, if (tmp == 0) /* Do not want it getting stuck... */ tmp = 1; /* Would not need if floating point */ d_angle += dir * tmp; + + /* this draws faster, so we sleep somewhat more often */ + if(subdelay && d_angle%4 == 0) usleep(subdelay); + + /* without this, the subdelay effect is lost */ + XFlush (dpy); } } @@ -257,7 +266,6 @@ random_trig (Display *dpy, Window window, XColor *color, Bool *got_color) static void random_helix_or_trig (Display *dpy, Window window) { - int i; Bool free_color = False; XColor color; int width, height; @@ -273,13 +281,16 @@ random_helix_or_trig (Display *dpy, Window window) else random_trig(dpy, window, &color, &free_color); - XSync (dpy, True); + XSync (dpy, False); + screenhack_handle_events (dpy); sleep ( sleep_time ); - erase_window(dpy, window, erase_gc, width, height, erase_mode, erase_speed); + screenhack_handle_events (dpy); + erase_full_window(dpy, window); if (free_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0); - XSync (dpy, True); + XSync (dpy, False); + screenhack_handle_events (dpy); sleep (1); } @@ -287,27 +298,24 @@ random_helix_or_trig (Display *dpy, Window window) char *progclass = "Helix"; char *defaults [] = { - "Helix.background: black", /* to placate SGI */ - "Helix.eraseSpeed: 400", - "Helix.delay: 5", - "Helix.eraseMode: -1", + ".background: black", + "*delay: 5", + "*subdelay: 0", 0 }; XrmOptionDescRec options [] = { - { "-erase-speed", ".eraseSpeed", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, - { "-erase-mode", ".eraseMode", XrmoptionSepArg, 0 }, - { 0 }, + { "-subdelay", ".subdelay", XrmoptionSepArg, 0 }, + { 0, 0, 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"); + subdelay = get_integer_resource("subdelay", "Integer"); init_helix (dpy, window); while (1) random_helix_or_trig (dpy, window);