summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXDraw.c
diff options
context:
space:
mode:
authorhobbs <hobbs>2006-03-02 20:44:20 (GMT)
committerhobbs <hobbs>2006-03-02 20:44:20 (GMT)
commitf9e049ac8b11d86f3f13b5db332dbd0f6b52a2b4 (patch)
treeb6fcf8ccb127ad1e30dfe310e2ae94ae8b962322 /macosx/tkMacOSXDraw.c
parent45b133684957ab2a31753fb1503c2e7d1d18aa5a (diff)
downloadtk-f9e049ac8b11d86f3f13b5db332dbd0f6b52a2b4.zip
tk-f9e049ac8b11d86f3f13b5db332dbd0f6b52a2b4.tar.gz
tk-f9e049ac8b11d86f3f13b5db332dbd0f6b52a2b4.tar.bz2
* macosx/tkMacOSXDraw.c (TkPutImage): fix endian issue on OS X x86
displaying images. Bitmap images still have a black/white reversal issue, appears to be a general OS X issue (as seen in frogger demo).
Diffstat (limited to 'macosx/tkMacOSXDraw.c')
-rw-r--r--macosx/tkMacOSXDraw.c59
1 files changed, 30 insertions, 29 deletions
diff --git a/macosx/tkMacOSXDraw.c b/macosx/tkMacOSXDraw.c
index cfdfc22..e382a48 100644
--- a/macosx/tkMacOSXDraw.c
+++ b/macosx/tkMacOSXDraw.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkMacOSXDraw.c,v 1.2.2.10 2006/01/10 05:38:20 das Exp $
+ * RCS: @(#) $Id: tkMacOSXDraw.c,v 1.2.2.11 2006/03/02 20:44:25 hobbs Exp $
*/
#include "tkInt.h"
@@ -382,18 +382,18 @@ XCopyPlane(
void
TkPutImage(
- unsigned long *colors, /* Unused on Macintosh. */
- int ncolors, /* Unused on Macintosh. */
- Display* display, /* Display. */
- Drawable d, /* Drawable to place image on. */
- GC gc, /* GC to use. */
- XImage* image, /* Image to place. */
- int src_x, /* Source X & Y. */
+ unsigned long *colors, /* Unused on Macintosh. */
+ int ncolors, /* Unused on Macintosh. */
+ Display* display, /* Display. */
+ Drawable d, /* Drawable to place image on. */
+ GC gc, /* GC to use. */
+ XImage* image, /* Image to place. */
+ int src_x, /* Source X & Y. */
int src_y,
- int dest_x, /* Destination X & Y. */
+ int dest_x, /* Destination X & Y. */
int dest_y,
- unsigned int width, /* Same width & height for both */
- unsigned int height) /* distination and source. */
+ unsigned int width, /* Same width & height for both */
+ unsigned int height) /* distination and source. */
{
CGrafPtr saveWorld;
GDHandle saveDevice;
@@ -423,9 +423,8 @@ TkPutImage(
GetPortBitMapForCopyBits(destPort),
&srcRect, &destRect, srcCopy, NULL);
} else if (image->depth == 1) {
-
- /*
- * This code assumes a pixel depth of 1
+ /*
+ * This code assumes a pixel depth of 1
*/
bitmap.bounds.top = bitmap.bounds.left = 0;
@@ -434,7 +433,7 @@ TkPutImage(
if ((image->bytes_per_line % 2) == 1) {
char *newPtr, *oldPtr;
newData = (char *) ckalloc(image->height *
- (image->bytes_per_line + 1));
+ (image->bytes_per_line + 1));
newPtr = newData;
oldPtr = image->data;
for (i = 0; i < image->height; i++) {
@@ -442,30 +441,28 @@ TkPutImage(
*newPtr = InvertByte((unsigned char) *oldPtr);
newPtr++, oldPtr++;
}
- *newPtr = 0;
- newPtr++;
+ *newPtr = 0;
+ newPtr++;
}
bitmap.baseAddr = newData;
bitmap.rowBytes = image->bytes_per_line + 1;
} else {
- newData = (char *) ckalloc(image->height * image->bytes_per_line);
- for (i = 0; i < image->height * image->bytes_per_line; i++) {
+ size_t size = image->height * image->bytes_per_line;
+ newData = (char *) ckalloc((int) size);
+ for (i = 0; i < size; i++) {
newData[i] = InvertByte((unsigned char) image->data[i]);
- }
+ }
bitmap.baseAddr = newData;
bitmap.rowBytes = image->bytes_per_line;
}
destBits = GetPortBitMapForCopyBits(destPort);
- CopyBits(&bitmap, destBits,
- &srcRect, &destRect, srcCopy, NULL);
-
+ CopyBits(&bitmap, destBits, &srcRect, &destRect, srcCopy, NULL);
} else {
- /*
- * Color image
+ /*
+ * Color image
*/
-
PixMap pixmap;
-
+
pixmap.bounds.left = 0;
pixmap.bounds.top = 0;
pixmap.bounds.right = (short) image->width;
@@ -479,16 +476,20 @@ TkPutImage(
pixmap.pixelSize = 32;
pixmap.cmpCount = 3;
pixmap.cmpSize = 8;
+#ifdef WORDS_BIGENDIAN
pixmap.pixelFormat = k32ARGBPixelFormat;
+#else
+ pixmap.pixelFormat = k32BGRAPixelFormat;
+#endif
pixmap.pmTable = NULL;
pixmap.pmExt = 0;
pixmap.baseAddr = image->data;
pixmap.rowBytes = image->bytes_per_line | 0x8000;
-
+
CopyBits((BitMap *) &pixmap, GetPortBitMapForCopyBits(destPort),
&srcRect, &destRect, srcCopy, NULL);
}
-
+
if (newData != NULL) {
ckfree(newData);
}