* [10/01/99] - Shane Smit: Creation
* [10/08/99] - Shane Smit: Port to C. (Ick)
* [03/08/02] - Shane Smit: New movement code.
+ * [09/12/02] - Shane Smit: MIT-SHM XImages.
+ * Thanks to Kennett Galbraith <http://www.Alpha-II.com/>
+ * for code optimization.
*/
#include <math.h>
#include "screenhack.h"
-#include <X11/Xutil.h>
+
+#ifdef HAVE_XSHM_EXTENSION
+#include "xshm.h"
+#endif /* HAVE_XSHM_EXTENSION */
/* Defines: */
/* Globals: */
-char *progclass = "Bumps";
-char *defaults [] = {
+static const char *bumps_defaults [] = {
".background: black",
".foreground: white",
"*color: random",
"*colorcount: 64",
- "*delay: 50000",
+ "*delay: 30000",
+ "*duration: 120",
"*soften: 1",
"*invert: FALSE",
#ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */
- "*visualID: Best",
+ "*visualID: Best",
#endif
+#ifdef HAVE_XSHM_EXTENSION
+ "*useSHM: True",
+#endif /* HAVE_XSHM_EXTENSION */
0
};
-XrmOptionDescRec options [] = {
+static XrmOptionDescRec bumps_options [] = {
{ "-color", ".color", XrmoptionSepArg, 0 },
{ "-colorcount", ".colorcount", XrmoptionSepArg, 0 },
+ { "-duration", ".duration", XrmoptionSepArg, 0 },
{ "-delay", ".delay", XrmoptionSepArg, 0 },
{ "-soften", ".soften", XrmoptionSepArg, 0 },
{ "-invert", ".invert", XrmoptionNoArg, "TRUE" },
+#ifdef HAVE_XSHM_EXTENSION
+ { "-shm", ".useSHM", XrmoptionNoArg, "True" },
+ { "-no-shm", ".useSHM", XrmoptionNoArg, "False" },
+#endif /* HAVE_XSHM_EXTENSION */
+
{ 0, 0, 0, 0 }
};
typedef struct
{
uint8_ *aLightMap;
- uint16_ nDiameter, nRadius;
+ uint16_ nFalloffDiameter, nFalloffRadius;
+ uint16_ nLightDiameter, nLightRadius;
float nAccelX, nAccelY;
float nAccelMax;
float nVelocityX, nVelocityY;
float nXPos, nYPos;
} SSpotLight;
-void CreateSpotLight( SSpotLight *, uint16_, uint16_ );
void CreateTables( SSpotLight * );
-void DestroySpotLight( SSpotLight *pSpotLight ) { free( pSpotLight->aLightMap ); }
/* The entire program's operation is contained within this structure. */
typedef struct
{
/* XWindows specific variables. */
- Display *pDisplay;
+ Display *dpy;
Window Win;
+ Screen *screen;
+ Pixmap source;
GC GraphicsContext;
- XColor *aXColors;
+ XColor *xColors;
+ uint32_ *aColors;
XImage *pXImage;
+#ifdef HAVE_XSHM_EXTENSION
+ XShmSegmentInfo XShmInfo;
+ Bool bUseShm;
+#endif /* HAVE_XSHM_EXTENSION */
uint8_ nColorCount; /* Number of colors used. */
+ uint8_ bytesPerPixel;
uint16_ iWinWidth, iWinHeight;
uint16_ *aBumpMap; /* The actual bump map. */
-
SSpotLight SpotLight;
-} SBumps;
-void CreateBumps( SBumps *, Display *, Window );
-void Execute( SBumps * );
-void DestroyBumps( SBumps * );
+ int delay;
+ int duration;
+ time_t start_time;
-void SetPalette( SBumps *, XWindowAttributes * );
-void InitBumpMap( SBumps *, XWindowAttributes * );
-void SoftenBumpMap( SBumps * );
+ async_load_state *img_loader;
+} SBumps;
#endif /* _BUMPS_H */