summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tkImgPhoto.c32
-rw-r--r--xlib/ximage.c26
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;
}