+++ /dev/null
-/* xscreensaver, Copyright (c) 1992, 1996, 1998 Jamie Zawinski <jwz@jwz.org>
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation. No representations are made about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * 19971004: Johannes Keukelaar <johannes@nada.kth.se>: Use helix screen
- * eraser.
- */
-
-#include "screenhack.h"
-#include "erase.h"
-
-static GC draw_gc, erase_gc;
-static unsigned int default_fg_pixel;
-static int iterations, offset;
-static Bool xsym, ysym;
-static int sleep_time;
-
-static void
-init_rorschach (Display *dpy, Window window)
-{
- XGCValues gcv;
- Colormap cmap;
- XWindowAttributes xgwa;
- XGetWindowAttributes (dpy, window, &xgwa);
- cmap = xgwa.colormap;
- gcv.foreground = default_fg_pixel =
- get_pixel_resource ("foreground", "Foreground", dpy, cmap);
- draw_gc = XCreateGC (dpy, window, GCForeground, &gcv);
- gcv.foreground = get_pixel_resource ("background", "Background", dpy, cmap);
- erase_gc = XCreateGC (dpy, window, GCForeground, &gcv);
- iterations = get_integer_resource ("iterations", "Integer");
- offset = get_integer_resource ("offset", "Integer");
- if (offset <= 0) offset = 3;
- if (iterations < 10) iterations = 10;
- xsym = get_boolean_resource ("xsymmetry", "Symmetry");
- ysym = get_boolean_resource ("ysymmetry", "Symmetry");
-}
-
-static void
-hurm (Display *dpy, Window window)
-{
- Colormap cmap;
- XWindowAttributes xgwa;
- int xlim, ylim, x, y, i, got_color = 0;
- XPoint points [4];
- XColor color;
- XClearWindow (dpy, window);
- XGetWindowAttributes (dpy, window, &xgwa);
- xlim = xgwa.width;
- ylim = xgwa.height;
- cmap = xgwa.colormap;
-
- if (! mono_p)
- hsv_to_rgb (random()%360, 1.0, 1.0, &color.red, &color.green, &color.blue);
- if ((!mono_p) && (got_color = XAllocColor (dpy, cmap, &color)))
- XSetForeground (dpy, draw_gc, color.pixel);
- else
- XSetForeground (dpy, draw_gc, default_fg_pixel);
-
- x = xlim/2;
- y = ylim/2;
- for (i = 0; i < iterations; i++)
- {
- int j = 0;
- x += ((random () % (1 + (offset << 1))) - offset);
- y += ((random () % (1 + (offset << 1))) - offset);
- points [j].x = x;
- points [j].y = y;
- j++;
- if (xsym)
- {
- points [j].x = xlim - x;
- points [j].y = y;
- j++;
- }
- if (ysym)
- {
- points [j].x = x;
- points [j].y = ylim - y;
- j++;
- }
- if (xsym && ysym)
- {
- points [j].x = xlim - x;
- points [j].y = ylim - y;
- j++;
- }
- XDrawPoints (dpy, window, draw_gc, points, j, CoordModeOrigin);
- XSync (dpy, False);
- screenhack_handle_events (dpy);
- }
- sleep ( sleep_time );
-
- erase_full_window(dpy, window);
-
- XClearWindow (dpy, window);
- if (got_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0);
- XSync (dpy, False);
- screenhack_handle_events (dpy);
- sleep (1);
-}
-
-\f
-char *progclass = "Rorschach";
-
-char *defaults [] = {
- ".background: black",
- ".foreground: white",
- "*xsymmetry: true",
- "*ysymmetry: false",
- "*iterations: 4000",
- "*offset: 4",
- "*delay: 5",
- 0
-};
-
-XrmOptionDescRec options [] = {
- { "-iterations", ".iterations", XrmoptionSepArg, 0 },
- { "-offset", ".offset", XrmoptionSepArg, 0 },
- { "-xsymmetry", ".xsymmetry", XrmoptionNoArg, "true" },
- { "-ysymmetry", ".ysymmetry", XrmoptionNoArg, "true" },
- { "-erase-speed", ".eraseSpeed", XrmoptionSepArg, 0 },
- { "-delay", ".delay", XrmoptionSepArg, 0 },
- { 0, 0, 0, 0 }
-};
-
-void
-screenhack (Display *dpy, Window window)
-{
- sleep_time = get_integer_resource("delay", "Integer");
- init_rorschach (dpy, window);
- while (1)
- hurm (dpy, window);
-}