From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / hacks / grav.c
index eee53be460166251cff8faf55480563f9561aff1..c899fa99b0f63dc0155699439054bbdd3a9b5f9a 100644 (file)
@@ -31,9 +31,12 @@ static const char sccsid[] = "@(#)grav.c     5.00 2000/11/01 xlockmore";
 #define MODE_grav
 #define DEFAULTS       "*delay: 10000 \n" \
                                        "*count: 12 \n" \
-                                       "*ncolors: 64 \n"
+                                       "*ncolors: 64 \n" \
+                                       "*fpsSolid: true \n" \
+                                       "*ignoreRotation: True \n" \
+
 #define BRIGHT_COLORS
-# define reshape_grav 0
+# define release_grav 0
 # define grav_handle_event 0
 # include "xlockmore.h"                /* in xscreensaver distribution */
 #else /* STANDALONE */
@@ -71,7 +74,7 @@ ENTRYPOINT ModeSpecOpt grav_opts =
 
 #ifdef USE_MODULES
 ModStruct   grav_description =
-{"grav", "init_grav", "draw_grav", "release_grav",
+{"grav", "init_grav", "draw_grav", (char *) NULL,
  "refresh_grav", "init_grav", (char *) NULL, &grav_opts,
  10000, -12, 1, 1, 64, 1.0, "",
  "Shows orbiting planets", 0, NULL};
@@ -142,7 +145,7 @@ init_planet(ModeInfo * mi, planetstruct * planet)
        GC          gc = MI_GC(mi);
        gravstruct *gp = &gravs[MI_SCREEN(mi)];
 
-# ifdef HAVE_COCOA
+# ifdef HAVE_JWXYZ
     jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), MI_GC(mi), False);
 # endif
 
@@ -233,6 +236,8 @@ draw_planet(ModeInfo * mi, planetstruct * planet)
        Planet(gp->x, gp->y);
 }
 
+static void free_grav(ModeInfo * mi);
+
 ENTRYPOINT void
 init_grav(ModeInfo * mi)
 {
@@ -241,11 +246,7 @@ init_grav(ModeInfo * mi)
        unsigned char ball;
        gravstruct *gp;
 
-       if (gravs == NULL) {
-               if ((gravs = (gravstruct *) calloc(MI_NUM_SCREENS(mi),
-                                              sizeof (gravstruct))) == NULL)
-                       return;
-       }
+       MI_INIT (mi, gravs, free_grav);
        gp = &gravs[MI_SCREEN(mi)];
 
        gp->width = MI_WIDTH(mi);
@@ -326,20 +327,20 @@ draw_grav(ModeInfo * mi)
 }
 
 ENTRYPOINT void
-release_grav(ModeInfo * mi)
+reshape_grav(ModeInfo * mi, int width, int height)
 {
-       if (gravs != NULL) {
-               int         screen;
-
-               for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
-                       gravstruct *gp = &gravs[screen];
+       gravstruct *gp = &gravs[MI_SCREEN(mi)];
+       gp->width  = width;
+       gp->height = height;
+    XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi));
+}
 
-                       if (gp->planets)
-                               (void) free((void *) gp->planets);
-               }
-               (void) free((void *) gravs);
-               gravs = (gravstruct *) NULL;
-       }
+static void
+free_grav(ModeInfo * mi)
+{
+       gravstruct *gp = &gravs[MI_SCREEN(mi)];
+       if (gp->planets)
+               (void) free((void *) gp->planets);
 }
 
 ENTRYPOINT void