http://se.aminet.net/pub/Linux/distributions/slackware/slackware-10.1/source/xap...
[xscreensaver] / hacks / metaballs.c
index 5d0f63dbc67c237b693023f9605c39dfe25384c2..f867b2906aa0462e7e5946397f42b5d6d98cfc2e 100644 (file)
@@ -56,7 +56,7 @@ typedef struct
   short xpos,ypos;
 } BLOB;
 
-static unsigned char nBlobCount;
+static unsigned int nBlobCount;
 static unsigned char radius;
 static unsigned char delta;
 static unsigned char dradius;
@@ -65,10 +65,13 @@ static unsigned char **blob;
 static BLOB *blobs;
 static unsigned char **blub;
 
+#undef BELLRAND
+#define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3)
+
 static void init_blob(BLOB *blob)
 {
-  blob->xpos =  (iWinWidth>> 1) - radius;
-  blob->ypos =  (iWinHeight >> 1) - radius;
+  blob->xpos = iWinWidth/4  + BELLRAND(iWinWidth/2)  - radius;
+  blob->ypos = iWinHeight/4 + BELLRAND(iWinHeight/2) - radius;
 }
 
 static void Execute( Display *pDisplay,
@@ -225,7 +228,7 @@ static void Initialize( Display *pDisplay, Window Win, GC *pGC, XImage **ppImage
 
        /* Find the preferred bits-per-pixel. (jwz) */
        {
-               int i, pfvc = 0;
+               int pfvc = 0;
                XPixmapFormatValues *pfv = XListPixmapFormats( pDisplay, &pfvc );
                for( i=0; i<pfvc; i++ )
                        if( pfv[ i ].depth == XWinAttribs.depth )
@@ -265,6 +268,8 @@ static void Initialize( Display *pDisplay, Window Win, GC *pGC, XImage **ppImage
          radius = 100;
        
        radius = (radius / 100.0) * (iWinHeight >> 3);
+        if (radius >= 128) /* should use UCHAR_MAX? */
+          radius = 127; /* dradius should fit in u_char */
 
        dradius = radius * 2;
        sradius = radius * radius;