X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fbumps.c;h=5eedaf7c107c23586c6728f77e545c5e080d5aa1;hb=82c5080773aae5e72ec155327c075775e023d2ee;hp=b1dda0841979c5f55514dba96230b2719bdb6123;hpb=5832fe184606766fef23369159306c0a5799aeb0;p=xscreensaver diff --git a/hacks/bumps.c b/hacks/bumps.c index b1dda084..5eedaf7c 100644 --- a/hacks/bumps.c +++ b/hacks/bumps.c @@ -27,12 +27,12 @@ #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; iDegreenDegreeCount; 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 ); }