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