From http://www.jwz.org/xscreensaver/xscreensaver-5.35.tar.gz
[xscreensaver] / hacks / strange.c
index eba88a90c08f7c53c27b5eb55884373b05afe685..b1739acd534a7977e46bdd7c05de57c5325261d1 100644 (file)
@@ -38,12 +38,11 @@ static const char sccsid[] = "@(#)strange.c 5.00 2000/11/01 xlockmore";
 # define MODE_strange
 # define DEFAULTS      "*delay: 10000 \n" \
                                        "*ncolors: 100 \n" \
-                                       "*fpsSolid: True \n"
+                                       "*fpsSolid: True \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define SMOOTH_COLORS
 # define refresh_strange 0
-# define reshape_strange 0
-# define strange_handle_event 0
 # include "xlockmore.h"                /* from the xscreensaver distribution */
 #else /* !STANDALONE */
 # include "xlock.h"            /* from the xlockmore distribution */
@@ -83,7 +82,7 @@ ModStruct   strange_description =
 "Shows strange attractors", 0, NULL};
 #endif
 
-#ifdef HAVE_COCOA
+#ifdef HAVE_JWXYZ
 # define NO_DBUF
 #endif
 
@@ -142,7 +141,7 @@ typedef struct _ATTRACTOR {
 static ATTRACTOR *Root = (ATTRACTOR *) NULL; 
 
 #ifdef useAccumulator
-XColor* cols;
+static XColor* cols;
 #endif
 
 #ifdef POINTS_HISTORY
@@ -578,18 +577,18 @@ init_strange(ModeInfo * mi)
 
                gcv.foreground = 0;
                gcv.background = 0;
-#ifndef HAVE_COCOA
+#ifndef HAVE_JWXYZ
                gcv.graphics_exposures = False;
-#endif /* HAVE_COCOA */
+#endif /* HAVE_JWXYZ */
                gcv.function = GXcopy;
 
                if (Attractor->dbuf_gc != None)
                        XFreeGC(display, Attractor->dbuf_gc);
 
                if ((Attractor->dbuf_gc = XCreateGC(display, Attractor->dbuf,
-#ifndef HAVE_COCOA
+#ifndef HAVE_JWXYZ
                                GCGraphicsExposures |
-#endif /* HAVE_COCOA */
+#endif /* HAVE_JWXYZ */
                                GCFunction | GCForeground | GCBackground,
                                &gcv)) == None) {
                        XFreePixmap(display, Attractor->dbuf);
@@ -663,6 +662,13 @@ init_strange(ModeInfo * mi)
        XSetGraphicsExposures(display, MI_GC(mi), False);
 }
 
+ENTRYPOINT void
+reshape_strange(ModeInfo * mi, int width, int height)
+{
+  XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi));
+  init_strange (mi);
+}
+
 /***************************************************************/
 
 ENTRYPOINT void
@@ -690,6 +696,18 @@ release_strange(ModeInfo * mi)
        }
 }
 
+ENTRYPOINT Bool
+strange_handle_event (ModeInfo *mi, XEvent *event)
+{
+  if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+    {
+      reshape_strange (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+      return True;
+    }
+  return False;
+}
+
+
 XSCREENSAVER_MODULE ("Strange", strange)
 
 #endif /* MODE_strange */