From http://www.jwz.org/xscreensaver/xscreensaver-5.30.tar.gz
[xscreensaver] / hacks / crystal.c
index 491577a2511944f2827768419f04c1dc35319d55..8b077c88fa29725db65cb11d5c23280f184f4bc3 100644 (file)
@@ -74,10 +74,9 @@ static const char sccsid[] = "@(#)crystal.c  4.12 98/09/10 xlockmore";
                                                 "*cycles:                200   \n" \
                                                 "*size:                  -15   \n" \
                                                 "*ncolors:               100   \n" \
-                                                "*fpsSolid:              true  \n" \
+                                                "*fpsSolid:       True \n" \
+                                                "*ignoreRotation: True \n" \
 
-# define reshape_crystal 0
-# define crystal_handle_event 0
 # include "xlockmore.h"                /* in xscreensaver distribution */
 #else /* STANDALONE */
 # include "xlock.h"                    /* in xlockmore distribution */
@@ -583,7 +582,8 @@ draw_crystal(ModeInfo * mi)
 
 /* Rotate colours */
        if (cryst->cycle_p) {
-               rotate_colors(display, cryst->cmap, cryst->colors, cryst->ncolors,
+               rotate_colors(mi->xgwa.screen, cryst->cmap,
+                      cryst->colors, cryst->ncolors,
                              cryst->direction);
                if (!(LRAND() % 1000))
                        cryst->direction = -cryst->direction;
@@ -809,7 +809,8 @@ release_crystal(ModeInfo * mi)
                                MI_BG_PIXEL(mi) = cryst->bg;
 #endif
                                if (cryst->colors && cryst->ncolors && !cryst->no_colors)
-                                       free_colors(display, cryst->cmap, cryst->colors, cryst->ncolors);
+                                       free_colors(mi->xgwa.screen, cryst->cmap, cryst->colors,
+                                cryst->ncolors);
                                if (cryst->colors)
                                        (void) free((void *) cryst->colors);
 #if 0 /* #### wrong! -jwz */
@@ -1176,7 +1177,8 @@ init_crystal(ModeInfo * mi)
        if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) {
 /* Set up colour map */
                if (cryst->colors && cryst->ncolors && !cryst->no_colors)
-                       free_colors(display, cryst->cmap, cryst->colors, cryst->ncolors);
+                       free_colors(mi->xgwa.screen, cryst->cmap,
+                        cryst->colors, cryst->ncolors);
                if (cryst->colors)
                        (void) free((void *) cryst->colors);
                cryst->colors = 0;
@@ -1205,14 +1207,20 @@ init_crystal(ModeInfo * mi)
                }
                if (!cryst->mono_p) {
                        if (!(LRAND() % 10))
-                               make_random_colormap(MI_DISPLAY(mi), MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors,
-                                               True, True, &cryst->cycle_p, True);
+                               make_random_colormap(mi->xgwa.screen, MI_VISUAL(mi),
+                                     cryst->cmap, cryst->colors,
+                                     &cryst->ncolors,
+                                     True, True, &cryst->cycle_p, True);
                        else if (!(LRAND() % 2))
-                               make_uniform_colormap(MI_DISPLAY(mi), MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors,
-                                                     True, &cryst->cycle_p, True);
+                               make_uniform_colormap(mi->xgwa.screen, MI_VISUAL(mi),
+                                      cryst->cmap, cryst->colors,
+                                      &cryst->ncolors, True,
+                                      &cryst->cycle_p, True);
                        else
-                               make_smooth_colormap(MI_DISPLAY(mi), MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors,
-                                                    True, &cryst->cycle_p, True);
+                               make_smooth_colormap(mi->xgwa.screen, MI_VISUAL(mi),
+                                     cryst->cmap, cryst->colors,
+                                     &cryst->ncolors,
+                                     True, &cryst->cycle_p, True);
                }
 #if 0 /* #### wrong! -jwz */
                XInstallColormap(display, cryst->cmap);
@@ -1270,4 +1278,22 @@ init_crystal(ModeInfo * mi)
        XSetFunction(display, cryst->gc, GXcopy);
 }
 
+ENTRYPOINT void
+reshape_crystal(ModeInfo * mi, int width, int height)
+{
+  release_crystal(mi);
+  init_crystal(mi);
+}
+
+ENTRYPOINT Bool
+crystal_handle_event (ModeInfo *mi, XEvent *event)
+{
+  if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+    {
+      reshape_crystal (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+      return True;
+    }
+  return False;
+}
+
 XSCREENSAVER_MODULE ("Crystal", crystal)