1 /* xscreensaver, Copyright (c) 1992, 1996 Jamie Zawinski <jwz@jwz.org>
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
11 * 19971004: Johannes Keukelaar <johannes@nada.kth.se>: Use helix screen
15 #include "screenhack.h"
18 static GC draw_gc, erase_gc;
19 static unsigned int default_fg_pixel;
20 static int iterations, offset;
21 static Bool xsym, ysym;
22 static int sleep_time;
25 init_rorschach (Display *dpy, Window window)
29 XWindowAttributes xgwa;
30 XGetWindowAttributes (dpy, window, &xgwa);
32 gcv.foreground = default_fg_pixel =
33 get_pixel_resource ("foreground", "Foreground", dpy, cmap);
34 draw_gc = XCreateGC (dpy, window, GCForeground, &gcv);
35 gcv.foreground = get_pixel_resource ("background", "Background", dpy, cmap);
36 erase_gc = XCreateGC (dpy, window, GCForeground, &gcv);
37 iterations = get_integer_resource ("iterations", "Integer");
38 offset = get_integer_resource ("offset", "Integer");
39 if (offset <= 0) offset = 3;
40 if (iterations < 10) iterations = 10;
41 xsym = get_boolean_resource ("xsymmetry", "Symmetry");
42 ysym = get_boolean_resource ("ysymmetry", "Symmetry");
46 hurm (Display *dpy, Window window)
49 XWindowAttributes xgwa;
50 int xlim, ylim, x, y, i, got_color = 0;
53 XClearWindow (dpy, window);
54 XGetWindowAttributes (dpy, window, &xgwa);
60 hsv_to_rgb (random()%360, 1.0, 1.0, &color.red, &color.green, &color.blue);
61 if ((!mono_p) && (got_color = XAllocColor (dpy, cmap, &color)))
62 XSetForeground (dpy, draw_gc, color.pixel);
64 XSetForeground (dpy, draw_gc, default_fg_pixel);
68 for (i = 0; i < iterations; i++)
71 x += ((random () % (1 + (offset << 1))) - offset);
72 y += ((random () % (1 + (offset << 1))) - offset);
78 points [j].x = xlim - x;
85 points [j].y = ylim - y;
90 points [j].x = xlim - x;
91 points [j].y = ylim - y;
94 XDrawPoints (dpy, window, draw_gc, points, j, CoordModeOrigin);
99 erase_full_window(dpy, window);
101 XClearWindow (dpy, window);
102 if (got_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0);
108 char *progclass = "Rorschach";
110 char *defaults [] = {
111 ".background: black",
112 ".foreground: white",
121 XrmOptionDescRec options [] = {
122 { "-iterations", ".iterations", XrmoptionSepArg, 0 },
123 { "-offset", ".offset", XrmoptionSepArg, 0 },
124 { "-xsymmetry", ".xsymmetry", XrmoptionNoArg, "true" },
125 { "-ysymmetry", ".ysymmetry", XrmoptionNoArg, "true" },
126 { "-erase-speed", ".eraseSpeed", XrmoptionSepArg, 0 },
127 { "-delay", ".delay", XrmoptionSepArg, 0 },
132 screenhack (Display *dpy, Window window)
134 sleep_time = get_integer_resource("delay", "Integer");
135 init_rorschach (dpy, window);