X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgifload.c;h=1e1aebcd43cb3706f9594a2c0ee0b9890300a941;hb=e7f36cd97c8580345714b4a22d6b4ad291e50ed6;hp=89c06ae5d91a1c1154b76562dea1aaf1c07903bf;hpb=4b0f1eb4220d2dbe4cffb288f745661b32c96a5b;p=rocksndiamonds.git diff --git a/src/gifload.c b/src/gifload.c index 89c06ae5..1e1aebcd 100644 --- a/src/gifload.c +++ b/src/gifload.c @@ -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 * ***********************************************************/ @@ -17,24 +16,32 @@ #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); }