1 /*
2 /////////////////////////////////////////////////////////////////////////////
3 // Name:        src/msw/microwin.cpp
4 // Purpose:     Extra implementation for MicroWindows
5 // Author:      Julian Smart
6 // Created:     2001-05-31
7 // Copyright:   (c) Julian Smart
8 // Licence:     wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10 
11 */
12 
13 #include "mwtypes.h"
14 #include "windows.h"
15 #include "wintern.h"
16 #include "device.h"
17 #include "wx/msw/microwin.h"
18 
19 void GdMoveCursor(MWCOORD x, MWCOORD y);
20 void MwSetCursor(HWND wp, PMWCURSOR pcursor);
21 
SetCursorPos(int x,int y)22 BOOL SetCursorPos(int x, int y)
23 {
24     GdMoveCursor(x, y);
25     return TRUE;
26 }
27 
SetCursor(HCURSOR hCursor)28 HCURSOR SetCursor(HCURSOR hCursor)
29 {
30     /* TODO */
31     return 0;
32 }
33 
GetScrollPosWX(HWND hWnd,int iSBar)34 int GetScrollPosWX (HWND hWnd, int iSBar)
35 {
36     int pos = 0;
37     if (GetScrollPos(hWnd, iSBar, & pos))
38         return pos;
39     else
40         return 0;
41 }
42 
ScrollWindow(HWND hWnd,int xAmount,int yAmount,CONST RECT * lpRect,CONST RECT * lpClipRect)43 BOOL ScrollWindow(HWND hWnd, int xAmount, int yAmount,
44                   CONST RECT* lpRect, CONST RECT* lpClipRect)
45 {
46     /* TODO */
47     return FALSE;
48 }
49 
WindowFromPoint(POINT pt)50 HWND WindowFromPoint(POINT pt)
51 {
52     /* TODO */
53     return 0;
54 }
55 
GetKeyState(int nVirtKey)56 SHORT GetKeyState(int nVirtKey)
57 {
58     /* TODO */
59     return 0;
60 }
61 
SetParent(HWND hWndChild,HWND hWndNewParent)62 HWND SetParent(HWND hWndChild, HWND hWndNewParent)
63 {
64     /* TODO */
65     return 0;
66 }
67 
DragAcceptFiles(HWND hWnd,BOOL b)68 VOID DragAcceptFiles(HWND hWnd, BOOL b)
69 {
70     /* TODO */
71 }
72 
IsDialogMessage(HWND hWnd,MSG * msg)73 BOOL IsDialogMessage(HWND hWnd, MSG* msg)
74 {
75     /* TODO */
76     return FALSE;
77 }
78 
GetMessagePos(VOID)79 DWORD GetMessagePos(VOID)
80 {
81     /* TODO */
82     return 0;
83 }
84 
IsIconic(HWND hWnd)85 BOOL IsIconic(HWND hWnd)
86 {
87     /* TODO */
88     return FALSE;
89 }
90 
SetMapMode(HDC hDC,wxMappingMode mode)91 int SetMapMode(HDC hDC, wxMappingMode mode)
92 {
93     return MM_TEXT;
94 }
95 
GetMapMode(HDC hDC)96 wxMappingMode GetMapMode(HDC hDC)
97 {
98     return MM_TEXT;
99 }
100 
LoadCursor(HINSTANCE hInst,int cursor)101 HCURSOR LoadCursor(HINSTANCE hInst, int cursor)
102 {
103     /* TODO */
104     return 0;
105 }
106 
GetModuleFileName(HINSTANCE hInst,LPSTR name,DWORD sz)107 DWORD GetModuleFileName(HINSTANCE hInst, LPSTR name, DWORD sz)
108 {
109     /* TODO */
110     name[0] = 0;
111     return 0;
112 }
113 
DestroyIcon(HICON hIcon)114 VOID DestroyIcon(HICON hIcon)
115 {
116     /* TODO */
117 }
118 
GetTextColor(HDC hdc)119 COLORREF GetTextColor(HDC hdc)
120 {
121     if (!hdc)
122         return CLR_INVALID;
123     return hdc->textcolor ;
124 }
125 
GetBkColor(HDC hdc)126 COLORREF GetBkColor(HDC hdc)
127 {
128     if (!hdc)
129         return CLR_INVALID;
130     return hdc->bkcolor ;
131 }
132 
SelectPalette(HDC hdc,HPALETTE hPalette,BOOL b)133 HPALETTE SelectPalette(HDC hdc, HPALETTE hPalette, BOOL b)
134 {
135     /* TODO */
136     return 0;
137 }
138 
IntersectClipRect(HDC hdc,int x,int y,int right,int bottom)139 BOOL IntersectClipRect(HDC hdc, int x, int y,
140                                 int right, int bottom)
141 {
142     /* TODO */
143     HRGN rgn = CreateRectRgn(x, y, right, bottom);
144 
145     BOOL ret = (ExtSelectClipRgn(hdc, rgn, RGN_AND) != ERROR);
146     DeleteObject(rgn);
147     return ret;
148 }
149 
GetClipBox(HDC hdc,RECT * rect)150 BOOL GetClipBox(HDC hdc, RECT* rect)
151 {
152     MWCLIPREGION* r;
153     MWRECT mwrect;
154 
155     if (!hdc->region)
156         return FALSE;
157 
158     r = ((MWRGNOBJ*) hdc->region)->rgn;
159     GdGetRegionBox(r, & mwrect);
160     rect->left = mwrect.left;
161     rect->top = mwrect.top;
162     rect->right = mwrect.right;
163     rect->bottom = mwrect.bottom;
164 
165     return TRUE;
166 }
167 
DrawIconEx(HDC hdc,int x,int y,HICON hIcon,int w,int h,UINT istepIfAniCur,HBRUSH hbrFlickerFreeDraw,UINT diFlags)168 BOOL DrawIconEx(HDC hdc, int x, int y, HICON hIcon, int w, int h, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)
169 {
170     /* TODO */
171     return FALSE;
172 }
173 
SetViewportExtEx(HDC hdc,int x,int y,LPSIZE lpSize)174 BOOL SetViewportExtEx(HDC hdc, int x, int y, LPSIZE lpSize)
175 {
176     /* TODO */
177     return FALSE;
178 }
179 
SetViewportOrgEx(HDC hdc,int x,int y,LPPOINT lpPoint)180 BOOL SetViewportOrgEx(HDC hdc, int x, int y, LPPOINT lpPoint)
181 {
182     /* TODO */
183     return FALSE;
184 }
185 
SetWindowExtEx(HDC hdc,int x,int y,LPSIZE lpSize)186 BOOL SetWindowExtEx(HDC hdc, int x, int y, LPSIZE lpSize)
187 {
188     /* TODO */
189     return FALSE;
190 }
191 
SetWindowOrgEx(HDC hdc,int x,int y,LPPOINT lpSize)192 BOOL SetWindowOrgEx(HDC hdc, int x, int y, LPPOINT lpSize)
193 {
194     /* TODO */
195     return FALSE;
196 }
197 
ExtFloodFill(HDC hdc,int x,int y,COLORREF col,UINT flags)198 BOOL ExtFloodFill(HDC hdc, int x, int y, COLORREF col, UINT flags)
199 {
200     /* TODO */
201     return FALSE;
202 }
203 
SetPolyFillMode(HDC hdc,int mode)204 int SetPolyFillMode(HDC hdc, int mode)
205 {
206     /* TODO */
207     return 0;
208 }
209 
RoundRect(HDC hdc,int left,int top,int right,int bottom,int r1,int r2)210 BOOL RoundRect(HDC hdc, int left, int top, int right, int bottom, int r1, int r2)
211 {
212     /* TODO */
213     return Rectangle(hdc, left, top, right, bottom);
214 }
215 
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)216 BOOL MaskBlt(HDC hdc, int x, int y, int w, int h,
217               HDC hDCSource, int xSrc, int ySrc, HBITMAP hBitmapMask, int xMask, int yMask, DWORD rop)
218 {
219     /* TODO */
220     return FALSE;
221 }
222 
RealizePalette(HDC hDC)223 UINT RealizePalette(HDC hDC)
224 {
225     /* TODO */
226     return 0;
227 }
228 
SetBrushOrgEx(HDC hdc,int xOrigin,int yOrigin,LPPOINT lpPoint)229 BOOL SetBrushOrgEx(HDC hdc, int xOrigin, int yOrigin, LPPOINT lpPoint)
230 {
231     /* TODO */
232     return FALSE;
233 }
234 
GetObject(HGDIOBJ hObj,int sz,LPVOID logObj)235 int GetObject(HGDIOBJ hObj, int sz, LPVOID logObj)
236 {
237     if (sz == sizeof(LOGFONT))
238     {
239         LOGFONT* logFont = (LOGFONT*) logObj;
240         MWFONTINFO fi;
241         HFONT hFont = (HFONT) hObj;
242 
243         GdGetFontInfo(((MWFONTOBJ*) hFont)->pfont, &fi);
244 
245         /* FIXME many items are guessed for the time being*/
246         logFont->lfHeight = fi.height;
247 
248         /* reversed for kaffe port
249            logFont->tmAscent = fi.height - fi.baseline;
250            logFont->tmDescent= fi.baseline;
251            */
252 
253         logFont->lfWidth = fi.widths['x'];
254         logFont->lfWeight = FW_NORMAL;
255         logFont->lfEscapement = 0;
256         logFont->lfOrientation = 0;
257         logFont->lfOutPrecision = OUT_OUTLINE_PRECIS;
258         logFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
259         logFont->lfQuality = DEFAULT_QUALITY;
260         logFont->lfItalic = 0;
261         logFont->lfUnderline = 0;
262         logFont->lfStrikeOut = 0;
263         /* note that win32 has the TMPF_FIXED_PITCH flags REVERSED...*/
264         logFont->lfPitchAndFamily = fi.fixed?
265             FF_DONTCARE: (FF_DONTCARE | TMPF_FIXED_PITCH);
266         logFont->lfCharSet = OEM_CHARSET;
267         /* TODO I don't know how to get the font name. May
268          * test for different font classes.
269          */
270         logFont->lfFaceName[0] = 0;
271 #if 0
272         strncpy(logFont->lfFaceName, ??, sizeof(logFont->lfFaceName));
273 #endif
274         return sz;
275     }
276     else
277     {
278         return 0;
279     }
280 }
281 
282 /* Not in wingdi.c in earlier versions of MicroWindows */
283 #if 0
284 HBITMAP WINAPI
285 CreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight)
286 {
287     MWBITMAPOBJ *hbitmap;
288     int size;
289     int linelen;
290 
291     if(!hdc)
292         return NULL;
293 
294     nWidth = MWMAX(nWidth, 1);
295     nHeight = MWMAX(nHeight, 1);
296 
297     /* calc memory allocation size and linelen from width and height*/
298     if(!GdCalcMemGCAlloc(hdc->psd, nWidth, nHeight, 0, 0, &size, &linelen))
299         return NULL;
300 
301     /* allocate gdi object*/
302     hbitmap = (MWBITMAPOBJ *)GdItemAlloc(sizeof(MWBITMAPOBJ)-1+size);
303     if(!hbitmap)
304         return NULL;
305     hbitmap->hdr.type = OBJ_BITMAP;
306     hbitmap->hdr.stockobj = FALSE;
307     hbitmap->width = nWidth;
308     hbitmap->height = nHeight;
309 
310     /* create compatible with hdc*/
311     hbitmap->planes = hdc->psd->planes;
312     hbitmap->bpp = hdc->psd->bpp;
313     hbitmap->linelen = linelen;
314     hbitmap->size = size;
315 
316     return (HBRUSH)hbitmap;
317 }
318 #endif
319 
320 /* Attempt by JACS to create arbitrary bitmap
321  * TODO: make use of lpData
322  */
323 
324 HBITMAP WINAPI
CreateBitmap(int nWidth,int nHeight,int nPlanes,int bPP,LPCVOID lpData)325 CreateBitmap( int nWidth, int nHeight, int nPlanes, int bPP, LPCVOID lpData)
326 {
327     MWBITMAPOBJ *hbitmap;
328     int size;
329     int linelen;
330 
331     HDC hScreenDC;
332 
333     hScreenDC = GetDC(NULL);
334 
335     nWidth = MWMAX(nWidth, 1);
336     nHeight = MWMAX(nHeight, 1);
337 
338     /* calc memory allocation size and linelen from width and height*/
339     if(!GdCalcMemGCAlloc(hScreenDC->psd, nWidth, nHeight, nPlanes, bPP, &size, &linelen))
340     {
341         ReleaseDC(NULL, hScreenDC);
342         return NULL;
343     }
344     ReleaseDC(NULL, hScreenDC);
345 
346     /* allocate gdi object*/
347     hbitmap = (MWBITMAPOBJ *)GdItemAlloc(sizeof(MWBITMAPOBJ)-1+size);
348     if(!hbitmap)
349         return NULL;
350     hbitmap->hdr.type = OBJ_BITMAP;
351     hbitmap->hdr.stockobj = FALSE;
352     hbitmap->width = nWidth;
353     hbitmap->height = nHeight;
354 
355     /* create with specified parameters */
356     hbitmap->planes = nPlanes;
357     hbitmap->bpp = bPP;
358     hbitmap->linelen = linelen;
359     hbitmap->size = size;
360 
361     /* TODO: copy data */
362 
363     return (HBRUSH)hbitmap;
364 }
365