1 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997, 1998
2 * Jamie Zawinski <jwz@jwz.org>
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation. No representations are made about the suitability of this
9 * software for any purpose. It is provided "as is" without express or
13 #include "screenhack.h"
18 # include <X11/bitmaps/stipple>
19 # include <X11/bitmaps/cross_weave>
20 # include <X11/bitmaps/dimple1>
21 # include <X11/bitmaps/dimple3>
22 # include <X11/bitmaps/flipped_gray>
23 # include <X11/bitmaps/gray1>
24 # include <X11/bitmaps/gray3>
25 # include <X11/bitmaps/hlines2>
26 # include <X11/bitmaps/light_gray>
27 # include <X11/bitmaps/root_weave>
28 # include <X11/bitmaps/vlines2>
29 # include <X11/bitmaps/vlines3>
31 # include "sys$common:[decw$include.bitmaps]stipple.xbm"
32 # include "sys$common:[decw$include.bitmaps]cross_weave.xbm"
33 # include "sys$common:[decw$include.bitmaps]dimple1.xbm"
34 # include "sys$common:[decw$include.bitmaps]dimple3.xbm"
35 # include "sys$common:[decw$include.bitmaps]flipped_gray.xbm"
36 # include "sys$common:[decw$include.bitmaps]gray1.xbm"
37 # include "sys$common:[decw$include.bitmaps]gray3.xbm"
38 # include "sys$common:[decw$include.bitmaps]hlines2.xbm"
39 # include "sys$common:[decw$include.bitmaps]light_gray.xbm"
40 # include "sys$common:[decw$include.bitmaps]root_weave.xbm"
41 # include "sys$common:[decw$include.bitmaps]vlines2.xbm"
42 # include "sys$common:[decw$include.bitmaps]vlines3.xbm"
45 static Pixmap pixmaps [NBITS];
48 static unsigned long fg, bg, pixels [512];
52 init_greynetic (Display *dpy, Window window)
56 XWindowAttributes xgwa;
58 XGetWindowAttributes (dpy, window, &xgwa);
61 gcv.foreground= fg= get_pixel_resource("foreground","Foreground", dpy, cmap);
62 gcv.background= bg= get_pixel_resource("background","Background", dpy, cmap);
63 gcv.fill_style= FillOpaqueStippled;
64 gc = XCreateGC (dpy, window, GCForeground|GCBackground|GCFillStyle, &gcv);
66 delay = get_integer_resource ("delay", "Integer");
67 if (delay < 0) delay = 0;
71 pixmaps [i++] = XCreatePixmapFromBitmapData (dpy, window, n, w, h, 1, 0, 1)
73 BITS (stipple_bits, stipple_width, stipple_height);
74 BITS (cross_weave_bits, cross_weave_width, cross_weave_height);
75 BITS (dimple1_bits, dimple1_width, dimple1_height);
76 BITS (dimple3_bits, dimple3_width, dimple3_height);
77 BITS (flipped_gray_bits, flipped_gray_width, flipped_gray_height);
78 BITS (gray1_bits, gray1_width, gray1_height);
79 BITS (gray3_bits, gray3_width, gray3_height);
80 BITS (hlines2_bits, hlines2_width, hlines2_height);
81 BITS (light_gray_bits, light_gray_width, light_gray_height);
82 BITS (root_weave_bits, root_weave_width, root_weave_height);
83 BITS (vlines2_bits, vlines2_width, vlines2_height);
84 BITS (vlines3_bits, vlines3_width, vlines3_height);
88 greynetic (Display *dpy, Window window)
90 static int tick = 500, xlim, ylim;
92 int x, y, w=0, h=0, i;
96 XWindowAttributes xgwa;
97 XGetWindowAttributes (dpy, window, &xgwa);
101 cmap = xgwa.colormap;
103 for (i = 0; i < 10; i++) /* minimize area, but don't try too hard */
105 w = 50 + random () % (xlim - 50);
106 h = 50 + random () % (ylim - 50);
107 if (w + h < xlim && w + h < ylim)
110 x = random () % (xlim - w);
111 y = random () % (ylim - h);
112 gcv.stipple = pixmaps [random () % NBITS];
117 gcv.foreground = fg, gcv.background = bg;
119 gcv.foreground = bg, gcv.background = fg;
124 if (npixels == sizeof (pixels) / sizeof (unsigned long))
126 fgc.flags = bgc.flags = DoRed|DoGreen|DoBlue;
128 fgc.green = random ();
129 fgc.blue = random ();
131 bgc.green = random ();
132 bgc.blue = random ();
133 if (! XAllocColor (dpy, cmap, &fgc))
135 pixels [npixels++] = fgc.pixel;
136 gcv.foreground = fgc.pixel;
137 if (! XAllocColor (dpy, cmap, &bgc))
139 pixels [npixels++] = bgc.pixel;
140 gcv.background = bgc.pixel;
148 gcv.foreground = pixels [random () % npixels];
149 gcv.background = pixels [random () % npixels];
153 XChangeGC (dpy, gc, GCStipple|GCForeground|GCBackground, &gcv);
154 XFillRectangle (dpy, window, gc, x, y, w, h);
159 char *progclass = "Greynetic";
161 char *defaults [] = {
162 ".background: black",
163 ".foreground: white",
168 XrmOptionDescRec options [] = {
169 { "-delay", ".delay", XrmoptionSepArg, 0 },
174 screenhack (Display *dpy, Window window)
176 init_greynetic (dpy, window);
179 greynetic (dpy, window);
180 screenhack_handle_events (dpy);
181 if (delay) usleep (delay);