rnd-19980930-1
[rocksndiamonds.git] / src / gifload.c
index 89c06ae5d91a1c1154b76562dea1aaf1c07903bf..1e1aebcd43cb3706f9594a2c0ee0b9890300a941 100644 (file)
@@ -1,13 +1,12 @@
 /***********************************************************
 *  Rocks'n'Diamonds -- McDuffin Strikes Back!              *
 *----------------------------------------------------------*
-*  ©1995 Artsoft Development                               *
-*        Holger Schemel                                    *
-*        33659 Bielefeld-Senne                             *
-*        Telefon: (0521) 493245                            *
-*        eMail: aeglos@valinor.owl.de                      *
-*               aeglos@uni-paderborn.de                    *
-*               q99492@pbhrzx.uni-paderborn.de             *
+*  (c) 1995-98 Artsoft Entertainment                       *
+*              Holger Schemel                              *
+*              Oststrasse 11a                              *
+*              33604 Bielefeld                             *
+*              phone: ++49 +521 290471                     *
+*              email: aeglos@valinor.owl.de                *
 *----------------------------------------------------------*
 *  gifload.c                                               *
 ***********************************************************/
 
 #include "xli.h"
 
+#ifdef DEBUG
+/*
+#define DEBUG_TIMING
+*/
+#endif
 
 
-extern Pixmap          test_pix[];
-extern Pixmap          test_clipmask[];
-extern int             test_picture_count;
 
+extern long Counter(void);
 
 
 
-int Read_GIF_to_Image(Display *display, Window window, char *filename)
+int Read_GIF_to_Pixmaps(Display *display, Window window, char *filename,
+                       Pixmap *pixmap, Pixmap *pixmap_mask)
 {
   Image *image, *image_mask;
   XImageInfo *ximageinfo, *ximageinfo_mask;
-  Pixmap pixmap, pixmap_mask;
   int screen;
   Visual *visual;
   unsigned int depth;
 
+#ifdef DEBUG_TIMING
+  long count1, count2;
+  count1 = Counter();
+#endif
+
   /* load GIF file */
   if (!(image = gifLoad(filename)))
   {
@@ -42,6 +49,13 @@ int Read_GIF_to_Image(Display *display, Window window, char *filename)
     exit(1);
   }
 
+#ifdef DEBUG_TIMING
+  count2 = Counter();
+  printf("   LOADING '%s' IN %.2f SECONDS\n",
+        filename, (float)(count2-count1)/1000.0);
+  count1 = Counter();
+#endif
+
   if (image->depth > 8)
   {
     printf("Sorry, GIFs with more than 256 colors are not supported.\n");
@@ -51,6 +65,13 @@ int Read_GIF_to_Image(Display *display, Window window, char *filename)
   /* minimize colormap */
   compress(image);
 
+#ifdef DEBUG_TIMING
+  count2 = Counter();
+  printf("   COMPRESSING IMAGE COLORMAP IN %.2f SECONDS\n",
+        (float)(count2-count1)/1000.0);
+  count1 = Counter();
+#endif
+
   screen = DefaultScreen(display);
   visual = DefaultVisual(display, screen);
   depth = DefaultDepth(display, screen);
@@ -62,30 +83,40 @@ int Read_GIF_to_Image(Display *display, Window window, char *filename)
     exit(1);
   }
 
-  if (ximageinfo->cmap != DefaultColormap(display, screen))
-  {
-    printf("--> '%s' gets own colormap\n", filename);
+#ifdef DEBUG_TIMING
+  count2 = Counter();
+  printf("   CONVERTING IMAGE TO XIMAGE IN %.2f SECONDS\n",
+        (float)(count2-count1)/1000.0);
+  count1 = Counter();
+#endif
 
+  if (ximageinfo->cmap != DefaultColormap(display, screen))
     XSetWindowColormap(display, window, ximageinfo->cmap);
-  }
 
   /* convert XImage to Pixmap */
-  if ((pixmap = ximageToPixmap(display, window, ximageinfo)) == None)
+  if ((*pixmap = ximageToPixmap(display, window, ximageinfo)) == None)
   {
     fprintf(stderr, "Cannot convert XImage to Pixmap.\n");
     exit(1);
   }
 
-
-  printf("test_picture_count == %d\n", test_picture_count);
-
-
-  test_pix[test_picture_count] = pixmap;
-
+#ifdef DEBUG_TIMING
+  count2 = Counter();
+  printf("   CONVERTING IMAGE TO PIXMAP IN %.2f SECONDS\n",
+        (float)(count2-count1)/1000.0);
+  count1 = Counter();
+#endif
 
   /* create mono image for masking */
   image_mask = monochrome(image);
 
+#ifdef DEBUG_TIMING
+  count2 = Counter();
+  printf("   CONVERTING IMAGE TO MASK IN %.2f SECONDS\n",
+        (float)(count2-count1)/1000.0);
+  count1 = Counter();
+#endif
+
   /* convert internal image structure to X11 XImage */
   if (!(ximageinfo_mask = imageToXImage(display, screen, visual, depth,
                                        image_mask)))
@@ -94,18 +125,26 @@ int Read_GIF_to_Image(Display *display, Window window, char *filename)
     exit(1);
   }
 
+#ifdef DEBUG_TIMING
+  count2 = Counter();
+  printf("   CONVERTING MASK TO XIMAGE IN %.2f SECONDS\n",
+        (float)(count2-count1)/1000.0);
+  count1 = Counter();
+#endif
+
   /* convert XImage to Pixmap */
-  if ((pixmap_mask = ximageToPixmap(display, window, ximageinfo_mask)) == None)
+  if ((*pixmap_mask = ximageToPixmap(display, window, ximageinfo_mask)) == None)
   {
     fprintf(stderr, "Cannot convert XImage to Pixmap.\n");
     exit(1);
   }
 
-
-  test_clipmask[test_picture_count] = pixmap_mask;
-
-  test_picture_count++;
-
+#ifdef DEBUG_TIMING
+  count2 = Counter();
+  printf("   CONVERTING MASK TO PIXMAP IN %.2f SECONDS\n",
+        (float)(count2-count1)/1000.0);
+  count1 = Counter();
+#endif
 
   return(GIF_Success);
 }