X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bf7b3e2b9d68e571372e243f0f22615dbfac62fd..968c75e36684abc092623e7055e8e1f4d94194c6:/src/msw/microwin.c diff --git a/src/msw/microwin.c b/src/msw/microwin.c index 3763ce7872..345bbca928 100644 --- a/src/msw/microwin.c +++ b/src/msw/microwin.c @@ -1,6 +1,6 @@ /* ///////////////////////////////////////////////////////////////////////////// -// Name: microwin.cpp +// Name: src/msw/microwin.cpp // Purpose: Extra implementation for MicroWindows // Author: Julian Smart // Created: 2001-05-31 @@ -11,15 +11,11 @@ */ -#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; +}