X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fcoral.c;h=7621d5eee4818b4b8b830547f9c77fc24535cf46;hb=06e9a7886a77cad92f9ddbc169d6d199a4d8b76d;hp=2cf5b114026ae9cdc592a930eeaf0b13cec96cf5;hpb=5b7bc6e70fb439cf4c4bf771ae9f94077fe4fe08;p=xscreensaver diff --git a/hacks/coral.c b/hacks/coral.c index 2cf5b114..7621d5ee 100644 --- a/hacks/coral.c +++ b/hacks/coral.c @@ -21,12 +21,12 @@ static int ncolors = 0; static int colorindex = 0; static int colorsloth; -static XPoint *walkers; +static XPoint *walkers = 0; static int nwalkers; static int width, widthb; static int height; -static unsigned int *board; +static unsigned int *board = 0; #define getdot(x,y) (board[(y*widthb)+(x>>5)] & (1<<(x & 31))) #define setdot(x,y) (board[(y*widthb)+(x>>5)] |= (1<<(x & 31))) @@ -47,6 +47,7 @@ init_coral(Display *dpy, Window window) width = xgwa.width; widthb = ((xgwa.width + 31) >> 5); height = xgwa.height; + if (board) free(board); board = (unsigned int *)calloc(widthb * xgwa.height, sizeof(unsigned int)); if(!board) exit(1); cmap = xgwa.colormap; @@ -73,6 +74,7 @@ init_coral(Display *dpy, Window window) if( density < 1 ) density = 1; if( density > 100 ) density = 90; /* more like mold than coral */ nwalkers = (width*height*density)/100; + if (walkers) free(walkers); walkers = (XPoint *)calloc(nwalkers, sizeof(XPoint)); if( (XPoint *)0 == walkers ) exit(1); @@ -168,7 +170,7 @@ coral(Display *dpy, Window window) XDrawPoints(dpy, window, draw_gc, pointbuf, npoints, CoordModeOrigin); npoints = 0; - XSync(dpy, True); + XSync(dpy, False); } if (color) { @@ -179,7 +181,7 @@ coral(Display *dpy, Window window) } if( 0 == nwalkers ) { - XSync(dpy, True); + XSync(dpy, False); free(pointbuf); return; } @@ -215,8 +217,9 @@ coral(Display *dpy, Window window) XDrawPoints(dpy, window, draw_gc, pointbuf, npoints, CoordModeOrigin); npoints = 0; - XSync(dpy, True); + XSync(dpy, False); } + screenhack_handle_events (dpy); usleep(delay2); } } @@ -225,15 +228,13 @@ coral(Display *dpy, Window window) char *progclass = "Coral"; char *defaults[] = { - "Coral.background: black", - "Coral.foreground: white", - "*density: 25", - "*seeds: 20", /* too many for 640x480, too few for 1280x1024 */ - "*delay: 5", - "*delay2: 1000", - "*eraseSpeed: 400", - "*eraseMode: -1", - 0 + ".background: black", + ".foreground: white", + "*density: 25", + "*seeds: 20", /* too many for 640x480, too few for 1280x1024 */ + "*delay: 5", + "*delay2: 1000", + 0 }; XrmOptionDescRec options[] = { @@ -241,8 +242,6 @@ XrmOptionDescRec options[] = { { "-seeds", ".seeds", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-delay2", ".delay2", XrmoptionSepArg, 0 }, - { "-erase-speed", ".eraseSpeed", XrmoptionSepArg, 0 }, - { "-erase-mode", ".eraseMode", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; @@ -255,6 +254,7 @@ Window window; while( 1 ) { init_coral(dpy, window); coral(dpy, window); + screenhack_handle_events (dpy); if( delay ) sleep(delay); erase_full_window(dpy, window); }