X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cfbe03c9c3ffecd6363dcc63e6fc27b8c6ed70aa..697e0cdd12c2723397deafab25055b39cc75b77f:/src/xpm/simx.c

diff --git a/src/xpm/simx.c b/src/xpm/simx.c
index 78bf77b0fc..1b648a7ee4 100644
--- a/src/xpm/simx.c
+++ b/src/xpm/simx.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1989-94 GROUPE BULL
+ * Copyright (C) 1989-95 GROUPE BULL
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -33,11 +33,12 @@
 * Developed by HeDu 3/94 (hedu@cul-ipn.uni-kiel.de)                           *
 \*****************************************************************************/
 
-#include "xpm34.h"
+/* Moved here so that FOR_MSW gets defined if we are using wxWindows (GRG) */
+#include "xpm.h"
 
 #ifdef FOR_MSW
 
-#include "xpm34p.h"			/* for XpmMalloc */
+#include "XpmI.h"           /* for XpmMalloc */
 
 /*
  * On DOS size_t is only 2 bytes, thus malloc(size_t s) can only malloc
@@ -120,13 +121,26 @@ XDefaultScreen(Display *d)
 
 /* I get only 1 plane but 8 bits per pixel,
    so I think BITSPIXEL should be depth */
-int 
+int
 XDefaultDepth(Display *display, Screen *screen)
 {
     int d, b;
+#ifdef __OS2__
+    HPS                             hpsScreen;
+    HDC                             hdcScreen;
+    LONG                            lPlanes;
+    LONG                            lBitsPerPixel;
+    LONG                            nDepth;
 
+    hpsScreen = WinGetScreenPS(HWND_DESKTOP);
+    hdcScreen = GpiQueryDevice(hpsScreen);
+    DevQueryCaps(hdcScreen, CAPS_COLOR_PLANES, 1L, &lPlanes);
+    DevQueryCaps(hdcScreen, CAPS_COLOR_BITCOUNT, 1L, &lBitsPerPixel);
+    b = (int)lBitsPerPixel;
+#else
     b = GetDeviceCaps(*display, BITSPIXEL);
     d = GetDeviceCaps(*display, PLANES);
+#endif
     return (b);
 }
 
@@ -138,7 +152,7 @@ XDefaultColormap(Display *display, Screen *screen)
 
 /* convert hex color names,
    wrong digits (not a-f,A-F,0-9) are treated as zero */
-static int 
+static int
 hexCharToInt(char c)
 {
     int r;
@@ -155,7 +169,7 @@ hexCharToInt(char c)
     return (r);
 }
 
-static int 
+static int
 rgbFromHex(char *hex, int *r, int *g, int *b)
 {
     int len;
@@ -185,7 +199,7 @@ rgbFromHex(char *hex, int *r, int *g, int *b)
 }
 
 /* Color related functions */
-int 
+int
 XParseColor(Display *d, Colormap *cmap, char *name, XColor *color)
 {
     int r, g, b;			/* only 8 bit values used */
@@ -203,7 +217,11 @@ XParseColor(Display *d, Colormap *cmap, char *name, XColor *color)
     }
 
     if (okay) {
+#ifdef __OS2__
+	color->pixel = OS2RGB(r, g, b);
+#else
 	color->pixel = RGB(r, g, b);
+#endif
 	color->red = (BYTE) r;
 	color->green = (BYTE) g;
 	color->blue = (BYTE) b;
@@ -213,14 +231,16 @@ XParseColor(Display *d, Colormap *cmap, char *name, XColor *color)
 }
 
 
-int 
+/* GRG: 2nd arg is Colormap*, not Colormap */
+
+int
 XAllocColor(Display *d, Colormap *cmap, XColor *color)
 {
 /* colormap not used yet so color->pixel is the real COLORREF (RBG) and not an
    index in some colormap as in X */
     return (1);
 }
-void 
+void
 XQueryColors(Display *display, Colormap *colormap,
 	     XColor *xcolors, int ncolors)
 {
@@ -236,7 +256,7 @@ XQueryColors(Display *display, Colormap *colormap,
     }
     return;
 }
-int 
+int
 XFreeColors(Display *d, Colormap cmap,
 	    unsigned long pixels[], int npixels, unsigned long planes)
 {
@@ -252,11 +272,34 @@ XCreateImage(Display *d, Visual *v,
 	     int pad, int foo)
 {
     XImage *img = (XImage *) XpmMalloc(sizeof(XImage));
+#ifdef __OS2__
+    HPS                  hps;
+    BITMAPINFOHEADER2    bmih;
+
+    hps = WinGetScreenPS(HWND_DESKTOP);
+    memset(&bmih, 0, sizeof(BITMAPINFOHEADER2));
+    bmih.cbFix = sizeof(BITMAPINFOHEADER2);
+    bmih.cx = width;
+    bmih.cy = height;
+    bmih.cPlanes = 1;
+    bmih.cBitCount = depth;
+#endif
 
     if (img) {
-	/* *img = CreateCompatibleBitmap(*d, width, height); */
-	img->bitmap = CreateBitmap(width, height, 1 /* plane */ ,
-				   depth /* bits per pixel */ , NULL);
+	/*JW: This is what it should be, but the picture comes out
+	      just black!?  It appears to be doing monochrome reduction,
+	      but I've got no clue why.  Using CreateBitmap() is supposed
+	      to be slower, but otherwise ok
+	  if ( depth == GetDeviceCaps(*d, BITSPIXEL) ) {
+	    img->bitmap = CreateCompatibleBitmap(*d, width, height);
+        } else*/ {
+#ifdef __OS2__
+     img->bitmap = GpiCreateBitmap(hps, &bmih, 0L, NULL, NULL);
+#else
+	    img->bitmap = CreateBitmap(width, height, 1 /* plane */ ,
+				       depth /* bits per pixel */ , NULL);
+#endif
+	}
 	img->width = width;
 	img->height = height;
 	img->depth = depth;
@@ -265,18 +308,22 @@ XCreateImage(Display *d, Visual *v,
 
 }
 
-void 
+void
 XImageFree(XImage *img)
 {
     if (img) {
 	XpmFree(img);
     }
 }
-void 
+void
 XDestroyImage(XImage *img)
 {
     if (img) {
+#ifdef __OS2__
+     GpiDeleteBitmap(img->bitmap);
+#else
 	DeleteObject(img->bitmap);	/* check return ??? */
+#endif
 	XImageFree(img);
     }
 }