rnd-19990205-1
[rocksndiamonds.git] / src / image.h
index e1160c18494524c6c96b62bbbc26bad9d0804ef9..6315340eaf9d5d98371f2aaabd7b9195f7e2ca47 100644 (file)
-
-/* image.h */
+/***********************************************************
+*  Rocks'n'Diamonds -- McDuffin Strikes Back!              *
+*----------------------------------------------------------*
+*  (c) 1995-98 Artsoft Entertainment                       *
+*              Holger Schemel                              *
+*              Oststrasse 11a                              *
+*              33604 Bielefeld                             *
+*              phone: ++49 +521 290471                     *
+*              email: aeglos@valinor.owl.de                *
+*----------------------------------------------------------*
+*  image.h                                                 *
+***********************************************************/
+
+#ifndef IMAGE_H
+#define IMAGE_H
 
 #include "main.h"
 
-typedef unsigned short Intensity; /* what X thinks an RGB intensity is */
+#define MAX_COLORS     256     /* maximal number of colors for each image */
+
+typedef unsigned short Intensity;      /* RGB intensity for X11 */
 
-/* This struct holds the X-client side bits for a rendered image. */
 typedef struct
 {
-  Display  *disp;       /* destination display */
-  int       scrn;       /* destination screen */
-  int       depth;      /* depth of drawable we want/have */
-  Drawable  drawable;   /* drawable to send image to */
-  Pixel    *index;     /* array of pixel values allocated */
-  int       no;                /* number of pixels in the array */
-  int       rootimage; /* True if is a root image - eg, retain colors */
-  Pixel     foreground; /* foreground and background pixels for mono images */
-  Pixel     background;
-  Colormap  cmap;       /* colormap used for image */
-  GC        gc;         /* cached gc for sending image */
-  XImage   *ximage;     /* ximage structure */
+  Display  *display;           /* destination display             */
+  int       depth;             /* depth of destination drawable   */
+  Pixel     index[MAX_COLORS]; /* array of pixel values           */
+  int       no;                        /* number of pixels in the array   */
+  Colormap  cmap;              /* colormap used for image         */
+  Pixmap   pixmap;             /* final pixmap                    */
+  Pixmap   pixmap_mask;                /* final pixmap of mask            */
 } XImageInfo;
 
-/* Function declarations */
-void        sendXImage(); /* send.c */
-XImageInfo *imageToXImage();
-Pixmap      ximageToPixmap();
-void        freeXImage();
-
-
-typedef struct rgbmap
+struct RGBMap
 {
-  unsigned int  size;       /* size of RGB map */
-  unsigned int  used;       /* number of colors used in RGB map */
-  int           compressed; /* image uses colormap fully */
-  Intensity    *red;        /* color values in X style */
-  Intensity    *green;
-  Intensity    *blue;
-} RGBMap;
+  unsigned int used;                   /* number of colors used in RGB map */
+  Intensity    red[MAX_COLORS];                /* color values in X style          */
+  Intensity    green[MAX_COLORS];
+  Intensity    blue[MAX_COLORS];
+  boolean      color_used[MAX_COLORS]; /* flag if color cell is used       */
+};
 
-/* image structure
- */
-
-typedef struct {
-  unsigned int  type;   /* type of image */
-  RGBMap        rgb;    /* RGB map of image if IRGB type */
-  unsigned int  width;  /* width of image in pixels */
-  unsigned int  height; /* height of image in pixels */
-  unsigned int  depth;  /* depth of image in bits if IRGB type */
-  unsigned int  pixlen; /* length of pixel if IRGB type */
-  byte         *data;   /* data rounded to full byte for each row */
-  float                gamma;  /* gamma of display the image is adjusted for */
+typedef struct
+{
+  struct RGBMap rgb;           /* RGB map of image if IRGB type       */
+  unsigned int  width;         /* width of image in pixels            */
+  unsigned int  height;                /* height of image in pixels           */
+  unsigned int  depth;         /* depth of image in bits if IRGB type */
+  byte         *data;          /* image data                          */
 } Image;
 
-#define IBITMAP 0 /* image is a bitmap */
-#define IRGB    1 /* image is RGB */
-
-#define BITMAPP(IMAGE) ((IMAGE)->type == IBITMAP)
-#define RGBP(IMAGE)    ((IMAGE)->type == IRGB)
-
-#define depthToColors(n) DepthToColorsTable[((n) < 24 ? (n) : 24)]
-
-/*
- * Architecture independent memory to value conversions.
- * Note the "Normal" internal format is big endian.
- */
-
-#define memToVal(PTR,LEN) (                                   \
-(LEN) == 1 ? (unsigned long)(                 *( (byte *)(PTR))         ) :    \
-(LEN) == 2 ? (unsigned long)(((unsigned long)(*( (byte *)(PTR))   ))<< 8)      \
-                          + (                 *(((byte *)(PTR))+1)      ) :    \
-(LEN) == 3 ? (unsigned long)(((unsigned long)(*( (byte *)(PTR))   ))<<16)      \
-                          + (((unsigned long)(*(((byte *)(PTR))+1)))<< 8)      \
-                                                 + (                 *(((byte *)(PTR))+2)      ) :    \
-             (unsigned long)(((unsigned long)(*( (byte *)(PTR))   ))<<24)      \
-                                                 + (((unsigned long)(*(((byte *)(PTR))+1)))<<16)      \
-                                                 + (((unsigned long)(*(((byte *)(PTR))+2)))<< 8)      \
-                                                 + (                 *(((byte *)(PTR))+3)      ) )
-
-#define valToMem(VAL,PTR,LEN)  (                                          \
-(LEN) == 1 ? (*( (byte *)(PTR)   ) = ( VAL     ) ) : \
-(LEN) == 2 ? (*( (byte *)(PTR)   ) = (((unsigned long)(VAL))>> 8),        \
-              *(((byte *)(PTR))+1) = ( VAL     ) ) : \
-(LEN) == 3 ? (*( (byte *)(PTR)   ) = (((unsigned long)(VAL))>>16),        \
-              *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>> 8),        \
-              *(((byte *)(PTR))+2) = ( VAL     ) ) : \
-             (*( (byte *)(PTR)   ) = (((unsigned long)(VAL))>>24),        \
-              *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>>16),        \
-              *(((byte *)(PTR))+2) = (((unsigned long)(VAL))>> 8),        \
-              *(((byte *)(PTR))+3) = ( VAL     ) ))
-
-
-/* functions */
-
-extern unsigned long DepthToColorsTable[];
-Image *newBitImage();
-Image *newRGBImage();
-void   freeImage();
-void   freeImageData();
-void   newRGBMapData();
-void   freeRGBMapData();
-byte  *lcalloc();
-byte  *lmalloc();
-
-Image *Read_GIF_to_Image();
-Image *monochrome();
-Image *zoom();
+int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *);
 
-void compress();
+Image *newImage(unsigned int, unsigned int, unsigned int);
+void freeImage(Image *);
+void freeXImage(Image *, XImageInfo *);
 
-Pixmap XImage_to_Pixmap(Display *, Window, XImageInfo *);
-XImageInfo *Image_to_XImage(Display *, int, Visual *, unsigned int, Image *);
-void XImage_to_Drawable(XImageInfo *, int, int, int, int,
-                       unsigned int, unsigned int);
+#endif /* IMAGE_H */