X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bf7b3e2b9d68e571372e243f0f22615dbfac62fd..6c2cd2a2116c5eff1646e0acb7cad2c887300300:/src/msw/microwin.c diff --git a/src/msw/microwin.c b/src/msw/microwin.c index 3763ce7872..9b66f8aeb1 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); @@ -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; @@ -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; +}