From 38d17f35a89f5fafcba83303e7e244fe0f23967c Mon Sep 17 00:00:00 2001 From: das Date: Sat, 23 Jun 2007 00:26:42 +0000 Subject: * generic/tkImgPhoto.c (ImgPhotoConfigureInstance, DisposeInstance): use XDestroyImage instead of XFree to destroy XImage; replace runtime endianness determination by compile-time check for WORDS_BIGENDIAN. * xlib/ximage.c (XCreateBitmapFromData): use XCreateImage and XDestroyImage instead of creating XImage structure manually. --- generic/tkImgPhoto.c | 32 ++++++++++++-------------------- xlib/ximage.c | 26 +++++++------------------- 2 files changed, 19 insertions(+), 39 deletions(-) diff --git a/generic/tkImgPhoto.c b/generic/tkImgPhoto.c index 85d841b..3a2c3c3 100644 --- a/generic/tkImgPhoto.c +++ b/generic/tkImgPhoto.c @@ -17,7 +17,7 @@ * Department of Computer Science, * Australian National University. * - * RCS: @(#) $Id: tkImgPhoto.c,v 1.36.2.17 2006/05/13 00:48:37 hobbs Exp $ + * RCS: @(#) $Id: tkImgPhoto.c,v 1.36.2.18 2007/06/23 00:26:42 das Exp $ */ #include "tkInt.h" @@ -2253,7 +2253,7 @@ ImgPhotoConfigureInstance(instancePtr) if ((instancePtr->imagePtr == NULL) || (instancePtr->imagePtr->bits_per_pixel != bitsPerPixel)) { if (instancePtr->imagePtr != NULL) { - XFree((char *) instancePtr->imagePtr); + XDestroyImage(instancePtr->imagePtr); } imagePtr = XCreateImage(instancePtr->display, instancePtr->visualInfo.visual, (unsigned) bitsPerPixel, @@ -2262,26 +2262,18 @@ ImgPhotoConfigureInstance(instancePtr) instancePtr->imagePtr = imagePtr; /* - * Determine the endianness of this machine. - * We create images using the local host's endianness, rather - * than the endianness of the server; otherwise we would have - * to byte-swap any 16 or 32 bit values that we store in the - * image in those situations where the server's endianness - * is different from ours. - * - * FIXME: use autoconf to figure this out. + * We create images using the local host's endianness, rather than + * the endianness of the server; otherwise we would have to + * byte-swap any 16 or 32 bit values that we store in the image + * if the server's endianness is different from ours. */ if (imagePtr != NULL) { - union { - int i; - char c[sizeof(int)]; - } kludge; - - imagePtr->bitmap_unit = sizeof(pixel) * NBBY; - kludge.i = 0; - kludge.c[0] = 1; - imagePtr->byte_order = (kludge.i == 1) ? LSBFirst : MSBFirst; +#ifdef WORDS_BIGENDIAN + imagePtr->byte_order = MSBFirst; +#else + imagePtr->byte_order = LSBFirst; +#endif _XInitImageFuncPtrs(imagePtr); } } @@ -4008,7 +4000,7 @@ DisposeInstance(clientData) Tk_FreeGC(instancePtr->display, instancePtr->gc); } if (instancePtr->imagePtr != NULL) { - XFree((char *) instancePtr->imagePtr); + XDestroyImage(instancePtr->imagePtr); } if (instancePtr->error != NULL) { ckfree((char *) instancePtr->error); diff --git a/xlib/ximage.c b/xlib/ximage.c index 8519597..c869332 100644 --- a/xlib/ximage.c +++ b/xlib/ximage.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: ximage.c,v 1.4.8.1 2004/02/23 10:49:29 das Exp $ + * RCS: @(#) $Id: ximage.c,v 1.4.8.2 2007/06/23 00:26:42 das Exp $ */ #include "tkInt.h" @@ -43,7 +43,7 @@ XCreateBitmapFromData(display, d, data, width, height) unsigned int width; unsigned int height; { - XImage ximage; + XImage *ximage; GC gc; Pixmap pix; @@ -52,23 +52,11 @@ XCreateBitmapFromData(display, d, data, width, height) if (gc == NULL) { return None; } - ximage.height = height; - ximage.width = width; - ximage.depth = 1; - ximage.bits_per_pixel = 1; - ximage.xoffset = 0; - ximage.format = XYBitmap; - ximage.data = (char *)data; - ximage.byte_order = LSBFirst; - ximage.bitmap_unit = 8; - ximage.bitmap_bit_order = LSBFirst; - ximage.bitmap_pad = 8; - ximage.bytes_per_line = (width+7)/8; -#ifdef MAC_OSX_TK - ximage.obdata = NULL; -#endif - - TkPutImage(NULL, 0, display, pix, gc, &ximage, 0, 0, 0, 0, width, height); + ximage = XCreateImage(display, NULL, 1, XYBitmap, 0, (char*) data, width, + height, 8, (width + 7) / 8); + TkPutImage(NULL, 0, display, pix, gc, ximage, 0, 0, 0, 0, width, height); + ximage->data = NULL; + XDestroyImage(ximage); XFreeGC(display, gc); return pix; } -- cgit v0.12