2 /////////////////////////////////////////////////////////////////////////////
4 // Purpose: Extra implementation for MicroWindows
5 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
14 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
15 #pragma implementation "microwin.h"
22 #include "wx/msw/microwin.h"
24 void GdMoveCursor(MWCOORD x
, MWCOORD y
);
25 void MwSetCursor(HWND wp
, PMWCURSOR pcursor
);
27 BOOL
SetCursorPos(int x
, int y
)
33 HCURSOR
SetCursor(HCURSOR hCursor
)
39 int GetScrollPosWX (HWND hWnd
, int iSBar
)
42 if (GetScrollPos(hWnd
, iSBar
, & pos
))
48 BOOL
ScrollWindow(HWND hWnd
, int xAmount
, int yAmount
,
49 CONST RECT
* lpRect
, CONST RECT
* lpClipRect
)
55 HWND
WindowFromPoint(POINT pt
)
61 SHORT
GetKeyState(int nVirtKey
)
67 HWND
SetParent(HWND hWndChild
, HWND hWndNewParent
)
73 VOID
DragAcceptFiles(HWND hWnd
, BOOL b
)
78 BOOL
IsDialogMessage(HWND hWnd
, MSG
* msg
)
84 DWORD
GetMessagePos(VOID
)
90 BOOL
IsIconic(HWND hWnd
)
96 int SetMapMode(HDC hDC
, int mode
)
101 int GetMapMode(HDC hDC
)
106 HCURSOR
LoadCursor(HINSTANCE hInst
, int cursor
)
112 DWORD
GetModuleFileName(HINSTANCE hInst
, LPSTR name
, DWORD sz
)
119 VOID
DestroyIcon(HICON hIcon
)
124 COLORREF
GetTextColor(HDC hdc
)
128 return hdc
->textcolor
;
131 COLORREF
GetBkColor(HDC hdc
)
135 return hdc
->bkcolor
;
138 HPALETTE
SelectPalette(HDC hdc
, HPALETTE hPalette
, BOOL b
)
144 BOOL
IntersectClipRect(HDC hdc
, int x
, int y
,
145 int right
, int bottom
)
148 HRGN rgn
= CreateRectRgn(x
, y
, right
, bottom
);
150 BOOL ret
= (ExtSelectClipRgn(hdc
, rgn
, RGN_AND
) != ERROR
);
155 BOOL
GetClipBox(HDC hdc
, RECT
* rect
)
163 r
= ((MWRGNOBJ
*) hdc
->region
)->rgn
;
164 GdGetRegionBox(r
, & mwrect
);
165 rect
->left
= mwrect
.left
;
166 rect
->top
= mwrect
.top
;
167 rect
->right
= mwrect
.right
;
168 rect
->bottom
= mwrect
.bottom
;
173 BOOL
DrawIconEx(HDC hdc
, int x
, int y
, HICON hIcon
, int w
, int h
, UINT istepIfAniCur
, HBRUSH hbrFlickerFreeDraw
, UINT diFlags
)
179 BOOL
SetViewportExtEx(HDC hdc
, int x
, int y
, LPSIZE lpSize
)
185 BOOL
SetViewportOrgEx(HDC hdc
, int x
, int y
, LPPOINT lpPoint
)
191 BOOL
SetWindowExtEx(HDC hdc
, int x
, int y
, LPSIZE lpSize
)
197 BOOL
SetWindowOrgEx(HDC hdc
, int x
, int y
, LPPOINT lpSize
)
203 BOOL
ExtFloodFill(HDC hdc
, int x
, int y
, COLORREF col
, UINT flags
)
209 int SetPolyFillMode(HDC hdc
, int mode
)
215 BOOL
RoundRect(HDC hdc
, int left
, int top
, int right
, int bottom
, int r1
, int r2
)
218 return Rectangle(hdc
, left
, top
, right
, bottom
);
221 BOOL
MaskBlt(HDC hdc
, int x
, int y
, int w
, int h
,
222 HDC hDCSource
, int xSrc
, int ySrc
, HBITMAP hBitmapMask
, int xMask
, int yMask
, DWORD rop
)
228 UINT
RealizePalette(HDC hDC
)
234 BOOL
SetBrushOrgEx(HDC hdc
, int xOrigin
, int yOrigin
, LPPOINT lpPoint
)
240 int GetObject(HGDIOBJ hObj
, int sz
, LPVOID logObj
)
242 if (sz
== sizeof(LOGFONT
))
244 LOGFONT
* logFont
= (LOGFONT
*) logObj
;
246 HFONT hFont
= (HFONT
) hObj
;
248 GdGetFontInfo(((MWFONTOBJ
*) hFont
)->pfont
, &fi
);
250 /* FIXME many items are guessed for the time being*/
251 logFont
->lfHeight
= fi
.height
;
253 /* reversed for kaffe port
254 logFont->tmAscent = fi.height - fi.baseline;
255 logFont->tmDescent= fi.baseline;
258 logFont
->lfWidth
= fi
.widths
['x'];
259 logFont
->lfWeight
= FW_NORMAL
;
260 logFont
->lfEscapement
= 0;
261 logFont
->lfOrientation
= 0;
262 logFont
->lfOutPrecision
= OUT_OUTLINE_PRECIS
;
263 logFont
->lfClipPrecision
= CLIP_DEFAULT_PRECIS
;
264 logFont
->lfQuality
= DEFAULT_QUALITY
;
265 logFont
->lfItalic
= 0;
266 logFont
->lfUnderline
= 0;
267 logFont
->lfStrikeOut
= 0;
268 /* note that win32 has the TMPF_FIXED_PITCH flags REVERSED...*/
269 logFont
->lfPitchAndFamily
= fi
.fixed
?
270 FF_DONTCARE
: (FF_DONTCARE
| TMPF_FIXED_PITCH
);
271 logFont
->lfCharSet
= OEM_CHARSET
;
272 /* TODO I don't know how to get the font name. May
273 * test for different font classes.
275 logFont
->lfFaceName
[0] = 0;
277 strncpy(logFont
->lfFaceName
, ??, sizeof(logFont
->lfFaceName
));
287 /* Not in wingdi.c in earlier versions of MicroWindows */
290 CreateCompatibleBitmap(HDC hdc
, int nWidth
, int nHeight
)
292 MWBITMAPOBJ
* hbitmap
;
299 nWidth
= MWMAX(nWidth
, 1);
300 nHeight
= MWMAX(nHeight
, 1);
302 /* calc memory allocation size and linelen from width and height*/
303 if(!GdCalcMemGCAlloc(hdc
->psd
, nWidth
, nHeight
, 0, 0, &size
, &linelen
))
306 /* allocate gdi object*/
307 hbitmap
= (MWBITMAPOBJ
*)GdItemAlloc(sizeof(MWBITMAPOBJ
)-1+size
);
310 hbitmap
->hdr
.type
= OBJ_BITMAP
;
311 hbitmap
->hdr
.stockobj
= FALSE
;
312 hbitmap
->width
= nWidth
;
313 hbitmap
->height
= nHeight
;
315 /* create compatible with hdc*/
316 hbitmap
->planes
= hdc
->psd
->planes
;
317 hbitmap
->bpp
= hdc
->psd
->bpp
;
318 hbitmap
->linelen
= linelen
;
319 hbitmap
->size
= size
;
321 return (HBRUSH
)hbitmap
;
325 /* Attempt by JACS to create arbitrary bitmap
326 * TODO: make use of lpData
330 CreateBitmap( int nWidth
, int nHeight
, int nPlanes
, int bPP
, LPCVOID lpData
)
332 MWBITMAPOBJ
* hbitmap
;
338 hScreenDC
= GetDC(NULL
);
340 nWidth
= MWMAX(nWidth
, 1);
341 nHeight
= MWMAX(nHeight
, 1);
343 /* calc memory allocation size and linelen from width and height*/
344 if(!GdCalcMemGCAlloc(hScreenDC
->psd
, nWidth
, nHeight
, nPlanes
, bPP
, &size
, &linelen
))
346 ReleaseDC(NULL
, hScreenDC
);
349 ReleaseDC(NULL
, hScreenDC
);
351 /* allocate gdi object*/
352 hbitmap
= (MWBITMAPOBJ
*)GdItemAlloc(sizeof(MWBITMAPOBJ
)-1+size
);
355 hbitmap
->hdr
.type
= OBJ_BITMAP
;
356 hbitmap
->hdr
.stockobj
= FALSE
;
357 hbitmap
->width
= nWidth
;
358 hbitmap
->height
= nHeight
;
360 /* create with specified parameters */
361 hbitmap
->planes
= nPlanes
;
363 hbitmap
->linelen
= linelen
;
364 hbitmap
->size
= size
;
366 /* TODO: copy data */
368 return (HBRUSH
)hbitmap
;