http://packetstormsecurity.org/UNIX/admin/xscreensaver-3.32.tar.gz
[xscreensaver] / hacks / bumps.c
index b1dda0841979c5f55514dba96230b2719bdb6123..5eedaf7c107c23586c6728f77e545c5e080d5aa1 100644 (file)
 #include "bumps.h"
 
 
-void CreateSpotLight( SSpotLight *pSpotLight, uint16_ iWinWidth, uint16_ nColorCount )
+void CreateSpotLight( SSpotLight *pSpotLight, uint16_ iDiameter, uint16_ nColorCount )
 {
        double nDelta;
        int16_ iHeight, iWidth;
        
-       pSpotLight->nDiameter = iWinWidth / 3;
+       pSpotLight->nDiameter = iDiameter;
 #ifdef VERBOSE
        printf( "%s: Light Diameter: %d\n", progclass, pSpotLight->nDiameter );
 #endif
@@ -76,7 +76,7 @@ void CreateSpotLight( SSpotLight *pSpotLight, uint16_ iWinWidth, uint16_ nColorC
 
 void CreateTables( SSpotLight *pSpotLight )
 {
-       long double nUnit;
+       double nUnit;
        uint16_ iDegree;
        
        pSpotLight->nDegreeCount = get_integer_resource( "degrees", "Integer" );
@@ -88,10 +88,10 @@ void CreateTables( SSpotLight *pSpotLight )
        pSpotLight->aSinTable = calloc( pSpotLight->nDegreeCount, sizeof(double) );
 
        /* This funtion builds the Sine Lookup Tables. */
-       nUnit = (long double)( PI * 2.0F ) / (long double)( pSpotLight->nDegreeCount );
+       nUnit = (double)( PI * 2.0F ) / (double)( pSpotLight->nDegreeCount );
 
        for( iDegree=0; iDegree<pSpotLight->nDegreeCount; iDegree++)
-               pSpotLight->aSinTable[ iDegree ] = sin( nUnit * (long double)iDegree );
+               pSpotLight->aSinTable[ iDegree ] = sin( nUnit * (double)iDegree );
 }
 
 
@@ -126,7 +126,8 @@ void CreateBumps( SBumps *pBumps, Display *pNewDisplay, Window NewWin )
        XGCValues GCValues;
        int32_ nGCFlags;
        uint16_ iWidth, iHeight;
-
+       uint16_ iDiameter;
+       
        XGetWindowAttributes( pNewDisplay, NewWin, &XWinAttribs );
        pBumps->iWinWidth = XWinAttribs.width;
        pBumps->iWinHeight = XWinAttribs.height;
@@ -147,7 +148,8 @@ void CreateBumps( SBumps *pBumps, Display *pNewDisplay, Window NewWin )
        pBumps->GraphicsContext = XCreateGC( pBumps->pDisplay, pBumps->Win, nGCFlags, &GCValues );
        
        SetPalette( pBumps, &XWinAttribs );
-       CreateSpotLight( &pBumps->SpotLight, pBumps->iWinWidth, pBumps->nColorCount );
+       iDiameter = ( ( pBumps->iWinWidth < pBumps->iWinHeight ) ? pBumps->iWinWidth : pBumps->iWinHeight ) / 3;
+       CreateSpotLight( &pBumps->SpotLight, iDiameter, pBumps->nColorCount );
        InitBumpMap( pBumps, &XWinAttribs );
 
        /* Clear the image. */
@@ -228,11 +230,12 @@ void SetPalette( SBumps *pBumps, XWindowAttributes *pXWinAttribs )
 void InitBumpMap( SBumps *pBumps, XWindowAttributes *pXWinAttribs )
 {
        XImage *pScreenImage;
-       XColor aColors[ pBumps->iWinWidth ];
+       XColor *aColors;
        uint8_ nSoften;
        uint16_ iWidth, iHeight;
        BOOL bInvert = (BOOL)get_boolean_resource( "invert", "Boolean" );
        
+       aColors = (XColor*)calloc( pBumps->iWinWidth, sizeof(XColor) );
        grab_screen_image( pXWinAttribs->screen, pBumps->Win );
        pScreenImage = XGetImage( pBumps->pDisplay, pBumps->Win, 0, 0, pBumps->iWinWidth, pBumps->iWinHeight, ~0L, ZPixmap );
 
@@ -266,6 +269,7 @@ void InitBumpMap( SBumps *pBumps, XWindowAttributes *pXWinAttribs )
 #endif
        while( nSoften-- )
                SoftenBumpMap( pBumps );
+       free( aColors );
 }