#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_Pixmaps(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)))
{
exit(1);
}
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" LOADING '%s' IN %.2f SECONDS\n",
+ filename, (float)(count2-count1)/100.0);
+ count1 = Counter();
+#endif
+
if (image->depth > 8)
{
printf("Sorry, GIFs with more than 256 colors are not supported.\n");
/* minimize colormap */
compress(image);
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" COMPRESSING IMAGE COLORMAP IN %.2f SECONDS\n",
+ (float)(count2-count1)/100.0);
+ count1 = Counter();
+#endif
+
screen = DefaultScreen(display);
visual = DefaultVisual(display, screen);
depth = DefaultDepth(display, screen);
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)/100.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)/100.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)/100.0);
+ count1 = Counter();
+#endif
+
/* convert internal image structure to X11 XImage */
if (!(ximageinfo_mask = imageToXImage(display, screen, visual, depth,
image_mask)))
exit(1);
}
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" CONVERTING MASK TO XIMAGE IN %.2f SECONDS\n",
+ (float)(count2-count1)/100.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)/100.0);
+ count1 = Counter();
+#endif
return(GIF_Success);
}