http://packetstormsecurity.org/UNIX/admin/xscreensaver-4.14.tar.gz
[xscreensaver] / hacks / bumps.c
index be4c95b9755cec0b2c8d0c5d398df3a780f87a0c..5b73e7c569002079a56035bae2f705590c9021c2 100644 (file)
@@ -306,10 +306,17 @@ void InitBumpMap( SBumps *pBumps, XWindowAttributes *pXWinAttribs )
        uint16_ maxHeight;
        double softenMultiplier = 1.0f;
        BOOL bInvert = (BOOL)get_boolean_resource( "invert", "Boolean" );
+    Pixmap p;
 
        aColors = (XColor*)malloc( 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 );
+
+    p = XCreatePixmap(pBumps->pDisplay, pBumps->Win,
+                      pXWinAttribs->width, pXWinAttribs->height,
+                      pXWinAttribs->depth);
+    load_random_image (pXWinAttribs->screen, pBumps->Win, p, NULL);
+
+       pScreenImage = XGetImage( pBumps->pDisplay, p, 0, 0, pBumps->iWinWidth, pBumps->iWinHeight, ~0L, ZPixmap );
+    XFreePixmap (pBumps->pDisplay, p);
 
        /* jwz: get the grabbed bits off the screen fast */
        XClearWindow (pBumps->pDisplay, pBumps->Win);
@@ -367,7 +374,7 @@ void InitBumpMap( SBumps *pBumps, XWindowAttributes *pXWinAttribs )
        free( aColors );
 }
 
-/* Soften the bump map.  This is to avoid pixellated-looking ridges.
+/* Soften the bump map.  This is to avoid pixelated-looking ridges.
  * |-----|-----|-----|
  * |  0% |12.5%|  0% | The adjacent pixels are averaged together
  * |-----|-----|-----| first.  Then than value is averaged with
@@ -435,7 +442,9 @@ void Execute( SBumps *pBumps )
                if( iScreenY < 0 )                                                      continue;
                else if( iScreenY >= pBumps->iWinHeight )       break;
 
-               pDOffset = &pBumps->pXImage->data[ (iLightY+pBumps->SpotLight.nLightRadius) * pBumps->pXImage->bytes_per_line ];
+    /* warning: pointer targets in assignment differ in signedness
+       Should pDOffset be a int8?  I can't tell.  -jwz, 22-Jul-2003 */
+               pDOffset = (int8_ *) &pBumps->pXImage->data[ (iLightY+pBumps->SpotLight.nLightRadius) * pBumps->pXImage->bytes_per_line ];
                pBOffset = pBumps->aBumpMap + ( iScreenY * pBumps->iWinWidth ) + nLightXPos;
                for( iScreenX=nLightXPos, iLightX=-pBumps->SpotLight.nLightRadius; iLightX<nLightOffsetFar; ++iScreenX, ++iLightX, ++pBOffset, pDOffset+=pBumps->bytesPerPixel )
                {