From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / hacks / bouboule.c
index 081ba4851c57dc286b35fd16bce13c3a0e2c91ad..e3379aa3c6e6c0d555a63cf3defb80973d7cbff6 100644 (file)
@@ -78,15 +78,17 @@ static const char sccsid[] = "@(#)bouboule.c        4.00 97/01/01 xlockmore";
                                        "*size:                 15      \n"                     \
                                        "*delay:                20000   \n"                     \
                                        "*ncolors:              64      \n"                     \
-                                       "*use3d:                False   \n"                     \
+                                       "*use3d:                True    \n"                     \
                                        "*delta3d:              1.5             \n"                     \
                                        "*right3d:              red             \n"                     \
                                        "*left3d:               blue    \n"                     \
                                        "*both3d:               magenta \n"                     \
                                        "*none3d:               black   \n"                     \
-                                       "*fpsSolid:             true    \n"
+                                       "*fpsSolid:             true    \n"                     \
+                                       "*ignoreRotation: True  \n"
 
 # define SMOOTH_COLORS
+# define release_bouboule 0
 # define bouboule_handle_event 0
 # include "xlockmore.h"                                /* from the xscreensaver distribution */
 #else  /* !STANDALONE */
@@ -296,6 +298,8 @@ sinfree(SinVariable * point)
        }
 }
 
+static void free_bouboule(ModeInfo * mi);
+
 
 /***************/
 ENTRYPOINT void
@@ -314,11 +318,7 @@ init_bouboule(ModeInfo * mi)
        int         i;
        double      theta, omega;
 
-       if (starfield == NULL) {
-               if ((starfield = (StarField *) calloc(MI_NUM_SCREENS(mi),
-                                               sizeof (StarField))) == NULL)
-                       return;
-       }
+       MI_INIT (mi, starfield, free_bouboule);
        sp = &starfield[MI_SCREEN(mi)];
 
        sp->width = MI_WIN_WIDTH(mi);
@@ -542,7 +542,7 @@ draw_bouboule(ModeInfo * mi)
        Star       *star;
        XArc       *arc = NULL, *arcleft = NULL;
 
-#ifdef HAVE_COCOA      /* Don't second-guess Quartz's double-buffering */
+#ifdef HAVE_JWXYZ      /* Don't second-guess Quartz's double-buffering */
     XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
 #endif
 
@@ -802,39 +802,31 @@ draw_bouboule(ModeInfo * mi)
        }
 }
 
-ENTRYPOINT void
-release_bouboule(ModeInfo * mi)
+static void
+free_bouboule(ModeInfo * mi)
 {
-       if (starfield != NULL) {
-               int         screen;
-
-               for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
-                       StarField  *sp = &starfield[screen];
-
-                       if (sp->star)
-                               (void) free((void *) sp->star);
-                       if (sp->xarc)
-                               (void) free((void *) sp->xarc);
-                       if (sp->xarcleft)
-                               (void) free((void *) sp->xarcleft);
+       StarField  *sp = &starfield[MI_SCREEN(mi)];
+
+       if (sp->star)
+               (void) free((void *) sp->star);
+       if (sp->xarc)
+               (void) free((void *) sp->xarc);
+       if (sp->xarcleft)
+               (void) free((void *) sp->xarcleft);
 #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
-                       if (sp->oldxarc)
-                               (void) free((void *) sp->oldxarc);
-                       if (sp->oldxarcleft)
-                               (void) free((void *) sp->oldxarcleft);
+       if (sp->oldxarc)
+               (void) free((void *) sp->oldxarc);
+       if (sp->oldxarcleft)
+               (void) free((void *) sp->oldxarcleft);
 #endif
-                       sinfree(&(sp->x));
-                       sinfree(&(sp->y));
-                       sinfree(&(sp->z));
-                       sinfree(&(sp->sizex));
-                       sinfree(&(sp->sizey));
-                       sinfree(&(sp->thetax));
-                       sinfree(&(sp->thetay));
-                       sinfree(&(sp->thetaz));
-               }
-               (void) free((void *) starfield);
-               starfield = NULL;
-       }
+       sinfree(&(sp->x));
+       sinfree(&(sp->y));
+       sinfree(&(sp->z));
+       sinfree(&(sp->sizex));
+       sinfree(&(sp->sizey));
+       sinfree(&(sp->thetax));
+       sinfree(&(sp->thetay));
+       sinfree(&(sp->thetaz));
 }
 
 ENTRYPOINT void