]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/microwin.c
Ensure there is valid context for DrawRectangle
[wxWidgets.git] / src / msw / microwin.c
index 3763ce7872142e1fa9c40343a0100cca379f3394..345bbca9286dc75800a9e7a1ebe79cea7ccb93a6 100644 (file)
@@ -1,6 +1,6 @@
 /*
 /////////////////////////////////////////////////////////////////////////////
-// Name:        microwin.cpp
+// Name:        src/msw/microwin.cpp
 // Purpose:     Extra implementation for MicroWindows
 // Author:      Julian Smart
 // Created:     2001-05-31
 
 */
 
-#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);
@@ -46,7 +42,7 @@ int GetScrollPosWX (HWND hWnd, int iSBar)
 }
 
 BOOL ScrollWindow(HWND hWnd, int xAmount, int yAmount,
-                 CONST RECT* lpRect, CONST RECT* lpClipRect)
+                  CONST RECT* lpRect, CONST RECT* lpClipRect)
 {
     /* TODO */
     return FALSE;
@@ -93,12 +89,12 @@ BOOL IsIconic(HWND hWnd)
     return FALSE;
 }
 
-int SetMapMode(HDC hDC, int mode)
+int SetMapMode(HDC hDC, wxMappingMode mode)
 {
     return MM_TEXT;
 }
 
-int GetMapMode(HDC hDC)
+wxMappingMode GetMapMode(HDC hDC)
 {
     return MM_TEXT;
 }
@@ -167,7 +163,7 @@ BOOL GetClipBox(HDC hdc, RECT* rect)
     rect->right = mwrect.right;
     rect->bottom = mwrect.bottom;
 
-    return TRUE;    
+    return TRUE;
 }
 
 BOOL DrawIconEx(HDC hdc, int x, int y, HICON hIcon, int w, int h, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)
@@ -222,7 +218,7 @@ BOOL MaskBlt(HDC hdc, int x, int y, int w, int h,
               HDC hDCSource, int xSrc, int ySrc, HBITMAP hBitmapMask, int xMask, int yMask, DWORD rop)
 {
     /* TODO */
-    return FALSE;  
+    return FALSE;
 }
 
 UINT RealizePalette(HDC hDC)
@@ -247,34 +243,34 @@ int GetObject(HGDIOBJ hObj, int sz, LPVOID logObj)
 
         GdGetFontInfo(((MWFONTOBJ*) hFont)->pfont, &fi);
 
-       /* FIXME many items are guessed for the time being*/
-       logFont->lfHeight = fi.height;
+        /* FIXME many items are guessed for the time being*/
+        logFont->lfHeight = fi.height;
 
-        /* reversed for kaffe port
-       logFont->tmAscent = fi.height - fi.baseline;
-       logFont->tmDescent= fi.baseline;
-        */
+        /* reversed for kaffe port
+           logFont->tmAscent = fi.height - fi.baseline;
+           logFont->tmDescent= fi.baseline;
+           */
 
-       logFont->lfWidth = fi.widths['x'];
-       logFont->lfWeight = FW_NORMAL;
+        logFont->lfWidth = fi.widths['x'];
+        logFont->lfWeight = FW_NORMAL;
         logFont->lfEscapement = 0;
         logFont->lfOrientation = 0;
         logFont->lfOutPrecision = OUT_OUTLINE_PRECIS;
         logFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
         logFont->lfQuality = DEFAULT_QUALITY;
-       logFont->lfItalic = 0;
-       logFont->lfUnderline = 0;
-       logFont->lfStrikeOut = 0;
-       /* note that win32 has the TMPF_FIXED_PITCH flags REVERSED...*/
-       logFont->lfPitchAndFamily = fi.fixed?
-                       FF_DONTCARE: (FF_DONTCARE | TMPF_FIXED_PITCH);
-       logFont->lfCharSet = OEM_CHARSET;
-       /* TODO I don't know how to get the font name. May
-        * test for different font classes.
+        logFont->lfItalic = 0;
+        logFont->lfUnderline = 0;
+        logFont->lfStrikeOut = 0;
+        /* note that win32 has the TMPF_FIXED_PITCH flags REVERSED...*/
+        logFont->lfPitchAndFamily = fi.fixed?
+            FF_DONTCARE: (FF_DONTCARE | TMPF_FIXED_PITCH);
+        logFont->lfCharSet = OEM_CHARSET;
+        /* TODO I don't know how to get the font name. May
+         * test for different font classes.
          */
         logFont->lfFaceName[0] = 0;
 #if 0
-       strncpy(logFont->lfFaceName, ??, sizeof(logFont->lfFaceName));
+        strncpy(logFont->lfFaceName, ??, sizeof(logFont->lfFaceName));
 #endif
         return sz;
     }
@@ -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;
+}