X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bf7b3e2b9d68e571372e243f0f22615dbfac62fd..08c068a4eb2d1d62a6a72142aff5b1477cf053bb:/src/msw/microwin.c

diff --git a/src/msw/microwin.c b/src/msw/microwin.c
index 3763ce7872..fbb20d0cd4 100644
--- a/src/msw/microwin.c
+++ b/src/msw/microwin.c
@@ -6,20 +6,16 @@
 // Created:     2001-05-31
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:     wxWindows licence
+// Licence:     wxWidgets licence
 /////////////////////////////////////////////////////////////////////////////
 
 */
 
-#ifdef __GNUG__
-    #pragma implementation "microwin.h"
-#endif
-
 #include "mwtypes.h"
 #include "windows.h"
 #include "wintern.h"
 #include "device.h"
-#include "wx/microwin/microwin.h"
+#include "wx/msw/microwin.h"
 
 void GdMoveCursor(MWCOORD x, MWCOORD y);
 void MwSetCursor(HWND wp, PMWCURSOR pcursor);
@@ -283,3 +279,87 @@ int GetObject(HGDIOBJ hObj, int sz, LPVOID logObj)
         return 0;
     }
 }
+
+/* Not in wingdi.c in earlier versions of MicroWindows */
+#if 0
+HBITMAP WINAPI
+CreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight)
+{
+	MWBITMAPOBJ *	hbitmap;
+	int		size;
+	int		linelen;
+
+	if(!hdc)
+		return NULL;
+
+	nWidth = MWMAX(nWidth, 1);
+	nHeight = MWMAX(nHeight, 1);
+
+	/* calc memory allocation size and linelen from width and height*/
+	if(!GdCalcMemGCAlloc(hdc->psd, nWidth, nHeight, 0, 0, &size, &linelen))
+		return NULL;
+
+	/* allocate gdi object*/
+	hbitmap = (MWBITMAPOBJ *)GdItemAlloc(sizeof(MWBITMAPOBJ)-1+size);
+	if(!hbitmap)
+		return NULL;
+	hbitmap->hdr.type = OBJ_BITMAP;
+	hbitmap->hdr.stockobj = FALSE;
+	hbitmap->width = nWidth;
+	hbitmap->height = nHeight;
+
+	/* create compatible with hdc*/
+	hbitmap->planes = hdc->psd->planes;
+	hbitmap->bpp = hdc->psd->bpp;
+	hbitmap->linelen = linelen;
+	hbitmap->size = size;
+
+	return (HBRUSH)hbitmap;
+}
+#endif
+
+/* Attempt by JACS to create arbitrary bitmap
+ * TODO: make use of lpData
+ */
+
+HBITMAP WINAPI
+CreateBitmap( int nWidth, int nHeight, int nPlanes, int bPP, LPCVOID lpData)
+{
+	MWBITMAPOBJ *	hbitmap;
+	int		size;
+	int		linelen;
+
+        HDC hScreenDC;
+
+        hScreenDC = GetDC(NULL);
+
+	nWidth = MWMAX(nWidth, 1);
+	nHeight = MWMAX(nHeight, 1);
+
+	/* calc memory allocation size and linelen from width and height*/
+	if(!GdCalcMemGCAlloc(hScreenDC->psd, nWidth, nHeight, nPlanes, bPP, &size, &linelen))
+        {
+                ReleaseDC(NULL, hScreenDC);
+		return NULL;
+	}
+        ReleaseDC(NULL, hScreenDC);
+
+	/* allocate gdi object*/
+	hbitmap = (MWBITMAPOBJ *)GdItemAlloc(sizeof(MWBITMAPOBJ)-1+size);
+	if(!hbitmap)
+		return NULL;
+	hbitmap->hdr.type = OBJ_BITMAP;
+	hbitmap->hdr.stockobj = FALSE;
+	hbitmap->width = nWidth;
+	hbitmap->height = nHeight;
+
+	/* create with specified parameters */
+	hbitmap->planes = nPlanes;
+	hbitmap->bpp = bPP;
+	hbitmap->linelen = linelen;
+	hbitmap->size = size;
+
+        /* TODO: copy data */
+
+	return (HBRUSH)hbitmap;
+}