X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fgreynetic.c;h=0f0747d17035ea1975115d1f25fb2c317968ee55;hb=6a1da724858673ac40aa13a9612340d8bed8c7b9;hp=79e89c69f2c57354ab606be09fa6f90d13fccdc1;hpb=0a1527cc01e9894017614b7c36b838b2b6914ba9;p=xscreensaver diff --git a/hacks/greynetic.c b/hacks/greynetic.c index 79e89c69..0f0747d1 100644 --- a/hacks/greynetic.c +++ b/hacks/greynetic.c @@ -1,4 +1,5 @@ -/* xscreensaver, Copyright (c) 1992 Jamie Zawinski +/* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997, 1998, 2003 + * 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 @@ -13,18 +14,76 @@ #define NBITS 12 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +/* On some systems (notably MacOS X) these files are messed up. + * They're tiny, so we might as well just inline them here. + * + * # include + * # include + * # include + * # include + * # include + * # include + * # include + * # include + * # include + * # include + * # include + * # include +*/ + +#define stipple_width 16 +#define stipple_height 4 +static unsigned char stipple_bits[] = { + 0x55, 0x55, 0xee, 0xee, 0x55, 0x55, 0xba, 0xbb}; + +#define cross_weave_width 16 +#define cross_weave_height 16 +static unsigned char cross_weave_bits[] = { + 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, + 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, + 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22}; + +#define dimple1_width 16 +#define dimple1_height 16 +static unsigned char dimple1_bits[] = { + 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, + 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, + 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00}; + +#define dimple3_width 16 +#define dimple3_height 16 +static unsigned char dimple3_bits[] = { + 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define flipped_gray_width 4 +#define flipped_gray_height 2 +static char flipped_gray_bits[] = { 0x07, 0x0d}; +#define gray1_width 2 +#define gray1_height 2 +static char gray1_bits[] = { 0x01, 0x02}; +#define gray3_width 4 +#define gray3_height 4 +static char gray3_bits[] = { 0x01, 0x00, 0x04, 0x00}; +#define hlines2_width 1 +#define hlines2_height 2 +static char hlines2_bits[] = { 0x01, 0x00}; +#define light_gray_width 4 +#define light_gray_height 2 +static char light_gray_bits[] = { 0x08, 0x02}; +#define root_weave_width 4 +#define root_weave_height 4 +static char root_weave_bits[] = { 0x07, 0x0d, 0x0b, 0x0e}; +#define vlines2_width 2 +#define vlines2_height 1 +static char vlines2_bits[] = { 0x01}; +#define vlines3_width 3 +#define vlines3_height 1 +static char vlines3_bits[] = { 0x02}; + + + static Pixmap pixmaps [NBITS]; static GC gc; @@ -33,9 +92,7 @@ static unsigned long fg, bg, pixels [512]; static int npixels; static void -init_greynetic (dpy, window) - Display *dpy; - Window window; +init_greynetic (Display *dpy, Window window) { int i; XGCValues gcv; @@ -54,7 +111,8 @@ init_greynetic (dpy, window) i = 0; #define BITS(n,w,h) \ - pixmaps [i++] = XCreatePixmapFromBitmapData (dpy, window, n, w, h, 1, 0, 1) + pixmaps [i++] = \ + XCreatePixmapFromBitmapData (dpy, window, (char *) n, w, h, 1, 0, 1) BITS (stipple_bits, stipple_width, stipple_height); BITS (cross_weave_bits, cross_weave_width, cross_weave_height); @@ -71,13 +129,11 @@ init_greynetic (dpy, window) } static void -greynetic (dpy, window) - Display *dpy; - Window window; +greynetic (Display *dpy, Window window) { static int tick = 500, xlim, ylim; static Colormap cmap; - int x, y, w, h, i; + int x, y, w=0, h=0, i; XGCValues gcv; if (tick++ == 500) { @@ -100,7 +156,8 @@ greynetic (dpy, window) gcv.stipple = pixmaps [random () % NBITS]; if (mono_p) { - if (random () % 1) + MONO: + if (random () & 1) gcv.foreground = fg, gcv.background = bg; else gcv.foreground = bg, gcv.background = fg; @@ -127,6 +184,11 @@ greynetic (dpy, window) gcv.background = bgc.pixel; goto DONE; REUSE: + if (npixels <= 0) + { + mono_p = 1; + goto MONO; + } gcv.foreground = pixels [random () % npixels]; gcv.background = pixels [random () % npixels]; DONE: @@ -134,33 +196,32 @@ greynetic (dpy, window) } XChangeGC (dpy, gc, GCStipple|GCForeground|GCBackground, &gcv); XFillRectangle (dpy, window, gc, x, y, w, h); - XSync (dpy, True); + XSync (dpy, False); } char *progclass = "Greynetic"; char *defaults [] = { - "*background: black", - "*foreground: white", - "*delay: 0", + ".background: black", + ".foreground: white", + "*delay: 10000", 0 }; XrmOptionDescRec options [] = { - { "-delay", ".delay", XrmoptionSepArg, 0 } + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { 0, 0, 0, 0 } }; -int options_size = (sizeof (options) / sizeof (options[0])); void -screenhack (dpy, window) - Display *dpy; - Window window; +screenhack (Display *dpy, Window window) { init_greynetic (dpy, window); while (1) { greynetic (dpy, window); + screenhack_handle_events (dpy); if (delay) usleep (delay); } }