1 /* xscreensaver, Copyright (c) 1992 Jamie Zawinski <jwz@lucid.com>
3 * Permission to use, copy, modify, distribute, and sell this software and its
4 * documentation for any purpose is hereby granted without fee, provided that
5 * the above copyright notice appear in all copies and that both that
6 * copyright notice and this permission notice appear in supporting
7 * documentation. No representations are made about the suitability of this
8 * software for any purpose. It is provided "as is" without express or
12 #include "screenhack.h"
16 #include <X11/bitmaps/stipple>
17 #include <X11/bitmaps/cross_weave>
18 #include <X11/bitmaps/dimple1>
19 #include <X11/bitmaps/dimple3>
20 #include <X11/bitmaps/flipped_gray>
21 #include <X11/bitmaps/gray1>
22 #include <X11/bitmaps/gray3>
23 #include <X11/bitmaps/hlines2>
24 #include <X11/bitmaps/light_gray>
25 #include <X11/bitmaps/root_weave>
26 #include <X11/bitmaps/vlines2>
27 #include <X11/bitmaps/vlines3>
29 static Pixmap pixmaps [NBITS];
32 static unsigned long fg, bg, pixels [512];
36 init_greynetic (dpy, window)
42 XWindowAttributes xgwa;
44 XGetWindowAttributes (dpy, window, &xgwa);
47 gcv.foreground= fg= get_pixel_resource("foreground","Foreground", dpy, cmap);
48 gcv.background= bg= get_pixel_resource("background","Background", dpy, cmap);
49 gcv.fill_style= FillOpaqueStippled;
50 gc = XCreateGC (dpy, window, GCForeground|GCBackground|GCFillStyle, &gcv);
52 delay = get_integer_resource ("delay", "Integer");
53 if (delay < 0) delay = 0;
57 pixmaps [i++] = XCreatePixmapFromBitmapData (dpy, window, n, w, h, 1, 0, 1)
59 BITS (stipple_bits, stipple_width, stipple_height);
60 BITS (cross_weave_bits, cross_weave_width, cross_weave_height);
61 BITS (dimple1_bits, dimple1_width, dimple1_height);
62 BITS (dimple3_bits, dimple3_width, dimple3_height);
63 BITS (flipped_gray_bits, flipped_gray_width, flipped_gray_height);
64 BITS (gray1_bits, gray1_width, gray1_height);
65 BITS (gray3_bits, gray3_width, gray3_height);
66 BITS (hlines2_bits, hlines2_width, hlines2_height);
67 BITS (light_gray_bits, light_gray_width, light_gray_height);
68 BITS (root_weave_bits, root_weave_width, root_weave_height);
69 BITS (vlines2_bits, vlines2_width, vlines2_height);
70 BITS (vlines3_bits, vlines3_width, vlines3_height);
74 greynetic (dpy, window)
78 static int tick = 500, xlim, ylim;
84 XWindowAttributes xgwa;
85 XGetWindowAttributes (dpy, window, &xgwa);
91 for (i = 0; i < 10; i++) /* minimize area, but don't try too hard */
93 w = 50 + random () % (xlim - 50);
94 h = 50 + random () % (ylim - 50);
95 if (w + h < xlim && w + h < ylim)
98 x = random () % (xlim - w);
99 y = random () % (ylim - h);
100 gcv.stipple = pixmaps [random () % NBITS];
104 gcv.foreground = fg, gcv.background = bg;
106 gcv.foreground = bg, gcv.background = fg;
111 if (npixels == sizeof (pixels) / sizeof (unsigned long))
113 fgc.flags = bgc.flags = DoRed|DoGreen|DoBlue;
115 fgc.green = random ();
116 fgc.blue = random ();
118 bgc.green = random ();
119 bgc.blue = random ();
120 if (! XAllocColor (dpy, cmap, &fgc))
122 pixels [npixels++] = fgc.pixel;
123 gcv.foreground = fgc.pixel;
124 if (! XAllocColor (dpy, cmap, &bgc))
126 pixels [npixels++] = bgc.pixel;
127 gcv.background = bgc.pixel;
130 gcv.foreground = pixels [random () % npixels];
131 gcv.background = pixels [random () % npixels];
135 XChangeGC (dpy, gc, GCStipple|GCForeground|GCBackground, &gcv);
136 XFillRectangle (dpy, window, gc, x, y, w, h);
141 char *progclass = "Greynetic";
143 char *defaults [] = {
144 "*background: black",
145 "*foreground: white",
150 XrmOptionDescRec options [] = {
151 { "-delay", ".delay", XrmoptionSepArg, 0 }
153 int options_size = (sizeof (options) / sizeof (options[0]));
156 screenhack (dpy, window)
160 init_greynetic (dpy, window);
163 greynetic (dpy, window);
164 if (delay) usleep (delay);