source: trunk/src/gdi32/gdi32.cpp@ 1931

Last change on this file since 1931 was 1931, checked in by sandervl, 26 years ago

Ported GetTextCharset & GetTextCharsetInfo (Wine: 991031)

File size: 129.4 KB
Line 
1/* $Id: gdi32.cpp,v 1.18 1999-12-01 23:30:08 sandervl Exp $ */
2
3/*
4 * GDI32 apis
5 *
6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
7 * Copyright 1998 Patrick Haller
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#include <os2win.h>
13#include <stdlib.h>
14#include <stdarg.h>
15#include <string.h>
16#include <math.h>
17#include "misc.h"
18#include "callback.h"
19#include "unicode.h"
20#include "dibsect.h"
21
22#define ROUND_FLOAT(x) ((INT)((x < 0) ? x-0.5:x+0.5))
23#define sqr(x) (pow(x,2))
24
25typedef struct _POLYTEXTA
26{
27 int x;
28 int y;
29 UINT n;
30 LPCSTR lpstr;
31 UINT uiFlags;
32 RECT rcl;
33 int *pdx;
34} POLYTEXTA;
35
36
37typedef struct _POLYTEXTW
38{
39 int x;
40 int y;
41 UINT n;
42 LPCWSTR lpstr;
43 UINT uiFlags;
44 RECT rcl;
45 int *pdx;
46} POLYTEXTW;
47
48
49static ULONG QueryPaletteSize(BITMAPINFOHEADER *pBHdr)
50{
51 ULONG cbPalette;
52
53 switch (pBHdr->biBitCount)
54 {
55 case 1:
56 case 4:
57 case 8:
58 cbPalette = (1 << pBHdr->biBitCount) * sizeof(RGBQUAD);
59 break;
60
61 case 16:
62 case 24:
63 case 32:
64 cbPalette = 0;
65 break;
66
67 default:
68 dprintf(("QueryPaletteSize: error pBHdr->biBitCount = %d", pBHdr->biBitCount));
69 cbPalette = -1;
70 }
71
72 return cbPalette;
73}
74
75static ULONG CalcBitmapSize(ULONG cBits, LONG cx, LONG cy)
76{
77 ULONG alignment;
78 ULONG factor;
79 BOOL flag = TRUE; //true: '*' false: '/'
80
81 cy = cy < 0 ? -cy : cy;
82
83 switch(cBits)
84 {
85 case 1:
86 factor = 8;
87 flag = FALSE;
88 break;
89
90 case 4:
91 factor = 2;
92 flag = FALSE;
93 break;
94
95 case 8:
96 factor = 1;
97 break;
98
99 case 16:
100 factor = 2;
101 break;
102
103 case 24:
104 factor = 3;
105 break;
106
107 case 32:
108 return cx*cy;
109
110 default:
111 return 0;
112 }
113
114 if (flag)
115 alignment = (cx = (cx*factor)) % 4;
116 else
117 alignment = (cx = ((cx+factor-1)/factor)) % 4;
118
119 if (alignment != 0)
120 cx += 4 - alignment;
121
122 return cx*cy;
123}
124
125//******************************************************************************
126//******************************************************************************
127BOOL WIN32API GetTextExtentPointA(HDC hdc, LPCSTR lpsz, int cbString, LPSIZE lpSize)
128{
129 BOOL rc;
130
131 lpSize->cx = lpSize->cy = 0;
132 rc = O32_GetTextExtentPoint(hdc, lpsz, cbString, lpSize);
133 dprintf(("GDI32: GetTextExtentPointA of %s returned %d\n", lpsz, rc));
134 return(rc);
135}
136//******************************************************************************
137//******************************************************************************
138COLORREF WIN32API SetBkColor(HDC hdc, COLORREF crColor)
139{
140 dprintf(("GDI32: SetBkColor to %X\n", crColor));
141 return(O32_SetBkColor(hdc, crColor));
142}
143//******************************************************************************
144//******************************************************************************
145COLORREF WIN32API SetTextColor(HDC hdc, COLORREF crColor)
146{
147 COLORREF clr;
148
149 clr = O32_SetTextColor(hdc, crColor);
150 dprintf(("GDI32: SetTextColor from %X to %X\n", clr, crColor));
151 return(clr);
152}
153//******************************************************************************
154//******************************************************************************
155BOOL WIN32API TextOutA(HDC hdc, int nXStart, int nYStart,
156 LPCSTR lpszString, int cbString)
157{
158 BOOL rc;
159
160 rc = O32_TextOut(hdc, nXStart, nYStart, lpszString, cbString);
161 dprintf(("GDI32: TextOut %s returned %d\n", lpszString, rc));
162 return(rc);
163}
164//******************************************************************************
165//******************************************************************************
166HGDIOBJ WIN32API GetStockObject(int arg1)
167{
168 HGDIOBJ obj;
169
170 switch(arg1) {
171 case DEFAULT_GUI_FONT:
172 obj = NULL;
173 break;
174 default:
175 obj = O32_GetStockObject(arg1);
176 break;
177 }
178 dprintf(("GDI32: GetStockObject %d returned %X\n", arg1, obj));
179 return(obj);
180}
181//******************************************************************************
182//******************************************************************************
183UINT WIN32API RealizePalette( HDC arg1)
184{
185 dprintf(("GDI32: RealizePalette\n"));
186 return O32_RealizePalette(arg1);
187}
188//******************************************************************************
189//******************************************************************************
190int WIN32API GetObjectA( HGDIOBJ arg1, int arg2, void * arg3)
191{
192
193 if(DIBSection::getSection() != NULL)
194 {
195 DIBSection *dsect = DIBSection::find(arg1);
196 if(dsect)
197 {
198 return dsect->GetDIBSection(arg2, (DIBSECTION*)arg3);
199 }
200 }
201
202 dprintf(("GDI32: GetObject %X %X %X\n", arg1, arg2, arg3));
203 return O32_GetObject(arg1, arg2, arg3);
204}
205//******************************************************************************
206//******************************************************************************
207DWORD WIN32API GetObjectType( HGDIOBJ arg1)
208{
209 dprintf(("GDI32: GetObjectType\n"));
210 return O32_GetObjectType(arg1);
211}
212//******************************************************************************
213//******************************************************************************
214BOOL WIN32API DeleteObject(HANDLE hObj)
215{
216 dprintf(("GDI32: DeleteObject\n"));
217 DIBSection::deleteSection((DWORD)hObj);
218 return O32_DeleteObject(hObj);
219}
220//******************************************************************************
221//******************************************************************************
222BOOL WIN32API DeleteDC( HDC arg1)
223{
224 dprintf(("GDI32: DeleteDC\n"));
225 return O32_DeleteDC(arg1);
226}
227//******************************************************************************
228//******************************************************************************
229HPALETTE WIN32API CreatePalette( const LOGPALETTE * arg1)
230{
231 dprintf(("GDI32: CreatePalette\n"));
232 return O32_CreatePalette(arg1);
233}
234//******************************************************************************
235//******************************************************************************
236HBRUSH WIN32API CreatePatternBrush(HBITMAP arg1)
237{
238 HBRUSH brush;
239
240 brush = O32_CreatePatternBrush(arg1);
241 dprintf(("GDI32: CreatePatternBrush from bitmap %X returned %X\n", arg1, brush));
242 return(brush);
243}
244//******************************************************************************
245//******************************************************************************
246HPEN WIN32API CreatePen( int arg1, int arg2, COLORREF arg3)
247{
248 dprintf(("GDI32: CreatePen\n"));
249 return O32_CreatePen(arg1, arg2, arg3);
250}
251//******************************************************************************
252//******************************************************************************
253HPEN WIN32API CreatePenIndirect( const LOGPEN * arg1)
254{
255 dprintf(("GDI32: CreatePenIndirect\n"));
256 return O32_CreatePenIndirect(arg1);
257}
258//******************************************************************************
259//******************************************************************************
260HRGN WIN32API CreatePolyPolygonRgn( const POINT * arg1, const INT * arg2, int arg3, int arg4)
261{
262 dprintf(("GDI32: CreatePolyPolygonRgn\n"));
263 return O32_CreatePolyPolygonRgn(arg1, arg2, arg3, arg4);
264}
265//******************************************************************************
266//******************************************************************************
267HRGN WIN32API CreatePolygonRgn(const POINT * arg1, int arg2, int arg3)
268{
269 dprintf(("GDI32: CreatePolygonRgn"));
270 return O32_CreatePolygonRgn(arg1, arg2, arg3);
271}
272//******************************************************************************
273//******************************************************************************
274HBRUSH WIN32API CreateDIBPatternBrushPt( const VOID * arg1, UINT arg2)
275{
276 dprintf(("GDI32: CreateDIBPatternBrushPt\n"));
277 return O32_CreateDIBPatternBrushPt(arg1, arg2);
278}
279//******************************************************************************
280//******************************************************************************
281HBITMAP WIN32API CreateDIBitmap(HDC arg1, const BITMAPINFOHEADER * arg2, DWORD arg3, const void * arg4, const BITMAPINFO * arg5, UINT arg6)
282{
283 dprintf(("GDI32: CreateDIBitmap\n"));
284 return O32_CreateDIBitmap(arg1, arg2, arg3, arg4, arg5, arg6);
285}
286//******************************************************************************
287//******************************************************************************
288HBITMAP WIN32API CreateCompatibleBitmap( HDC arg1, int arg2, int arg3)
289{
290 dprintf(("GDI32: CreateCompatibleBitmap\n"));
291 return O32_CreateCompatibleBitmap(arg1, arg2, arg3);
292}
293//******************************************************************************
294//******************************************************************************
295HDC WIN32API CreateCompatibleDC( HDC arg1)
296{
297 HDC rc;
298
299 rc = O32_CreateCompatibleDC(arg1);
300 dprintf(("GDI32: CreateCompatibleDC %X returned %x", arg1, rc));
301 return rc;
302}
303//******************************************************************************
304//******************************************************************************
305INT WIN32API StretchDIBits(HDC hdc, INT xDst, INT yDst, INT widthDst,
306 INT heightDst, INT xSrc, INT ySrc, INT widthSrc,
307 INT heightSrc, const void *bits,
308 const BITMAPINFO *info, UINT wUsage, DWORD dwRop )
309{
310#if 1
311 dprintf(("GDI32: StretchDIBits"));
312
313 if(wUsage == DIB_PAL_COLORS && info->bmiHeader.biSize == sizeof(BITMAPINFOHEADER))
314 {
315 // workaround for open32 bug.
316 // If syscolors > 256 and wUsage == DIB_PAL_COLORS.
317
318 int i;
319 USHORT *pColorIndex = (USHORT *)info->bmiColors;
320 RGBQUAD *pColors = (RGBQUAD *) alloca(info->bmiHeader.biClrUsed *
321 sizeof(RGBQUAD));
322 BITMAPINFO *infoLoc = (BITMAPINFO *) alloca(sizeof(BITMAPINFO) +
323 info->bmiHeader.biClrUsed * sizeof(RGBQUAD));
324
325 memcpy(infoLoc, info, sizeof(BITMAPINFO));
326
327 if(GetDIBColorTable(hdc, 0, info->bmiHeader.biClrUsed, pColors) == 0)
328 return FALSE;
329
330 for(i=0;i<info->bmiHeader.biClrUsed;i++, pColorIndex++)
331 {
332 infoLoc->bmiColors[i] = pColors[*pColorIndex];
333 }
334
335 return O32_StretchDIBits(hdc, xDst, yDst, widthDst, heightDst, xSrc, ySrc,
336 widthSrc, heightSrc, (void *)bits,
337 (PBITMAPINFO)infoLoc, DIB_RGB_COLORS, dwRop);
338 }
339
340 return O32_StretchDIBits(hdc, xDst, yDst, widthDst, heightDst, xSrc, ySrc,
341 widthSrc, heightSrc, (void *)bits,
342 (PBITMAPINFO)info, wUsage, dwRop);
343#else
344 dprintf(("GDI32: StretchDIBits\n"));
345 return O32_StretchDIBits(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, (void *)arg10, (PBITMAPINFO)arg11, arg12, arg13);
346#endif
347}
348//******************************************************************************
349//******************************************************************************
350BOOL WIN32API StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest,
351 int nWidthDest, int nHeightDest,
352 HDC hdcSrc, int nXOriginSrc, int nYOriginSrc,
353 int nWidthSrc, int nHeightSrc, DWORD dwRop)
354{
355 dprintf(("GDI32: StretchBlt Dest: (%d, %d) size (%d, %d)\n", nXOriginDest, nYOriginDest, nWidthDest, nHeightDest));
356 dprintf(("GDI32: StretchBlt Src : (%d, %d) size (%d, %d)\n", nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc));
357 return O32_StretchBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, dwRop);
358}
359//******************************************************************************
360//******************************************************************************
361BOOL WIN32API StrokeAndFillPath( HDC arg1)
362{
363 dprintf(("GDI32: StrokeAndFillPath\n"));
364 return O32_StrokeAndFillPath(arg1);
365}
366//******************************************************************************
367//******************************************************************************
368BOOL WIN32API StrokePath( HDC arg1)
369{
370 dprintf(("GDI32: StrokePath\n"));
371 return O32_StrokePath(arg1);
372}
373//******************************************************************************
374//******************************************************************************
375int WIN32API SetStretchBltMode( HDC arg1, int arg2)
376{
377 dprintf(("GDI32: SetStretchBltMode\n"));
378 return O32_SetStretchBltMode(arg1, arg2);
379}
380//******************************************************************************
381//******************************************************************************
382HGDIOBJ WIN32API SelectObject(HDC hdc, HGDIOBJ hObj)
383{
384 HGDIOBJ rc;
385
386//// dprintf(("GDI32: SelectObject\n"));
387
388 if(DIBSection::getSection() != NULL) {
389 DIBSection *dsect;
390
391 dsect = DIBSection::find(hdc);
392 if(dsect) {//remove previously selected dibsection
393 dsect->UnSelectDIBObject();
394 }
395 dsect = DIBSection::find((DWORD)hObj);
396 if(dsect) {
397 dsect->SelectDIBObject(hdc);
398 }
399 }
400 rc = O32_SelectObject(hdc, hObj);
401 if(rc != 0 && DIBSection::getSection != NULL) {
402 DIBSection *dsect = DIBSection::find((DWORD)rc);
403 if(dsect) {
404 dsect->UnSelectDIBObject();
405 }
406 }
407 return(rc);
408}
409//******************************************************************************
410//******************************************************************************
411HPALETTE WIN32API SelectPalette(HDC arg1, HPALETTE arg2, BOOL arg3)
412{
413 dprintf(("GDI32: SelectPalette %x", arg1));
414 return O32_SelectPalette(arg1, arg2, arg3);
415}
416//******************************************************************************
417//******************************************************************************
418int WIN32API SetBkMode( HDC arg1, int arg2)
419{
420 dprintf(("GDI32: SetBkMode\n"));
421 return O32_SetBkMode(arg1, arg2);
422}
423//******************************************************************************
424//******************************************************************************
425BOOL WIN32API ExtTextOutA(HDC hdc, int X, int Y, UINT fuOptions, CONST RECT *lprc,
426 LPCSTR lpszString, UINT cbCount, CONST INT *lpDx)
427{
428 if(lpszString && strlen(lpszString) > cbCount)
429 ((LPSTR)lpszString)[cbCount] = 0;
430 dprintf(("GDI32: ExtTextOutA %s\n", lpszString));
431 return(O32_ExtTextOut(hdc, X, Y, fuOptions, lprc, lpszString, cbCount, lpDx));
432}
433//******************************************************************************
434//******************************************************************************
435COLORREF WIN32API GetPixel( HDC arg1, int arg2, int arg3)
436{
437//// dprintf(("GDI32: GetPixel\n"));
438 return O32_GetPixel(arg1, arg2, arg3);
439}
440//******************************************************************************
441//******************************************************************************
442COLORREF WIN32API SetPixel( HDC arg1, int arg2, int arg3, COLORREF arg4)
443{
444//// dprintf(("GDI32: SetPixel\n"));
445 return O32_SetPixel(arg1, arg2, arg3, arg4);
446}
447//******************************************************************************
448//Faster version of SetPixel (since it doesn't need to return the original color)
449//Just use SetPixel for now
450//******************************************************************************
451BOOL WIN32API SetPixelV(HDC arg1, int arg2, int arg3, COLORREF arg4)
452{
453 COLORREF rc;
454
455//// dprintf(("GDI32: SetPixelV\n"));
456 rc = O32_SetPixel(arg1, arg2, arg3, arg4);
457 if(rc == GDI_ERROR) // || rc == COLOR_INVALID)
458 return(FALSE);
459 return(TRUE);
460}
461//******************************************************************************
462//******************************************************************************
463BOOL WIN32API GetDCOrgEx(HDC arg1, PPOINT arg2)
464{
465 dprintf(("GDI32: GetDCOrgEx\n"));
466 return O32_GetDCOrgEx(arg1, arg2);
467}
468//******************************************************************************
469//******************************************************************************
470BOOL WIN32API GetWindowExtEx(HDC arg1, PSIZE arg2)
471{
472 dprintf(("GDI32: GetWindowExtEx\n"));
473 return O32_GetWindowExtEx(arg1, arg2);
474}
475//******************************************************************************
476//******************************************************************************
477int WIN32API AbortDoc( HDC arg1)
478{
479 dprintf(("GDI32: AbortDoc"));
480 return O32_AbortDoc(arg1);
481}
482//******************************************************************************
483//******************************************************************************
484BOOL WIN32API AbortPath( HDC arg1)
485{
486 dprintf(("GDI32: AbortPath"));
487 return O32_AbortPath(arg1);
488}
489//******************************************************************************
490//******************************************************************************
491BOOL WIN32API AngleArc( HDC arg1, int arg2, int arg3, DWORD arg4, float arg5, float arg6)
492{
493 dprintf(("GDI32: AngleArc"));
494 return O32_AngleArc(arg1, arg2, arg3, arg4, arg5, arg6);
495}
496//******************************************************************************
497//******************************************************************************
498BOOL WIN32API AnimatePalette( HPALETTE arg1, UINT arg2, UINT arg3, const PALETTEENTRY * arg4)
499{
500 dprintf(("GDI32: AnimatePalette"));
501 return O32_AnimatePalette(arg1, arg2, arg3, arg4);
502}
503//******************************************************************************
504//******************************************************************************
505BOOL WIN32API Arc( HDC arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9)
506{
507 dprintf(("GDI32: Arc"));
508 return O32_Arc(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
509}
510//******************************************************************************
511//******************************************************************************
512BOOL WIN32API ArcTo( HDC arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9)
513{
514 dprintf(("GDI32: ArcTo"));
515 return O32_ArcTo(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
516}
517//******************************************************************************
518//******************************************************************************
519BOOL WIN32API BeginPath( HDC arg1)
520{
521 dprintf(("GDI32: BeginPath"));
522 return O32_BeginPath(arg1);
523}
524//******************************************************************************
525//******************************************************************************
526BOOL WIN32API BitBlt(HDC hdcDest, int arg2, int arg3, int arg4, int arg5, HDC hdcSrc, int arg7, int arg8, DWORD arg9)
527{
528 if(DIBSection::getSection() != NULL) {
529 DIBSection *dsect = DIBSection::findHDC(hdcSrc);
530 if(dsect) {
531 return(dsect->BitBlt(hdcDest, arg2, arg3, arg4, arg5, arg7, arg8, arg9));
532 }
533 }
534 dprintf(("GDI32: BitBlt to hdc %X from (%d,%d) to (%d,%d), (%d,%d) rop %X\n", hdcDest, arg7, arg8, arg2, arg3, arg4, arg5, arg9));
535 return O32_BitBlt(hdcDest, arg2, arg3, arg4, arg5, hdcSrc, arg7, arg8, arg9);
536}
537//******************************************************************************
538//******************************************************************************
539BOOL WIN32API Chord( HDC arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9)
540{
541 dprintf(("GDI32: Chord"));
542 return O32_Chord(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
543}
544//******************************************************************************
545//******************************************************************************
546HENHMETAFILE WIN32API CloseEnhMetaFile( HDC arg1)
547{
548 dprintf(("GDI32: CloseEnhMetaFile"));
549 return O32_CloseEnhMetaFile(arg1);
550}
551//******************************************************************************
552//******************************************************************************
553BOOL WIN32API CloseFigure( HDC arg1)
554{
555 dprintf(("GDI32: CloseFigure"));
556 return O32_CloseFigure(arg1);
557}
558//******************************************************************************
559//******************************************************************************
560HMETAFILE WIN32API CloseMetaFile( HDC arg1)
561{
562 dprintf(("GDI32: CloseMetaFile"));
563 return O32_CloseMetaFile(arg1);
564}
565//******************************************************************************
566//******************************************************************************
567int WIN32API CombineRgn( HRGN arg1, HRGN arg2, HRGN arg3, int arg4)
568{
569 dprintf(("GDI32: CombineRgn"));
570 return O32_CombineRgn(arg1, arg2, arg3, arg4);
571}
572//******************************************************************************
573//******************************************************************************
574HENHMETAFILE WIN32API CopyEnhMetaFileA( HENHMETAFILE arg1, LPCSTR arg2)
575{
576 dprintf(("GDI32: CopyEnhMetaFileA"));
577 return O32_CopyEnhMetaFile(arg1, arg2);
578}
579//******************************************************************************
580//******************************************************************************
581HENHMETAFILE WIN32API CopyEnhMetaFileW( HENHMETAFILE arg1, LPCWSTR arg2)
582{
583 char *astring = UnicodeToAsciiString((LPWSTR)arg2);
584 HENHMETAFILE rc;
585
586 dprintf(("GDI32: CopyEnhMetaFileW"));
587 rc = O32_CopyEnhMetaFile(arg1, astring);
588 FreeAsciiString(astring);
589 return rc;
590}
591//******************************************************************************
592//******************************************************************************
593HMETAFILE WIN32API CopyMetaFileA( HMETAFILE arg1, LPCSTR arg2)
594{
595 dprintf(("GDI32: CopyMetaFileA"));
596 return O32_CopyMetaFile(arg1, arg2);
597}
598//******************************************************************************
599//******************************************************************************
600HMETAFILE WIN32API CopyMetaFileW( HMETAFILE arg1, LPCWSTR arg2)
601{
602 char *astring = UnicodeToAsciiString((LPWSTR)arg2);
603 HMETAFILE rc;
604
605 dprintf(("GDI32: CopyMetaFileW"));
606 rc = O32_CopyMetaFile(arg1, astring);
607 FreeAsciiString(astring);
608 return rc;
609}
610//******************************************************************************
611//******************************************************************************
612HBITMAP WIN32API CreateBitmap(int nWidth, int nHeight, UINT cPlanes,
613 UINT cBitsPerPel, const void *lpvBits)
614{
615 HBITMAP rc;
616
617 rc = O32_CreateBitmap(nWidth, nHeight, cPlanes, cBitsPerPel, lpvBits);
618 dprintf(("GDI32: CreateBitmap (%d,%d) bps %d returned %d\n", nWidth, nHeight, cBitsPerPel, rc));
619 return(rc);
620}
621//******************************************************************************
622//******************************************************************************
623HBITMAP WIN32API CreateBitmapIndirect( const BITMAP * arg1)
624{
625 dprintf(("GDI32: CreateBitmapIndirect"));
626 return O32_CreateBitmapIndirect(arg1);
627}
628//******************************************************************************
629//******************************************************************************
630HBRUSH WIN32API CreateBrushIndirect( const LOGBRUSH * arg1)
631{
632 dprintf(("GDI32: CreateBrushIndirect"));
633 return O32_CreateBrushIndirect((LPLOGBRUSH)arg1);
634}
635//******************************************************************************
636//******************************************************************************
637HDC WIN32API CreateDCA( LPCSTR arg1, LPCSTR arg2, LPCSTR arg3, const DEVMODEA * arg4)
638{
639 dprintf(("GDI32: CreateDCA"));
640 return O32_CreateDC(arg1, arg2, arg3, arg4);
641}
642//******************************************************************************
643//******************************************************************************
644HDC WIN32API CreateDCW( LPCWSTR arg1, LPCWSTR arg2, LPCWSTR arg3, const DEVMODEW * arg4)
645{
646 dprintf(("GDI32: CreateDCW STUB"));
647 // NOTE: This will not work as is (needs UNICODE support)
648// return O32_CreateDC(arg1, arg2, arg3, arg4);
649 return 0;
650}
651//******************************************************************************
652//******************************************************************************
653HRGN WIN32API CreateEllipticRgn( int arg1, int arg2, int arg3, int arg4)
654{
655 dprintf(("GDI32: CreateEllipticRgn"));
656 return O32_CreateEllipticRgn(arg1, arg2, arg3, arg4);
657}
658//******************************************************************************
659//******************************************************************************
660HRGN WIN32API CreateEllipticRgnIndirect( const RECT * arg1)
661{
662 dprintf(("GDI32: CreateEllipticRgnIndirect"));
663 return O32_CreateEllipticRgnIndirect(arg1);
664}
665//******************************************************************************
666//******************************************************************************
667HENHMETAFILE WIN32API CreateEnhMetaFileA( HDC arg1, LPCSTR arg2, const RECT * arg3, LPCSTR arg4)
668{
669 dprintf(("GDI32: CreateEnhMetaFileA"));
670 return O32_CreateEnhMetaFile(arg1, arg2, arg3, arg4);
671}
672//******************************************************************************
673//******************************************************************************
674HENHMETAFILE WIN32API CreateEnhMetaFileW( HDC arg1, LPCWSTR arg2, const RECT * arg3, LPCWSTR arg4)
675{
676 dprintf(("GDI32: CreateEnhMetaFileW STUB"));
677 // NOTE: This will not work as is (needs UNICODE support)
678// return O32_CreateEnhMetaFile(arg1, arg2, arg3, arg4);
679 return 0;
680}
681//******************************************************************************
682//******************************************************************************
683//******************************************************************************
684//******************************************************************************
685HBRUSH WIN32API CreateHatchBrush( int arg1, COLORREF arg2)
686{
687 dprintf(("GDI32: CreateHatchBrush"));
688 return O32_CreateHatchBrush(arg1, arg2);
689}
690//******************************************************************************
691//******************************************************************************
692HDC WIN32API CreateICA( LPCSTR arg1, LPCSTR arg2, LPCSTR arg3, const DEVMODEA * arg4)
693{
694 dprintf(("GDI32: CreateICA"));
695 return O32_CreateIC(arg1, arg2, arg3, arg4);
696}
697//******************************************************************************
698//******************************************************************************
699HDC WIN32API CreateICW( LPCWSTR arg1, LPCWSTR arg2, LPCWSTR arg3, const DEVMODEW * arg4)
700{
701 dprintf(("GDI32: CreateICW STUB"));
702 // NOTE: This will not work as is (needs UNICODE support)
703// return O32_CreateIC(arg1, arg2, arg3, arg4);
704 return 0;
705}
706//******************************************************************************
707//******************************************************************************
708HDC WIN32API CreateMetaFileA( LPCSTR arg1)
709{
710 dprintf(("GDI32: CreateMetaFileA"));
711 return O32_CreateMetaFile(arg1);
712}
713//******************************************************************************
714//******************************************************************************
715HDC WIN32API CreateMetaFileW( LPCWSTR arg1)
716{
717 char *astring = UnicodeToAsciiString((LPWSTR)arg1);
718 HDC rc;
719
720 dprintf(("GDI32: CreateMetaFileW"));
721 rc = O32_CreateMetaFile(astring);
722 FreeAsciiString(astring);
723 return rc;
724}
725//******************************************************************************
726//******************************************************************************
727HRGN WIN32API CreateRectRgn( int arg1, int arg2, int arg3, int arg4)
728{
729 dprintf(("GDI32: CreateRectRgn"));
730 return O32_CreateRectRgn(arg1, arg2, arg3, arg4);
731}
732//******************************************************************************
733//******************************************************************************
734HRGN WIN32API CreateRectRgnIndirect( const RECT * arg1)
735{
736 dprintf(("GDI32: CreateRectRgnIndirect"));
737 return O32_CreateRectRgnIndirect(arg1);
738}
739//******************************************************************************
740//******************************************************************************
741HRGN WIN32API CreateRoundRectRgn( int arg1, int arg2, int arg3, int arg4, int arg5, int arg6)
742{
743 dprintf(("GDI32: CreateRoundRectRgn"));
744 return O32_CreateRoundRectRgn(arg1, arg2, arg3, arg4, arg5, arg6);
745}
746//******************************************************************************
747//******************************************************************************
748HBRUSH WIN32API CreateSolidBrush( COLORREF arg1)
749{
750 dprintf(("GDI32: CreateSolidBrush\n"));
751 return O32_CreateSolidBrush(arg1);
752}
753//******************************************************************************
754//******************************************************************************
755BOOL WIN32API DPtoLP( HDC arg1, PPOINT arg2, int arg3)
756{
757 dprintf(("GDI32: DPtoLP\n"));
758 return O32_DPtoLP(arg1, arg2, arg3);
759}
760//******************************************************************************
761//******************************************************************************
762BOOL WIN32API DeleteEnhMetaFile( HENHMETAFILE arg1)
763{
764 dprintf(("GDI32: DeleteEnhMetaFile\n"));
765 return O32_DeleteEnhMetaFile(arg1);
766}
767//******************************************************************************
768//******************************************************************************
769BOOL WIN32API DeleteMetaFile( HMETAFILE arg1)
770{
771 dprintf(("GDI32: DeleteMetaFile"));
772 return O32_DeleteMetaFile(arg1);
773}
774//******************************************************************************
775//******************************************************************************
776BOOL WIN32API Ellipse( HDC arg1, int arg2, int arg3, int arg4, int arg5)
777{
778 dprintf(("GDI32: Ellipse"));
779 return O32_Ellipse(arg1, arg2, arg3, arg4, arg5);
780}
781//******************************************************************************
782//******************************************************************************
783int WIN32API EndDoc( HDC arg1)
784{
785 dprintf(("GDI32: EndDoc"));
786 return O32_EndDoc(arg1);
787}
788//******************************************************************************
789//******************************************************************************
790int WIN32API EndPage( HDC arg1)
791{
792 dprintf(("GDI32: EndPage"));
793 return O32_EndPage(arg1);
794}
795//******************************************************************************
796//******************************************************************************
797BOOL WIN32API EndPath( HDC arg1)
798{
799 dprintf(("GDI32: EndPath"));
800 return O32_EndPath(arg1);
801}
802//******************************************************************************
803//******************************************************************************
804BOOL WIN32API EnumEnhMetaFile( HDC arg1, HENHMETAFILE arg2, ENHMFENUMPROC arg3, PVOID arg4, const RECT * arg5)
805{
806 dprintf(("GDI32: EnumEnhMetaFile DOESN'T WORK!"));
807// return O32_EnumEnhMetaFile(arg1, arg2, arg3, arg4, arg5);
808 return 0;
809}
810//******************************************************************************
811//******************************************************************************
812POINT ToWin32LineEnd(POINT startPt,INT nXEnd,INT nYEnd)
813{
814 POINT pt;
815
816 if (startPt.x != nXEnd || startPt.y != nYEnd)
817 {
818 if (nXEnd == startPt.x)
819 {
820 pt.x = nXEnd;
821 pt.y = (nYEnd > startPt.y) ? nYEnd-1:nYEnd+1;
822 } else if (nYEnd == startPt.y)
823 {
824 pt.x = (nXEnd > startPt.x) ? nXEnd-1:nXEnd+1;
825 pt.y = nYEnd;
826 } else
827 {
828 DOUBLE len = sqrt(sqr(nXEnd-startPt.x)+sqr(nYEnd-startPt.y));
829 DOUBLE lenDif = (len-1)/len;
830 INT w = nXEnd-startPt.x,h = nYEnd-startPt.y;
831
832 pt.x = startPt.x+ROUND_FLOAT(w*lenDif);
833 pt.y = startPt.y+ROUND_FLOAT(h*lenDif);
834 }
835 } else
836 {
837 pt.x = nXEnd;
838 pt.y = nYEnd;
839 }
840
841 return pt;
842}
843
844VOID DrawSingleLinePoint(HDC hdc,POINT pt)
845{
846 LOGPEN penInfo;
847
848 if (!GetObjectA(GetCurrentObject(hdc,OBJ_PEN),sizeof(penInfo),(LPVOID)&penInfo)) return;
849 if (penInfo.lopnWidth.x <= 1 && penInfo.lopnWidth.y <= 1) SetPixel(hdc,pt.x,pt.y,penInfo.lopnColor); else
850 {
851 INT x = pt.x-penInfo.lopnWidth.x/2;
852 INT y = pt.y-penInfo.lopnWidth.y/2;
853 Ellipse(hdc,x,y,x+penInfo.lopnWidth.x,y+penInfo.lopnWidth.y);
854 }
855}
856
857BOOL WIN32API LineTo( HDC hdc, int nXEnd, int nYEnd)
858{
859 POINT oldPt,pt;
860
861 dprintf(("GDI32: LineTo"));
862
863 //CB: Open32 draws a pixel too much!
864 GetCurrentPositionEx(hdc,&oldPt);
865 pt = ToWin32LineEnd(oldPt,nXEnd,nYEnd);
866
867 BOOL rc;
868
869 if (oldPt.x == pt.x && oldPt.y == pt.y)
870 {
871 DrawSingleLinePoint(hdc,pt);
872
873 rc = TRUE;
874 } else rc = O32_LineTo(hdc,pt.x,pt.y);
875 MoveToEx(hdc,nXEnd,nYEnd,NULL);
876
877 return rc;
878}
879//******************************************************************************
880//******************************************************************************
881BOOL WIN32API MoveToEx( HDC arg1, int arg2, int arg3, PPOINT arg4)
882{
883 dprintf(("GDI32: MoveToEx\n"));
884 return O32_MoveToEx(arg1, arg2, arg3, arg4);
885}
886//******************************************************************************
887//******************************************************************************
888BOOL WIN32API PatBlt( HDC arg1, int arg2, int arg3, int arg4, int arg5, DWORD arg6)
889{
890 BOOL rc;
891
892 rc = O32_PatBlt(arg1, arg2, arg3, arg4, arg5, arg6);
893 dprintf(("GDI32: PatBlt (%d,%d) (%d,%d) returned %d\n", arg2, arg3, arg4, arg5, rc));
894 return(rc);
895}
896//******************************************************************************
897//******************************************************************************
898BOOL WIN32API Rectangle( HDC arg1, int arg2, int arg3, int arg4, int arg5)
899{
900 dprintf(("GDI32: Rectangle\n"));
901 return O32_Rectangle(arg1, arg2, arg3, arg4, arg5);
902}
903//******************************************************************************
904//******************************************************************************
905int WIN32API SetROP2( HDC arg1, int arg2)
906{
907 dprintf(("GDI32: SetROP2"));
908 return O32_SetROP2(arg1, arg2);
909}
910//******************************************************************************
911//TODO: Callback
912//******************************************************************************
913BOOL WIN32API EnumMetaFile( HDC arg1, HMETAFILE arg2, MFENUMPROC arg3, LPARAM arg4)
914{
915 dprintf(("GDI32: EnumMetaFile STUB"));
916 //calling convention differences
917// return O32_EnumMetaFile(arg1, arg2, arg3, arg4);
918 return 0;
919}
920//******************************************************************************
921//******************************************************************************
922int WIN32API EnumObjects( HDC arg1, int arg2, GOBJENUMPROC arg3, LPARAM arg4)
923{
924 dprintf(("GDI32: EnumObjects STUB"));
925 //calling convention differences
926// return O32_EnumObjects(arg1, arg2, arg3, arg4);
927 return 0;
928}
929//******************************************************************************
930//******************************************************************************
931BOOL WIN32API EqualRgn( HRGN arg1, HRGN arg2)
932{
933 dprintf(("GDI32: EqualRgn"));
934 return O32_EqualRgn(arg1, arg2);
935}
936//******************************************************************************
937//******************************************************************************
938int WIN32API Escape( HDC arg1, int arg2, int arg3, LPCSTR arg4, PVOID arg5)
939{
940 dprintf(("GDI32: Escape"));
941 return O32_Escape(arg1, arg2, arg3, arg4, arg5);
942}
943//******************************************************************************
944//******************************************************************************
945int WIN32API ExcludeClipRect( HDC arg1, int arg2, int arg3, int arg4, int arg5)
946{
947 dprintf(("GDI32: ExcludeClipRect"));
948 return O32_ExcludeClipRect(arg1, arg2, arg3, arg4, arg5);
949}
950//******************************************************************************
951//******************************************************************************
952HPEN WIN32API ExtCreatePen( DWORD arg1, DWORD arg2, const LOGBRUSH * arg3, DWORD arg4, const DWORD * arg5)
953{
954 dprintf(("GDI32: ExtCreatePen"));
955 return O32_ExtCreatePen(arg1, arg2, arg3, arg4, arg5);
956}
957//******************************************************************************
958//******************************************************************************
959HRGN WIN32API ExtCreateRegion( const XFORM * arg1, DWORD arg2, const RGNDATA * arg3)
960{
961 dprintf(("GDI32: ExtCreateRegion"));
962 return O32_ExtCreateRegion(arg1, arg2, arg3);
963}
964//******************************************************************************
965//******************************************************************************
966BOOL WIN32API ExtFloodFill( HDC arg1, int arg2, int arg3, COLORREF arg4, UINT arg5)
967{
968 dprintf(("GDI32: ExtFloodFill"));
969 return O32_ExtFloodFill(arg1, arg2, arg3, arg4, arg5);
970}
971//******************************************************************************
972//******************************************************************************
973int WIN32API ExtSelectClipRgn( HDC arg1, HRGN arg2, int arg3)
974{
975 dprintf(("GDI32: ExtSelectClipRgn"));
976 return O32_ExtSelectClipRgn(arg1, arg2, arg3);
977}
978//******************************************************************************
979//******************************************************************************
980BOOL WIN32API ExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions,
981 const RECT *lprc, LPCWSTR lpString, UINT cbCount,
982 const int *lpDx)
983{
984 char *astring = UnicodeToAsciiString((LPWSTR)lpString);
985 BOOL rc;
986
987 if(lprc)
988 dprintf(("GDI32: ExtTextOutW (%d,%d) %X, (%d,%d)(%d,%d)\n", X, Y, fuOptions, lprc->left, lprc->top, lprc->right, lprc->bottom));
989 else dprintf(("GDI32: ExtTextOutW (%d,%d) %X\n", X, Y, fuOptions));
990 rc = O32_ExtTextOut(hdc, X, Y, fuOptions, lprc, astring, cbCount, lpDx);
991 dprintf(("GDI32: ExtTextOutW %s (%X) length %d rc %d\n", astring, lpString, cbCount, rc));
992 FreeAsciiString(astring);
993 return(rc);
994}
995//******************************************************************************
996//******************************************************************************
997BOOL WIN32API FillPath( HDC arg1)
998{
999 dprintf(("GDI32: FillPath"));
1000 return O32_FillPath(arg1);
1001}
1002//******************************************************************************
1003//******************************************************************************
1004BOOL WIN32API FillRgn( HDC arg1, HRGN arg2, HBRUSH arg3)
1005{
1006 dprintf(("GDI32: FillRgn"));
1007 return O32_FillRgn(arg1, arg2, arg3);
1008}
1009//******************************************************************************
1010//******************************************************************************
1011BOOL WIN32API FlattenPath( HDC arg1)
1012{
1013 dprintf(("GDI32: FlattenPath"));
1014 return O32_FlattenPath(arg1);
1015}
1016//******************************************************************************
1017//******************************************************************************
1018BOOL WIN32API FloodFill(HDC arg1, int arg2, int arg3, COLORREF arg4)
1019{
1020 dprintf(("GDI32: FloodFill"));
1021 return O32_FloodFill(arg1, arg2, arg3, arg4);
1022}
1023//******************************************************************************
1024//******************************************************************************
1025BOOL WIN32API FrameRgn( HDC arg1, HRGN arg2, HBRUSH arg3, int arg4, int arg5)
1026{
1027 dprintf(("GDI32: FrameRgn"));
1028 return O32_FrameRgn(arg1, arg2, arg3, arg4, arg5);
1029}
1030//******************************************************************************
1031//******************************************************************************
1032int WIN32API GetArcDirection( HDC arg1)
1033{
1034 dprintf(("GDI32: GetArcDirection"));
1035 return O32_GetArcDirection(arg1);
1036}
1037//******************************************************************************
1038//******************************************************************************
1039BOOL WIN32API GetAspectRatioFilterEx( HDC arg1, PSIZE arg2)
1040{
1041 dprintf(("GDI32: GetAspectRatioFilterEx"));
1042 return O32_GetAspectRatioFilterEx(arg1, arg2);
1043}
1044//******************************************************************************
1045//******************************************************************************
1046LONG WIN32API GetBitmapBits( HBITMAP arg1, LONG arg2, PVOID arg3)
1047{
1048 dprintf(("GDI32: GetBitmapBits"));
1049 return O32_GetBitmapBits(arg1, arg2, arg3);
1050}
1051//******************************************************************************
1052//******************************************************************************
1053BOOL WIN32API GetBitmapDimensionEx( HBITMAP arg1, PSIZE arg2)
1054{
1055 dprintf(("GDI32: GetBitmapDimensionEx"));
1056 return O32_GetBitmapDimensionEx(arg1, arg2);
1057}
1058//******************************************************************************
1059//******************************************************************************
1060COLORREF WIN32API GetBkColor( HDC arg1)
1061{
1062 dprintf(("GDI32: GetBkColor"));
1063 return O32_GetBkColor(arg1);
1064}
1065//******************************************************************************
1066//******************************************************************************
1067int WIN32API GetBkMode( HDC arg1)
1068{
1069 dprintf(("GDI32: GetBkMode"));
1070 return O32_GetBkMode(arg1);
1071}
1072//******************************************************************************
1073//******************************************************************************
1074UINT WIN32API GetBoundsRect( HDC arg1, PRECT arg2, UINT arg3)
1075{
1076 dprintf(("GDI32: GetBoundsRect"));
1077 return O32_GetBoundsRect(arg1, arg2, arg3);
1078}
1079//******************************************************************************
1080//******************************************************************************
1081BOOL WIN32API GetBrushOrgEx( HDC arg1, PPOINT arg2)
1082{
1083 dprintf(("GDI32: GetBrushOrgEx"));
1084 return O32_GetBrushOrgEx(arg1, arg2);
1085}
1086//******************************************************************************
1087//******************************************************************************
1088BOOL WIN32API GetCharABCWidthsA( HDC arg1, UINT arg2, UINT arg3, LPABC arg4)
1089{
1090 dprintf(("GDI32: GetCharABCWidthsA"));
1091 return O32_GetCharABCWidths(arg1, arg2, arg3, arg4);
1092}
1093//******************************************************************************
1094//******************************************************************************
1095BOOL WIN32API GetCharABCWidthsW( HDC arg1, UINT arg2, UINT arg3, LPABC arg4)
1096{
1097 dprintf(("GDI32: GetCharABCWidthsW not properly implemented."));
1098 // NOTE: This will not work as is (needs UNICODE support)
1099 return O32_GetCharABCWidths(arg1, arg2, arg3, arg4);
1100}
1101//******************************************************************************
1102//******************************************************************************
1103BOOL WIN32API GetCharWidthA( HDC arg1, UINT arg2, UINT arg3, PINT arg4)
1104{
1105 dprintf(("GDI32: GetCharWidthA"));
1106 return O32_GetCharWidth(arg1, arg2, arg3, arg4);
1107}
1108//******************************************************************************
1109//TODO: Cut off Unicode chars?
1110//******************************************************************************
1111BOOL WIN32API GetCharWidthW(HDC arg1, UINT iFirstChar, UINT iLastChar, PINT arg4)
1112{
1113 dprintf(("GDI32: GetCharWidthW, not properly implemented"));
1114 return O32_GetCharWidth(arg1, iFirstChar, iLastChar, arg4);
1115}
1116//******************************************************************************
1117//******************************************************************************
1118int WIN32API GetClipBox( HDC arg1, PRECT arg2)
1119{
1120 int rc;
1121
1122 rc = O32_GetClipBox(arg1, arg2);
1123 dprintf(("GDI32: GetClipBox of %X returned %d\n", arg1, rc));
1124 return(rc);
1125}
1126//******************************************************************************
1127//******************************************************************************
1128int WIN32API GetClipRgn( HDC arg1, HRGN arg2)
1129{
1130 dprintf(("GDI32: GetClipRgn"));
1131 return O32_GetClipRgn(arg1, arg2);
1132}
1133//******************************************************************************
1134//******************************************************************************
1135HANDLE WIN32API GetCurrentObject( HDC arg1, UINT arg2)
1136{
1137 dprintf(("GDI32: GetCurrentObject"));
1138 return (HANDLE)O32_GetCurrentObject(arg1, arg2);
1139}
1140//******************************************************************************
1141//******************************************************************************
1142BOOL WIN32API GetCurrentPositionEx( HDC arg1, PPOINT arg2)
1143{
1144 dprintf(("GDI32: GetCurrentPositionEx"));
1145 return O32_GetCurrentPositionEx(arg1, arg2);
1146}
1147//******************************************************************************
1148//******************************************************************************
1149int WIN32API GetDIBits( HDC arg1, HBITMAP arg2, UINT arg3, UINT arg4, void * arg5, PBITMAPINFO arg6, UINT arg7)
1150{
1151 dprintf(("GDI32: GetDIBits"));
1152 return O32_GetDIBits(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
1153}
1154//******************************************************************************
1155//******************************************************************************
1156int WIN32API GetDeviceCaps(HDC hdc, int nIndex)
1157{
1158 int rc;
1159
1160 rc = O32_GetDeviceCaps(hdc, nIndex);
1161 dprintf(("GDI32: GetDeviceCaps %X, %d returned %d\n", hdc, nIndex, rc));
1162 //SvL: 13-9-'98: NT returns -1 when using 16 bits colors, NOT 65536!
1163 if(nIndex == NUMCOLORS && rc > 256)
1164 return -1;
1165 return(rc);
1166}
1167//******************************************************************************
1168//******************************************************************************
1169HENHMETAFILE WIN32API GetEnhMetaFileA( LPCSTR arg1)
1170{
1171 dprintf(("GDI32: GetEnhMetaFileA"));
1172 return O32_GetEnhMetaFile(arg1);
1173}
1174//******************************************************************************
1175//******************************************************************************
1176UINT WIN32API GetEnhMetaFileBits( HENHMETAFILE arg1, UINT arg2, PBYTE arg3)
1177{
1178 dprintf(("GDI32: GetEnhMetaFileBits"));
1179 return O32_GetEnhMetaFileBits(arg1, arg2, arg3);
1180}
1181//******************************************************************************
1182//******************************************************************************
1183UINT WIN32API GetEnhMetaFileHeader( HENHMETAFILE arg1, UINT arg2, LPENHMETAHEADER arg3)
1184{
1185 dprintf(("GDI32: GetEnhMetaFileHeader"));
1186 return O32_GetEnhMetaFileHeader(arg1, arg2, arg3);
1187}
1188//******************************************************************************
1189//******************************************************************************
1190UINT WIN32API GetEnhMetaFilePaletteEntries( HENHMETAFILE arg1, UINT arg2, PPALETTEENTRY arg3)
1191{
1192 dprintf(("GDI32: GetEnhMetaFilePaletteEntries"));
1193 return O32_GetEnhMetaFilePaletteEntries(arg1, arg2, arg3);
1194}
1195//******************************************************************************
1196//******************************************************************************
1197HENHMETAFILE WIN32API GetEnhMetaFileW( LPCWSTR arg1)
1198{
1199 char *astring = UnicodeToAsciiString((LPWSTR)arg1);
1200 HENHMETAFILE rc;
1201
1202 dprintf(("GDI32: GetEnhMetaFileW"));
1203 // NOTE: This will not work as is (needs UNICODE support)
1204 rc = O32_GetEnhMetaFile(astring);
1205 FreeAsciiString(astring);
1206 return rc;
1207}
1208//******************************************************************************
1209//******************************************************************************
1210int WIN32API GetGraphicsMode(HDC arg1)
1211{
1212 dprintf(("GDI32: GetGraphicsMode"));
1213 return O32_GetGraphicsMode(arg1);
1214}
1215//******************************************************************************
1216//******************************************************************************
1217DWORD WIN32API GetKerningPairsA( HDC arg1, DWORD arg2, LPKERNINGPAIR arg3)
1218{
1219 dprintf(("GDI32: GetKerningPairsA"));
1220 return O32_GetKerningPairs(arg1, arg2, arg3);
1221}
1222//******************************************************************************
1223//******************************************************************************
1224DWORD WIN32API GetKerningPairsW( HDC arg1, DWORD arg2, LPKERNINGPAIR arg3)
1225{
1226 dprintf(("GDI32: GetKerningPairsW"));
1227 // NOTE: This will not work as is (needs UNICODE support)
1228 return O32_GetKerningPairs(arg1, arg2, arg3);
1229}
1230//******************************************************************************
1231//******************************************************************************
1232int WIN32API GetMapMode( HDC arg1)
1233{
1234 dprintf(("GDI32: GetMapMode"));
1235 return O32_GetMapMode(arg1);
1236}
1237//******************************************************************************
1238//******************************************************************************
1239HMETAFILE WIN32API GetMetaFileA( LPCSTR arg1)
1240{
1241 dprintf(("GDI32: GetMetaFileA"));
1242 return O32_GetMetaFile(arg1);
1243}
1244//******************************************************************************
1245//******************************************************************************
1246UINT WIN32API GetMetaFileBitsEx( HMETAFILE arg1, UINT arg2, LPVOID arg3)
1247{
1248 dprintf(("GDI32: GetMetaFileBitsEx"));
1249 return O32_GetMetaFileBitsEx(arg1, arg2, arg3);
1250}
1251//******************************************************************************
1252//******************************************************************************
1253HMETAFILE WIN32API GetMetaFileW( LPCWSTR arg1)
1254{
1255 char *astring = UnicodeToAsciiString((LPWSTR)arg1);
1256 HENHMETAFILE rc;
1257
1258 dprintf(("GDI32: GetMetaFileW"));
1259 rc = O32_GetMetaFile(astring);
1260 FreeAsciiString(astring);
1261 return rc;
1262
1263}
1264//******************************************************************************
1265//******************************************************************************
1266BOOL WIN32API GetMiterLimit( HDC arg1, float * arg2)
1267{
1268 dprintf(("GDI32: GetMiterLimit"));
1269 return O32_GetMiterLimit(arg1, arg2);
1270}
1271//******************************************************************************
1272//******************************************************************************
1273COLORREF WIN32API GetNearestColor( HDC arg1, COLORREF arg2)
1274{
1275 dprintf(("GDI32: GetNearestColor\n"));
1276 return O32_GetNearestColor(arg1, arg2);
1277}
1278//******************************************************************************
1279//******************************************************************************
1280UINT WIN32API GetNearestPaletteIndex( HPALETTE arg1, COLORREF arg2)
1281{
1282 dprintf(("GDI32: GetNearestPaletteIndex\n"));
1283 return O32_GetNearestPaletteIndex(arg1, arg2);
1284}
1285//******************************************************************************
1286//******************************************************************************
1287int WIN32API GetObjectW( HGDIOBJ arg1, int arg2, void * arg3)
1288{
1289 dprintf(("GDI32: GetObjectW %X, %d %X\n", arg1, arg2, arg3));
1290 // NOTE: This will not work as is (needs UNICODE support)
1291 return O32_GetObject(arg1, arg2, arg3);
1292}
1293//******************************************************************************
1294//******************************************************************************
1295UINT WIN32API GetOutlineTextMetricsA( HDC arg1, UINT arg2, LPOUTLINETEXTMETRICA arg3)
1296{
1297 dprintf(("GDI32: GetOutlineTextMetricsA"));
1298 return O32_GetOutlineTextMetrics(arg1, arg2, arg3);
1299}
1300//******************************************************************************
1301//******************************************************************************
1302UINT WIN32API GetOutlineTextMetricsW( HDC arg1, UINT arg2, LPOUTLINETEXTMETRICW arg3)
1303{
1304 dprintf(("GDI32: GetOutlineTextMetricsW STUB"));
1305 // NOTE: This will not work as is (needs UNICODE support)
1306// return O32_GetOutlineTextMetrics(arg1, arg2, arg3);
1307 return 0;
1308}
1309//******************************************************************************
1310//******************************************************************************
1311UINT WIN32API GetPaletteEntries( HPALETTE arg1, UINT arg2, UINT arg3, PPALETTEENTRY arg4)
1312{
1313 dprintf(("GDI32: GetPaletteEntries"));
1314 return O32_GetPaletteEntries(arg1, arg2, arg3, arg4);
1315}
1316//******************************************************************************
1317//******************************************************************************
1318INT WIN32API GetPath( HDC arg1, PPOINT arg2, PBYTE arg3, int arg4)
1319{
1320 dprintf(("GDI32: GetPath"));
1321 return O32_GetPath(arg1, arg2, arg3, arg4);
1322}
1323//******************************************************************************
1324//******************************************************************************
1325int WIN32API GetPolyFillMode( HDC arg1)
1326{
1327 dprintf(("GDI32: GetPolyFillMode"));
1328 return O32_GetPolyFillMode(arg1);
1329}
1330//******************************************************************************
1331//******************************************************************************
1332int WIN32API GetROP2( HDC arg1)
1333{
1334 dprintf(("GDI32: GetROP2"));
1335 return O32_GetROP2(arg1);
1336}
1337//******************************************************************************
1338//******************************************************************************
1339BOOL WIN32API GetRasterizerCaps(LPRASTERIZER_STATUS arg1, UINT arg2)
1340{
1341 dprintf(("GDI32: GetRasterizerCaps"));
1342 return O32_GetRasterizerCaps(arg1, arg2);
1343}
1344//******************************************************************************
1345//******************************************************************************
1346DWORD WIN32API GetRegionData( HRGN arg1, DWORD arg2, PRGNDATA arg3)
1347{
1348 dprintf(("GDI32: GetRegionData"));
1349 return O32_GetRegionData(arg1, arg2, arg3);
1350}
1351//******************************************************************************
1352//******************************************************************************
1353int WIN32API GetRgnBox( HRGN arg1, PRECT arg2)
1354{
1355 dprintf(("GDI32: GetRgnBox"));
1356 return O32_GetRgnBox(arg1, arg2);
1357}
1358//******************************************************************************
1359//******************************************************************************
1360int WIN32API GetStretchBltMode( HDC arg1)
1361{
1362 dprintf(("GDI32: GetStretchBltMode"));
1363 return O32_GetStretchBltMode(arg1);
1364}
1365//******************************************************************************
1366//******************************************************************************
1367UINT WIN32API GetSystemPaletteEntries( HDC arg1, UINT arg2, UINT arg3, PPALETTEENTRY arg4)
1368{
1369 UINT rc;
1370
1371 dprintf(("GDI32: GetSystemPaletteEntries start %d nr %d pal ptr %X", arg2, arg3, arg4));
1372 rc = O32_GetSystemPaletteEntries(arg1, arg2, arg3, arg4);
1373 dprintf((" GetSystemPaletteEntries returned %d", rc));
1374 return(rc);
1375}
1376//******************************************************************************
1377//******************************************************************************
1378UINT WIN32API GetTextAlign( HDC arg1)
1379{
1380 dprintf(("GDI32: GetTextAlign"));
1381 return O32_GetTextAlign(arg1);
1382}
1383//******************************************************************************
1384//******************************************************************************
1385int WIN32API GetTextCharacterExtra( HDC arg1)
1386{
1387 dprintf(("GDI32: GetTextCharacterExtra"));
1388 return O32_GetTextCharacterExtra(arg1);
1389}
1390//******************************************************************************
1391//******************************************************************************
1392COLORREF WIN32API GetTextColor( HDC arg1)
1393{
1394 dprintf(("GDI32: GetTextColor"));
1395 return O32_GetTextColor(arg1);
1396}
1397//******************************************************************************
1398//******************************************************************************
1399BOOL WIN32API GetTextExtentPoint32A( HDC arg1, LPCSTR arg2, int arg3, PSIZE lpSize)
1400{
1401 dprintf(("GDI32: GetTextExtentPoint32A"));
1402 lpSize->cx = lpSize->cy = 0;
1403 return O32_GetTextExtentPoint32(arg1, arg2, arg3, lpSize);
1404}
1405//******************************************************************************
1406//******************************************************************************
1407BOOL WIN32API GetTextExtentPoint32W(HDC arg1, LPCWSTR arg2, int arg3, PSIZE lpSize)
1408{
1409 char *astring = UnicodeToAsciiString((LPWSTR)arg2);
1410 BOOL rc;
1411
1412 dprintf(("GDI32: GetTextExtentPoint32W %s\n", astring));
1413 lpSize->cx = lpSize->cy = 0;
1414 rc = O32_GetTextExtentPoint32(arg1, astring, arg3, lpSize);
1415 FreeAsciiString(astring);
1416 return(rc);
1417}
1418//******************************************************************************
1419//******************************************************************************
1420BOOL WIN32API GetTextExtentPointW(HDC hdc,
1421 LPCWSTR lpString,
1422 int cbString,
1423 PSIZE lpSize)
1424{
1425 char *astring = UnicodeToAsciiString((LPWSTR)lpString);
1426 BOOL rc;
1427
1428 lpSize->cx = lpSize->cy = 0;
1429 rc = O32_GetTextExtentPoint(hdc,
1430 astring,
1431 cbString,
1432 lpSize);
1433 dprintf(("GDI32: GetTextExtentPointW %X %s (size %08xh) returned %d\n", hdc, astring, cbString, rc));
1434 dprintf(("GDI32: GetTextExtentPointW (%d,%d)\n", lpSize->cx, lpSize->cy));
1435
1436 FreeAsciiString(astring);
1437 return(rc);
1438}
1439//******************************************************************************
1440//******************************************************************************
1441int WIN32API GetTextFaceA( HDC arg1, int arg2, LPSTR arg3)
1442{
1443 dprintf(("GDI32: GetTextFaceA"));
1444 return O32_GetTextFace(arg1, arg2, arg3);
1445}
1446//******************************************************************************
1447//******************************************************************************
1448int WIN32API GetTextFaceW( HDC arg1, int arg2, LPWSTR arg3)
1449{
1450 char *astring = (char *)malloc(arg2+1);
1451 int rc;
1452
1453 dprintf(("GDI32: GetTextFaceW"));
1454 rc = O32_GetTextFace(arg1, arg2, astring);
1455 AsciiToUnicode(astring, arg3);
1456 return rc;
1457}
1458//******************************************************************************
1459//******************************************************************************
1460BOOL WIN32API GetTextMetricsA( HDC arg1, LPTEXTMETRICA arg2)
1461{
1462 BOOL rc;
1463
1464 rc = O32_GetTextMetrics(arg1, arg2);
1465 dprintf(("GDI32: GetTextMetricsA returned %d\n", rc));
1466 return(rc);
1467}
1468//******************************************************************************
1469//******************************************************************************
1470BOOL WIN32API GetTextMetricsW( HDC arg1, LPTEXTMETRICW pwtm)
1471{
1472 BOOL rc;
1473 TEXTMETRICA atm;
1474
1475 dprintf(("GDI32: GetTextMetricsW"));
1476
1477 rc = O32_GetTextMetrics(arg1, &atm);
1478 pwtm->tmHeight = atm.tmHeight;
1479 pwtm->tmAscent = atm.tmAscent;
1480 pwtm->tmDescent = atm.tmDescent;
1481 pwtm->tmInternalLeading = atm.tmInternalLeading;
1482 pwtm->tmExternalLeading = atm.tmExternalLeading;
1483 pwtm->tmAveCharWidth = atm.tmAveCharWidth;
1484 pwtm->tmMaxCharWidth = atm.tmMaxCharWidth;
1485 pwtm->tmWeight = atm.tmWeight;
1486 pwtm->tmOverhang = atm.tmOverhang;
1487 pwtm->tmDigitizedAspectX = atm.tmDigitizedAspectX;
1488 pwtm->tmDigitizedAspectY = atm.tmDigitizedAspectY;
1489 pwtm->tmFirstChar = atm.tmFirstChar;
1490 pwtm->tmLastChar = atm.tmLastChar;
1491 pwtm->tmDefaultChar = atm.tmDefaultChar;
1492 pwtm->tmBreakChar = atm.tmBreakChar;
1493 pwtm->tmItalic = atm.tmItalic;
1494 pwtm->tmUnderlined = atm.tmUnderlined;
1495 pwtm->tmStruckOut = atm.tmStruckOut;
1496 pwtm->tmPitchAndFamily = atm.tmPitchAndFamily;
1497 pwtm->tmCharSet = atm.tmCharSet;
1498 return(rc);
1499}
1500//******************************************************************************
1501//******************************************************************************
1502BOOL WIN32API GetViewportExtEx( HDC arg1, PSIZE arg2)
1503{
1504 dprintf(("GDI32: GetViewportExtEx"));
1505 return O32_GetViewportExtEx(arg1, arg2);
1506}
1507//******************************************************************************
1508//******************************************************************************
1509BOOL WIN32API GetViewportOrgEx( HDC arg1, PPOINT arg2)
1510{
1511 dprintf(("GDI32: GetViewportOrgEx"));
1512 return O32_GetViewportOrgEx(arg1, arg2);
1513}
1514//******************************************************************************
1515//******************************************************************************
1516UINT WIN32API GetWinMetaFileBits( HENHMETAFILE arg1, UINT arg2, PBYTE arg3, int arg4, HDC arg5)
1517{
1518 dprintf(("GDI32: GetWinMetaFileBits"));
1519 return O32_GetWinMetaFileBits(arg1, arg2, arg3, arg4, arg5);
1520}
1521//******************************************************************************
1522//******************************************************************************
1523BOOL WIN32API GetWindowOrgEx( HDC arg1, PPOINT arg2)
1524{
1525 dprintf(("GDI32: GetWindowOrgEx"));
1526 return O32_GetWindowOrgEx(arg1, arg2);
1527}
1528//******************************************************************************
1529//******************************************************************************
1530BOOL WIN32API GetWorldTransform( HDC arg1, LPXFORM arg2)
1531{
1532 dprintf(("GDI32: GetWorldTransform"));
1533 return O32_GetWorldTransform(arg1, arg2);
1534}
1535//******************************************************************************
1536//******************************************************************************
1537int WIN32API IntersectClipRect(HDC arg1, int arg2, int arg3, int arg4, int arg5)
1538{
1539 int rc;
1540
1541 rc = O32_IntersectClipRect(arg1, arg2, arg3, arg4, arg5);
1542 dprintf(("GDI32: IntersectClipRect returned %d\n", rc));
1543 return(rc);
1544}
1545//******************************************************************************
1546//******************************************************************************
1547BOOL WIN32API InvertRgn( HDC arg1, HRGN arg2)
1548{
1549 dprintf(("GDI32: InvertRgn"));
1550 return O32_InvertRgn(arg1, arg2);
1551}
1552//******************************************************************************
1553//******************************************************************************
1554BOOL WIN32API LPtoDP( HDC arg1, PPOINT arg2, int arg3)
1555{
1556 dprintf(("GDI32: LPtoDP"));
1557 return O32_LPtoDP(arg1, arg2, arg3);
1558}
1559//******************************************************************************
1560//******************************************************************************
1561BOOL WIN32API LineDDA( int nXStart, int nYStart, int nXEnd, int nYEnd, LINEDDAPROC lpLineFunc, LPARAM lpData)
1562{
1563 BOOL rc;
1564 LineDDAProcCallback *callback = new LineDDAProcCallback(lpLineFunc, lpData);
1565 POINT startPt,endPt;
1566
1567 dprintf(("GDI32: LineDDA\n"));
1568
1569 //CB: don't know if Open32 reports the last pixel, but all other line functions do
1570 startPt.x = nXStart;
1571 startPt.y = nYStart;
1572 endPt = ToWin32LineEnd(startPt,nXEnd,nYEnd);
1573
1574 rc = O32_LineDDA(startPt.x,startPt.y,endPt.x,endPt.y,callback->GetOS2Callback(),(LPARAM)callback);
1575 if(callback)
1576 delete callback;
1577 return(rc);
1578}
1579//******************************************************************************
1580//******************************************************************************
1581BOOL WIN32API MaskBlt( HDC arg1, int arg2, int arg3, int arg4, int arg5, HDC arg6, int arg7, int arg8, HBITMAP arg9, int arg10, int arg11, DWORD arg12)
1582{
1583 dprintf(("GDI32: MaskBlt"));
1584 return O32_MaskBlt(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
1585}
1586//******************************************************************************
1587//******************************************************************************
1588BOOL WIN32API ModifyWorldTransform( HDC arg1, const XFORM *arg2, DWORD arg3)
1589{
1590 dprintf(("GDI32: ModifyWorldTransform"));
1591 return O32_ModifyWorldTransform(arg1, (LPXFORM)arg2, arg3);
1592}
1593//******************************************************************************
1594//******************************************************************************
1595int WIN32API OffsetClipRgn( HDC arg1, int arg2, int arg3)
1596{
1597 dprintf(("GDI32: OffsetClipRgn"));
1598 return O32_OffsetClipRgn(arg1, arg2, arg3);
1599}
1600//******************************************************************************
1601//******************************************************************************
1602int WIN32API OffsetRgn( HRGN arg1, int arg2, int arg3)
1603{
1604 dprintf(("GDI32: OffsetRgn"));
1605 return O32_OffsetRgn(arg1, arg2, arg3);
1606}
1607//******************************************************************************
1608//******************************************************************************
1609BOOL WIN32API OffsetViewportOrgEx( HDC arg1, int arg2, int arg3, PPOINT arg4)
1610{
1611 dprintf(("GDI32: OffsetViewportOrgEx"));
1612 return O32_OffsetViewportOrgEx(arg1, arg2, arg3, arg4);
1613}
1614//******************************************************************************
1615//******************************************************************************
1616BOOL WIN32API OffsetWindowOrgEx( HDC arg1, int arg2, int arg3, PPOINT arg4)
1617{
1618 dprintf(("GDI32: OffsetWindowOrgEx"));
1619 return O32_OffsetWindowOrgEx(arg1, arg2, arg3, arg4);
1620}
1621//******************************************************************************
1622//******************************************************************************
1623BOOL WIN32API PaintRgn( HDC arg1, HRGN arg2)
1624{
1625 dprintf(("GDI32: PaintRgn"));
1626 return O32_PaintRgn(arg1, arg2);
1627}
1628//******************************************************************************
1629//******************************************************************************
1630HRGN WIN32API PathToRegion( HDC arg1)
1631{
1632 dprintf(("GDI32: PathToRegion"));
1633 return O32_PathToRegion(arg1);
1634}
1635//******************************************************************************
1636//******************************************************************************
1637BOOL WIN32API Pie(HDC hdc, int nLeftRect, int nTopRect, int nRightRect,
1638 int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2,
1639 int nYRadial2)
1640{
1641 dprintf(("GDI32: Pie"));
1642 //CB: bug in O32_Pie
1643 if (nXRadial1 == nXRadial2 && nYRadial1 == nYRadial2)
1644 return O32_Ellipse(hdc,nLeftRect,nTopRect,nRightRect,nBottomRect);
1645 else
1646 return O32_Pie(hdc,nLeftRect,nTopRect,nRightRect,nBottomRect,nXRadial1,nYRadial1,nXRadial2,nYRadial2);
1647}
1648//******************************************************************************
1649//******************************************************************************
1650BOOL WIN32API PlayEnhMetaFile( HDC arg1, HENHMETAFILE arg2, const RECT * arg3)
1651{
1652 dprintf(("GDI32: PlayEnhMetaFile"));
1653 return O32_PlayEnhMetaFile(arg1, arg2, arg3);
1654}
1655//******************************************************************************
1656//******************************************************************************
1657BOOL WIN32API PlayMetaFile( HDC arg1, HMETAFILE arg2)
1658{
1659 dprintf(("GDI32: PlayMetaFile"));
1660 return O32_PlayMetaFile(arg1, arg2);
1661}
1662//******************************************************************************
1663//******************************************************************************
1664BOOL WIN32API PlayMetaFileRecord( HDC arg1, LPHANDLETABLE arg2, LPMETARECORD arg3, UINT arg4)
1665{
1666 dprintf(("GDI32: PlayMetaFileRecord"));
1667 return O32_PlayMetaFileRecord(arg1, arg2, arg3, (int)arg4);
1668}
1669//******************************************************************************
1670//******************************************************************************
1671BOOL WIN32API PolyBezier( HDC arg1, const POINT * arg2, DWORD arg3)
1672{
1673 dprintf(("GDI32: PolyBezier"));
1674 return O32_PolyBezier(arg1, arg2, (int)arg3);
1675}
1676//******************************************************************************
1677//******************************************************************************
1678BOOL WIN32API PolyBezierTo( HDC arg1, const POINT * arg2, DWORD arg3)
1679{
1680 dprintf(("GDI32: PolyBezierTo"));
1681 return O32_PolyBezierTo(arg1, arg2, arg3);
1682}
1683//******************************************************************************
1684//******************************************************************************
1685BOOL WIN32API PolyDraw( HDC arg1, const POINT * arg2, const BYTE * arg3, DWORD arg4)
1686{
1687 dprintf(("GDI32: PolyDraw"));
1688 return O32_PolyDraw(arg1, arg2, arg3, arg4);
1689}
1690//******************************************************************************
1691//******************************************************************************
1692BOOL WIN32API PolyPolygon( HDC arg1, const POINT * arg2, const INT * arg3, UINT arg4)
1693{
1694 dprintf(("GDI32: PolyPolygon"));
1695 return O32_PolyPolygon(arg1, arg2, arg3, arg4);
1696}
1697//******************************************************************************
1698//******************************************************************************
1699BOOL WIN32API PolyPolyline( HDC hdc, const POINT * lppt, const DWORD * lpdwPolyPoints, DWORD cCount)
1700{
1701 dprintf(("GDI32: PolyPolyline"));
1702
1703 return O32_PolyPolyline(hdc,lppt,lpdwPolyPoints,cCount);
1704}
1705//******************************************************************************
1706//******************************************************************************
1707BOOL WIN32API Polygon( HDC arg1, const POINT * arg2, int arg3)
1708{
1709 dprintf(("GDI32: Polygon"));
1710 return O32_Polygon(arg1, arg2, arg3);
1711}
1712//******************************************************************************
1713//******************************************************************************
1714BOOL WIN32API Polyline( HDC hdc, const POINT *lppt, int cPoints)
1715{
1716 dprintf(("GDI32: Polyline"));
1717
1718 if (cPoints == 0) return TRUE;
1719 if (cPoints < 0)
1720 {
1721 SetLastError(ERROR_INVALID_PARAMETER);
1722
1723 return FALSE;
1724 }
1725
1726 if (cPoints == 1)
1727 {
1728 DrawSingleLinePoint(hdc,*lppt); //CB: check metafile recording
1729
1730 return TRUE;
1731 }
1732
1733 //CB: Open32 draw a pixel too much!
1734 POINT *points = (POINT*)lppt;
1735 POINT lastPt = lppt[cPoints-1];
1736 BOOL rc;
1737
1738 points[cPoints-1] = ToWin32LineEnd(lppt[cPoints-2],lastPt.x,lastPt.y);
1739 rc = O32_Polyline(hdc,lppt,cPoints);
1740 points[cPoints-1] = lastPt;
1741
1742 return rc;
1743}
1744//******************************************************************************
1745//******************************************************************************
1746BOOL WIN32API PolylineTo( HDC hdc, const POINT * lppt, DWORD cCount)
1747{
1748 dprintf(("GDI32: PolylineTo"));
1749
1750 if (cCount == 0) return TRUE;
1751
1752 if (cCount == 1)
1753 {
1754 DrawSingleLinePoint(hdc,*lppt);
1755
1756 return TRUE; //CB: check metafile recording
1757 }
1758
1759 //CB: Open32 draw a pixel too much!
1760 POINT *points = (POINT*)lppt;
1761 POINT lastPt = lppt[cCount-1];
1762 BOOL rc;
1763
1764 points[cCount-1] = ToWin32LineEnd(lppt[cCount-2],lastPt.x,lastPt.y);
1765 rc = O32_PolylineTo(hdc,lppt,cCount);
1766 points[cCount-1] = lastPt;
1767 MoveToEx(hdc,lastPt.x,lastPt.y,NULL);
1768
1769 return rc;
1770}
1771//******************************************************************************
1772//******************************************************************************
1773BOOL WIN32API PtInRegion( HRGN arg1, int arg2, int arg3)
1774{
1775 dprintf(("GDI32: PtInRegion"));
1776 return O32_PtInRegion(arg1, arg2, arg3);
1777}
1778//******************************************************************************
1779//******************************************************************************
1780BOOL WIN32API PtVisible( HDC arg1, int arg2, int arg3)
1781{
1782 dprintf(("GDI32: PtVisible"));
1783 return O32_PtVisible(arg1, arg2, arg3);
1784}
1785//******************************************************************************
1786//******************************************************************************
1787BOOL WIN32API RectInRegion( HRGN arg1, const RECT * arg2)
1788{
1789 dprintf(("GDI32: RectInRegion"));
1790 return O32_RectInRegion(arg1, arg2);
1791}
1792//******************************************************************************
1793//******************************************************************************
1794BOOL WIN32API RectVisible( HDC arg1, const RECT * arg2)
1795{
1796 dprintf(("GDI32: RectVisible\n"));
1797 return O32_RectVisible(arg1, arg2);
1798}
1799//******************************************************************************
1800//******************************************************************************
1801HDC WIN32API ResetDCA( HDC arg1, const DEVMODEA * arg2)
1802{
1803 dprintf(("GDI32: ResetDCA\n"));
1804 return (HDC)O32_ResetDC(arg1, arg2);
1805}
1806//******************************************************************************
1807//******************************************************************************
1808HDC WIN32API ResetDCW( HDC arg1, const DEVMODEW * arg2)
1809{
1810 dprintf(("GDI32: ResetDCW\n"));
1811 // NOTE: This will not work as is (needs UNICODE support)
1812 return (HDC)O32_ResetDC(arg1, (const DEVMODEA *)arg2);
1813}
1814//******************************************************************************
1815//******************************************************************************
1816BOOL WIN32API ResizePalette( HPALETTE arg1, UINT arg2)
1817{
1818 dprintf(("GDI32: ResizePalette\n"));
1819 return O32_ResizePalette(arg1, arg2);
1820}
1821//******************************************************************************
1822//******************************************************************************
1823BOOL WIN32API RestoreDC( HDC arg1, int arg2)
1824{
1825 dprintf(("GDI32: RestoreDC\n"));
1826 return O32_RestoreDC(arg1, arg2);
1827}
1828//******************************************************************************
1829//******************************************************************************
1830BOOL WIN32API RoundRect( HDC arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7)
1831{
1832 dprintf(("GDI32: RoundRect"));
1833 return O32_RoundRect(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
1834}
1835//******************************************************************************
1836//******************************************************************************
1837int WIN32API SaveDC( HDC arg1)
1838{
1839 dprintf(("GDI32: SaveDC"));
1840 return O32_SaveDC(arg1);
1841}
1842//******************************************************************************
1843//******************************************************************************
1844BOOL WIN32API ScaleViewportExtEx( HDC arg1, int arg2, int arg3, int arg4, int arg5, PSIZE arg6)
1845{
1846 dprintf(("GDI32: ScaleViewportExtEx"));
1847 return O32_ScaleViewportExtEx(arg1, arg2, arg3, arg4, arg5, arg6);
1848}
1849//******************************************************************************
1850//******************************************************************************
1851BOOL WIN32API ScaleWindowExtEx( HDC arg1, int arg2, int arg3, int arg4, int arg5, PSIZE arg6)
1852{
1853 dprintf(("GDI32: ScaleWindowExtEx"));
1854 return O32_ScaleWindowExtEx(arg1, arg2, arg3, arg4, arg5, arg6);
1855}
1856//******************************************************************************
1857//******************************************************************************
1858int WIN32API SelectClipRgn( HDC arg1, HRGN arg2)
1859{
1860 dprintf(("GDI32: SelectClipRgn"));
1861 return O32_SelectClipRgn(arg1, arg2);
1862}
1863//******************************************************************************
1864//******************************************************************************
1865int WIN32API SetArcDirection( HDC arg1, int arg2)
1866{
1867 dprintf(("GDI32: SetArcDirection"));
1868 return O32_SetArcDirection(arg1, arg2);
1869}
1870//******************************************************************************
1871//******************************************************************************
1872LONG WIN32API SetBitmapBits( HBITMAP arg1, LONG arg2, const VOID * arg3)
1873{
1874 dprintf(("GDI32: SetBitmapBits"));
1875 return O32_SetBitmapBits(arg1, (DWORD)arg2, arg3);
1876}
1877//******************************************************************************
1878//******************************************************************************
1879BOOL WIN32API SetBitmapDimensionEx( HBITMAP arg1, int arg2, int arg3, PSIZE arg4)
1880{
1881 dprintf(("GDI32: SetBitmapDimensionEx"));
1882 return O32_SetBitmapDimensionEx(arg1, arg2, arg3, arg4);
1883}
1884//******************************************************************************
1885//******************************************************************************
1886UINT WIN32API SetBoundsRect( HDC arg1, const RECT * arg2, UINT arg3)
1887{
1888 dprintf(("GDI32: SetBoundsRect"));
1889 return O32_SetBoundsRect(arg1, arg2, arg3);
1890}
1891//******************************************************************************
1892//******************************************************************************
1893BOOL WIN32API SetBrushOrgEx( HDC arg1, int arg2, int arg3, PPOINT arg4)
1894{
1895 BOOL rc;
1896
1897 rc = O32_SetBrushOrgEx(arg1, arg2, arg3, arg4);
1898 dprintf(("GDI32: SetBrushOrgEx returned %d\n", rc));
1899 return(rc);
1900}
1901//******************************************************************************
1902//******************************************************************************
1903int WIN32API SetDIBits( HDC arg1, HBITMAP arg2, UINT arg3, UINT arg4, const VOID * arg5, const BITMAPINFO * arg6, UINT arg7)
1904{
1905 dprintf(("GDI32: SetDIBits %x %x %x %x %x %x %x\n", arg1, arg2, arg3, arg4, arg5, arg6, arg7));
1906
1907 if(DIBSection::getSection() != NULL) {
1908 DIBSection *dsect;
1909
1910 dsect = DIBSection::find((DWORD)arg2);
1911 if(dsect) {
1912 return dsect->SetDIBits(arg1, arg2, arg3, arg4, arg5, (WINBITMAPINFOHEADER *)&arg6->bmiHeader, arg7);
1913 }
1914 }
1915 return O32_SetDIBits(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
1916}
1917//******************************************************************************
1918//******************************************************************************
1919INT WIN32API SetDIBitsToDevice(HDC hdc, INT xDest, INT yDest, DWORD cx, DWORD cy, INT xSrc, INT ySrc, UINT startscan, UINT lines, LPCVOID bits, const BITMAPINFO *info, UINT coloruse)
1920{
1921 INT result, imgsize, palsize;
1922 char *ptr;
1923
1924 dprintf(("GDI32: SetDIBitsToDevice hdc:%X xDest:%d yDest:%d, cx:%d, cy:%d, xSrc:%d, ySrc:%d, startscan:%d, lines:%d, bits:%X, info%X, coloruse:%d",
1925 hdc, xDest, yDest, cx, cy, xSrc, ySrc, startscan, lines, (LPVOID) bits, (PBITMAPINFO)info, coloruse));
1926
1927 // EB: ->>> Crazy. Nobody seen this Open32 bug ?
1928 // Dont't like dirty pointers, but Open32 needs a bit help.
1929 // Only tested with winmine.
1930 palsize = QueryPaletteSize((BITMAPINFOHEADER*)&info->bmiHeader);
1931 imgsize = CalcBitmapSize(info->bmiHeader.biBitCount,
1932 info->bmiHeader.biWidth, info->bmiHeader.biHeight);
1933 ptr = ((char *)info) + palsize + sizeof(BITMAPINFOHEADER);
1934 if(bits >= ptr && bits < ptr + imgsize)
1935 {
1936 bits = (char *)bits - imgsize +
1937 CalcBitmapSize(info->bmiHeader.biBitCount,
1938 info->bmiHeader.biWidth, lines);
1939 }
1940 // EB: <<<-
1941
1942 result = O32_SetDIBitsToDevice(hdc, xDest, yDest, cx, cy, xSrc, ySrc, startscan, lines, (PVOID) bits, (PBITMAPINFO)info, coloruse);
1943 return result;
1944}
1945//******************************************************************************
1946//******************************************************************************
1947HENHMETAFILE WIN32API SetEnhMetaFileBits( UINT arg1, const BYTE * arg2)
1948{
1949 dprintf(("GDI32: SetEnhMetaFileBits"));
1950 return O32_SetEnhMetaFileBits(arg1, arg2);
1951}
1952//******************************************************************************
1953//******************************************************************************
1954int WIN32API SetGraphicsMode(HDC arg1, int arg2)
1955{
1956 dprintf(("GDI32: SetGraphicsMode"));
1957 return O32_SetGraphicsMode(arg1, arg2);
1958}
1959//******************************************************************************
1960//******************************************************************************
1961int WIN32API SetMapMode( HDC arg1, int arg2)
1962{
1963 dprintf(("GDI32: SetMapMode"));
1964 return O32_SetMapMode(arg1, arg2);
1965}
1966//******************************************************************************
1967//******************************************************************************
1968DWORD WIN32API SetMapperFlags( HDC arg1, DWORD arg2)
1969{
1970 dprintf(("GDI32: SetMapperFlags"));
1971 return O32_SetMapperFlags(arg1, arg2);
1972}
1973//******************************************************************************
1974//******************************************************************************
1975HMETAFILE WIN32API SetMetaFileBitsEx( UINT arg1, const BYTE * arg2)
1976{
1977 dprintf(("GDI32: SetMetaFileBitsEx"));
1978 return O32_SetMetaFileBitsEx(arg1, (PBYTE)arg2);
1979}
1980//******************************************************************************
1981//******************************************************************************
1982BOOL WIN32API SetMiterLimit( HDC arg1, float arg2, float * arg3)
1983{
1984 dprintf(("GDI32: SetMiterLimit"));
1985 return O32_SetMiterLimit(arg1, arg2, arg3);
1986}
1987//******************************************************************************
1988//******************************************************************************
1989UINT WIN32API SetPaletteEntries( HPALETTE arg1, UINT arg2, UINT arg3, PALETTEENTRY * arg4)
1990{
1991 dprintf(("GDI32: SetPaletteEntries"));
1992 return O32_SetPaletteEntries(arg1, arg2, arg3, (const PALETTEENTRY *)arg4);
1993}
1994//******************************************************************************
1995//******************************************************************************
1996int WIN32API SetPolyFillMode( HDC arg1, int arg2)
1997{
1998 dprintf(("GDI32: SetPolyFillMode"));
1999 return O32_SetPolyFillMode(arg1, arg2);
2000}
2001//******************************************************************************
2002//******************************************************************************
2003BOOL WIN32API SetRectRgn( HRGN arg1, int arg2, int arg3, int arg4, int arg5)
2004{
2005 dprintf(("GDI32: SetRectRgn"));
2006 return O32_SetRectRgn(arg1, arg2, arg3, arg4, arg5);
2007}
2008//******************************************************************************
2009//******************************************************************************
2010UINT WIN32API SetTextAlign( HDC arg1, UINT arg2)
2011{
2012 dprintf(("GDI32: SetTextAlign"));
2013 return O32_SetTextAlign(arg1, arg2);
2014}
2015//******************************************************************************
2016//******************************************************************************
2017int WIN32API SetTextCharacterExtra( HDC arg1, int arg2)
2018{
2019 dprintf(("GDI32: SetTextCharacterExtra"));
2020 return O32_SetTextCharacterExtra(arg1, arg2);
2021}
2022//******************************************************************************
2023//******************************************************************************
2024BOOL WIN32API SetTextJustification( HDC arg1, int arg2, int arg3)
2025{
2026 dprintf(("GDI32: SetTextJustification"));
2027 return O32_SetTextJustification(arg1, arg2, arg3);
2028}
2029//******************************************************************************
2030//******************************************************************************
2031BOOL WIN32API SetViewportExtEx( HDC arg1, int arg2, int arg3, PSIZE arg4)
2032{
2033 dprintf(("GDI32: SetViewportExtEx"));
2034 return O32_SetViewportExtEx(arg1, arg2, arg3, arg4);
2035}
2036//******************************************************************************
2037//******************************************************************************
2038BOOL WIN32API SetViewportOrgEx( HDC arg1, int arg2, int arg3, PPOINT arg4)
2039{
2040 dprintf(("GDI32: SetViewportOrgEx"));
2041 return O32_SetViewportOrgEx(arg1, arg2, arg3, arg4);
2042}
2043//******************************************************************************
2044//******************************************************************************
2045HENHMETAFILE WIN32API SetWinMetaFileBits( UINT arg1, const BYTE * arg2, HDC arg3, const METAFILEPICT * arg4)
2046{
2047 dprintf(("GDI32: SetWinMetaFileBits"));
2048 return O32_SetWinMetaFileBits(arg1, arg2, arg3, arg4);
2049}
2050//******************************************************************************
2051//******************************************************************************
2052BOOL WIN32API SetWindowExtEx( HDC arg1, int arg2, int arg3, PSIZE arg4)
2053{
2054 dprintf(("GDI32: SetWindowExtEx"));
2055 return O32_SetWindowExtEx(arg1, arg2, arg3, arg4);
2056}
2057//******************************************************************************
2058//******************************************************************************
2059BOOL WIN32API SetWindowOrgEx( HDC arg1, int arg2, int arg3, PPOINT arg4)
2060{
2061 dprintf(("GDI32: SetWindowOrgEx"));
2062 return O32_SetWindowOrgEx(arg1, arg2, arg3, arg4);
2063}
2064//******************************************************************************
2065//******************************************************************************
2066BOOL WIN32API SetWorldTransform( HDC arg1, const XFORM *arg2)
2067{
2068 dprintf(("GDI32: SetWorldTransform"));
2069 return O32_SetWorldTransform(arg1, (LPXFORM)arg2);
2070}
2071//******************************************************************************
2072//******************************************************************************
2073INT WIN32API StartDocA( HDC arg1, const DOCINFOA *arg2)
2074{
2075 dprintf(("GDI32: StartDocA"));
2076 return O32_StartDoc(arg1, (LPDOCINFOA)arg2);
2077}
2078//******************************************************************************
2079//******************************************************************************
2080INT WIN32API StartDocW( HDC arg1, const DOCINFOW *arg2)
2081{
2082 dprintf(("GDI32: StartDocW STUB"));
2083 // NOTE: This will not work as is (needs UNICODE support)
2084// return O32_StartDoc(arg1, arg2);
2085 return 0;
2086}
2087//******************************************************************************
2088//******************************************************************************
2089int WIN32API StartPage( HDC arg1)
2090{
2091 dprintf(("GDI32: StartPage"));
2092 return O32_StartPage(arg1);
2093}
2094//******************************************************************************
2095//******************************************************************************
2096BOOL WIN32API TextOutW( HDC arg1, int arg2, int arg3, LPCWSTR arg4, int arg5)
2097{
2098 char *astring = UnicodeToAsciiString((LPWSTR)arg4);
2099 BOOL rc;
2100
2101 dprintf(("GDI32: TextOutW"));
2102 // NOTE: This will not work as is (needs UNICODE support)
2103 rc = O32_TextOut(arg1, arg2, arg3, astring, arg5);
2104 FreeAsciiString(astring);
2105 return rc;
2106}
2107//******************************************************************************
2108//******************************************************************************
2109BOOL WIN32API UnrealizeObject( HGDIOBJ arg1)
2110{
2111 dprintf(("GDI32: UnrealizeObject"));
2112 return O32_UnrealizeObject(arg1);
2113}
2114//******************************************************************************
2115//******************************************************************************
2116BOOL WIN32API WidenPath( HDC arg1)
2117{
2118 dprintf(("GDI32: WidenPath"));
2119 return O32_WidenPath(arg1);
2120}
2121//******************************************************************************
2122//CreateDisardableBitmap is obsolete and can be replaced by CreateCompatibleBitmap
2123//******************************************************************************
2124HBITMAP WIN32API CreateDiscardableBitmap(HDC hDC, int nWidth, int nHeight)
2125{
2126 dprintf(("GDI32: CreateDisardableBitmap\n"));
2127 return O32_CreateCompatibleBitmap(hDC, nWidth, nHeight);
2128}
2129//******************************************************************************
2130//TODO: Not implemented
2131//******************************************************************************
2132int WIN32API SetAbortProc(HDC hdc, ABORTPROC lpAbortProc)
2133{
2134 dprintf(("GDI32: SetAbortProc - stub (1)w\n"));
2135 return(1);
2136}
2137//******************************************************************************
2138//Selects the current path as a clipping region for a device context, combining
2139//any existing clipping region by using the specified mode
2140//TODO: Can be emulated with SelectClipRegion??
2141//******************************************************************************
2142BOOL WIN32API SelectClipPath(HDC hdc, int iMode)
2143{
2144 dprintf(("GDI32: SelectClipPath, not implemented!(TRUE)\n"));
2145 return(TRUE);
2146}
2147//******************************************************************************
2148//TODO: Sets the color adjustment values for a device context. (used to adjust
2149// the input color of the src bitmap for calls of StretchBlt & StretchDIBits
2150// functions when HALFTONE mode is set
2151//******************************************************************************
2152BOOL WIN32API SetColorAdjustment(HDC hdc, CONST COLORADJUSTMENT *lpca)
2153{
2154 dprintf(("GDI32: SetColorAdjustment, not implemented!(TRUE)\n"));
2155 return(TRUE);
2156}
2157//******************************************************************************
2158//WINE: OBJECTS\DIB.C
2159//******************************************************************************
2160HBITMAP WIN32API CreateDIBSection(HDC hdc, BITMAPINFO *pbmi, UINT iUsage,
2161 VOID **ppvBits, HANDLE hSection, DWORD dwOffset)
2162{
2163 HBITMAP res = 0;
2164 BOOL fFlip = 0;
2165
2166 dprintf(("GDI32: CreateDIBSection %x %x %x %d", hdc, iUsage, hSection, dwOffset));
2167 if(hSection) {
2168 dprintf(("GDI32: CreateDIBSection, hSection != NULL, not supported!\n"));
2169 return NULL;
2170 }
2171
2172 //SvL: 13-9-98: StarCraft uses bitmap with negative height
2173 if(pbmi->bmiHeader.biWidth < 0) {
2174 pbmi->bmiHeader.biWidth = -pbmi->bmiHeader.biWidth;
2175 fFlip = FLIP_HOR;
2176 }
2177 if(pbmi->bmiHeader.biHeight < 0) {
2178 pbmi->bmiHeader.biHeight = -pbmi->bmiHeader.biHeight;
2179 fFlip |= FLIP_VERT;
2180 }
2181
2182 res = O32_CreateDIBitmap(hdc, &pbmi->bmiHeader, 0, NULL, pbmi, 0);
2183 if (res)
2184 {
2185 DIBSection *dsect = new DIBSection((WINBITMAPINFOHEADER *)&pbmi->bmiHeader, (DWORD)res, fFlip);
2186 dprintf(("Constructor returned\n",res));
2187 if(ppvBits!=NULL)
2188 *ppvBits = dsect->GetDIBObject();
2189 dprintf(("GDI32: return %08X\n",res));
2190 return(res);
2191 }
2192
2193 /* Error. */
2194 if (res) DeleteObject(res);
2195 *ppvBits = NULL;
2196#ifdef DEBUG
2197 dprintf(("GDI32: CreateDIBSection, error!\n"));
2198 dprintf(("pbmi->biWidth %d", pbmi->bmiHeader.biWidth));
2199 dprintf(("pbmi->biHeight %d", pbmi->bmiHeader.biHeight));
2200 dprintf(("pbmi->biBitCount %d", pbmi->bmiHeader.biBitCount));
2201#endif
2202
2203 return 0;
2204}
2205//******************************************************************************
2206//******************************************************************************
2207UINT WIN32API GetDIBColorTable(HDC hdc, UINT uStartIndex, UINT cEntries,
2208 RGBQUAD *pColors)
2209{
2210 HPALETTE hpal = O32_GetCurrentObject(hdc, OBJ_PAL);
2211 UINT rc;
2212 int i;
2213
2214 rc = O32_GetPaletteEntries(hpal,
2215 uStartIndex,
2216 cEntries,
2217 (PALETTEENTRY *)pColors);
2218 for(i=0;
2219 i<cEntries;
2220 i++)
2221 {
2222 BYTE tmp;
2223 tmp = pColors[i].rgbBlue;
2224 pColors[i].rgbBlue = pColors[i].rgbRed;
2225 pColors[i].rgbRed = tmp;
2226 pColors[i].rgbReserved = 0;
2227 }
2228 dprintf(("GDI32: GetDIBColorTable returns %d\n", rc));
2229 return(rc);
2230}
2231//******************************************************************************
2232//******************************************************************************
2233UINT WIN32API SetDIBColorTable(HDC hdc, UINT uStartIndex, UINT cEntries,
2234 RGBQUAD *pColors)
2235{
2236 DIBSection *dsect = DIBSection::findHDC(hdc);
2237
2238 dprintf(("GDI32: SetDIBColorTable\n"));
2239 if(dsect) {
2240 return(dsect->SetDIBColorTable(uStartIndex, cEntries, pColors));
2241 }
2242 else return(0);
2243}
2244//******************************************************************************
2245//******************************************************************************
2246HPALETTE WIN32API CreateHalftonePalette(HDC hdc)
2247{
2248 dprintf(("GDI32: CreateHalftonePalette, not implemented\n"));
2249 return(NULL);
2250}
2251//******************************************************************************
2252//Maps colors to system palette; faster way to update window (instead of redrawing)
2253//We just redraw
2254//******************************************************************************
2255BOOL WIN32API UpdateColors(HDC hdc)
2256{
2257 dprintf(("GDI32: UpdateColors\n"));
2258 return O32_InvalidateRect(O32_WindowFromDC(hdc), NULL, FALSE);
2259}
2260//******************************************************************************
2261//******************************************************************************
2262BOOL WIN32API GdiFlush()
2263{
2264 dprintf(("GDI32: GdiFlush, not implemented (TRUE)\n"));
2265 return(TRUE);
2266}
2267//******************************************************************************
2268//******************************************************************************
2269BOOL WIN32API GdiComment(HDC hdc, UINT cbSize, CONST BYTE *lpData)
2270{
2271 dprintf(("GDI32: GdiComment, not implemented (TRUE)\n"));
2272 return(TRUE);
2273}
2274//******************************************************************************
2275//******************************************************************************
2276BOOL WIN32API GetCharWidthFloatA(HDC hdc, UINT iFirstChar, UINT iLastChar, PFLOAT pxBUffer)
2277{
2278 dprintf(("GDI32: GetCharWidthFloatA, not implemented\n"));
2279 return(FALSE);
2280}
2281//******************************************************************************
2282//******************************************************************************
2283BOOL WIN32API GetCharWidthFloatW(HDC hdc, UINT iFirstChar, UINT iLastChar, PFLOAT pxBUffer)
2284{
2285 dprintf(("GDI32: GetCharWidthFloatW, not implemented\n"));
2286 return(FALSE);
2287}
2288//******************************************************************************
2289//******************************************************************************
2290BOOL WIN32API GetCharABCWidthsFloatA(HDC hdc, UINT iFirstChar, UINT iLastChar, LPABCFLOAT pxBUffer)
2291{
2292 dprintf(("GDI32: GetCharABCWidthsFloatA, not implemented\n"));
2293 return(FALSE);
2294}
2295//******************************************************************************
2296//******************************************************************************
2297BOOL WIN32API GetCharABCWidthsFloatW(HDC hdc,
2298 UINT iFirstChar,
2299 UINT iLastChar,
2300 LPABCFLOAT pxBUffer)
2301{
2302 dprintf(("GDI32: GetCharABCWidthsFloatA, not implemented\n"));
2303 return(FALSE);
2304}
2305//******************************************************************************
2306//******************************************************************************
2307INT WIN32API ExtEscape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData,
2308 INT cbOutput, LPSTR lpszOutData)
2309{
2310 dprintf(("GDI32: ExtEscape, not implemented\n"));
2311 return(0);
2312}
2313//******************************************************************************
2314//******************************************************************************
2315int WIN32API DrawEscape(HDC hdc, int nEscape, int cbInput, LPCSTR lpszInData)
2316{
2317 dprintf(("GDI32: DrawEscape, not implemented\n"));
2318 return(0);
2319}
2320//******************************************************************************
2321//******************************************************************************
2322BOOL WIN32API GetColorAdjustment(HDC hdc, COLORADJUSTMENT *lpca)
2323{
2324 dprintf(("GDI32: GetColorAdjustment, not implemented\n"));
2325 return(FALSE);
2326}
2327//******************************************************************************
2328//******************************************************************************
2329BOOL WIN32API PlgBlt(HDC hdcDest, CONST POINT *lpPoint, HDC hdcSrc, int nXSrc,
2330 int nYSrc, int nWidth, int nHeight, HBITMAP hbmMask,
2331 int xMast, int yMask)
2332{
2333 dprintf(("GDI32: PlgBlt, not implemented\n"));
2334 return(FALSE);
2335}
2336//******************************************************************************
2337//******************************************************************************
2338DWORD WIN32API GetGlyphOutlineA(HDC hdc, UINT uChar, UINT uFormat, LPGLYPHMETRICS lpgm,
2339 DWORD cbBuffer, LPVOID lpvBuffer, CONST MAT2 *lpmat2)
2340{
2341 dprintf(("GDI32: GetGlyphOutLineA, not implemented (GDI_ERROR)\n"));
2342 return(GDI_ERROR);
2343}
2344//******************************************************************************
2345
2346//******************************************************************************
2347/*KSO Thu 21.05.1998*/
2348DWORD WIN32API GetGlyphOutlineW(HDC hdc, UINT uChar, UINT uFormat, LPGLYPHMETRICS lpgm,
2349 DWORD cbBuffer, LPVOID lpvBuffer, CONST MAT2 *lpmat2)
2350{
2351 dprintf(("GDI32: GetGlyphOutLineW, not implemented\n"));
2352 return(GDI_ERROR);
2353}
2354//******************************************************************************
2355
2356//******************************************************************************
2357int WIN32API DescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR)
2358{
2359 dprintf(("GDI32: DescribePixelFormat, not implemented (GDI_ERROR)\n"));
2360 return(GDI_ERROR);
2361}
2362//******************************************************************************
2363//******************************************************************************
2364BOOL WIN32API SetObjectOwner( HGDIOBJ arg1, int arg2 )
2365{
2366 // Here is a guess for a undocumented entry
2367 dprintf(("GDI32: SetObjectOwner - stub (TRUE)\n"));
2368 return TRUE;
2369}
2370//******************************************************************************
2371
2372
2373/* Office 97 stubs - KSO Thu 21.05.1998*/
2374//******************************************************************************
2375BOOL WIN32API GetTextExtentExPointA(/*KSO Thu 21.05.1998*/
2376 HDC hdc,
2377 LPCSTR str,
2378 int count,
2379 int maxExt,
2380 LPINT lpnFit,
2381 LPINT alpDx,
2382 LPSIZE size)
2383{
2384 int index, nFit, extent;
2385 SIZE tSize;
2386
2387 dprintf(("GDI32: GetTextExtendExPointA\n"));
2388
2389 size->cx = size->cy = nFit = extent = 0;
2390 for(index = 0; index < count; index++)
2391 {
2392 if(!O32_GetTextExtentPoint( hdc, str, 1, &tSize )) return FALSE;
2393 if( extent+tSize.cx < maxExt )
2394 {
2395 extent+=tSize.cx;
2396 nFit++;
2397 str++;
2398 if( alpDx )
2399 alpDx[index] = extent;
2400 if( tSize.cy > size->cy ) size->cy = tSize.cy;
2401 }
2402 else break;
2403 }
2404 size->cx = extent;
2405
2406 if (lpnFit != NULL) // check if result is desired
2407 *lpnFit = nFit;
2408
2409 dprintf(("GDI32: GetTextExtendExPointA(%08x '%.*s' %d) returning %d %d %d\n",
2410 hdc,count,str,maxExt,nFit, size->cx,size->cy));
2411 return TRUE;
2412}
2413//******************************************************************************
2414//******************************************************************************
2415BOOL WIN32API GetTextExtentExPointW( /*KSO Thu 21.05.1998*/
2416 HDC arg1,
2417 LPCWSTR arg2,
2418 int arg3,
2419 int arg4,
2420 LPINT arg5,
2421 LPINT arg6,
2422 LPSIZE arg7
2423 )
2424{
2425 char *astring = UnicodeToAsciiString((LPWSTR)arg2);
2426 BOOL rc;
2427
2428 dprintf(("GDI32: GetTextExtendExPointW\n"));
2429 rc = GetTextExtentExPointA(arg1, astring, arg3, arg4, arg5, arg6, arg7);
2430 FreeAsciiString(astring);
2431 return rc;
2432}
2433//******************************************************************************
2434//******************************************************************************
2435BOOL WIN32API PlayEnhMetaFileRecord( /*KSO Thu 21.05.1998*/
2436 HDC arg1,
2437 LPHANDLETABLE arg2,
2438 CONST ENHMETARECORD *arg3,
2439 UINT arg4
2440 )
2441{
2442 dprintf(("GDI32: PlayEnhMetaFileRecord - stub\n"));
2443 return FALSE;
2444}
2445//******************************************************************************
2446UINT WIN32API GetEnhMetaFileDescriptionA( /*KSO Thu 21.05.1998*/
2447 HENHMETAFILE arg1,
2448 UINT arg2,
2449 LPSTR arg3
2450 )
2451{
2452 dprintf(("GDI32: GetEnhMetaFileDescriptionA - stub\n"));
2453 return FALSE;
2454}
2455//******************************************************************************
2456//******************************************************************************
2457UINT WIN32API GetEnhMetaFileDescriptionW( /*KSO Thu 21.05.1998*/
2458 HENHMETAFILE arg1,
2459 UINT arg2,
2460 LPWSTR arg3
2461 )
2462{
2463 dprintf(("GDI32: GetEnhMetaFileDescriptionW - stub\n"));
2464 return FALSE;
2465}
2466//******************************************************************************
2467//******************************************************************************
2468UINT WIN32API DeleteColorSpace( /*KSO Thu 21.05.1998*/
2469 HCOLORSPACE hColorSpace
2470 )
2471{
2472 dprintf(("GDI32: DeleteColorSpace - stub\n"));
2473 return FALSE;
2474}
2475//******************************************************************************
2476//******************************************************************************
2477BOOL WIN32API SetColorSpace( /*KSO Thu 21.05.1998*/
2478 HDC hdc,
2479 HCOLORSPACE hColorSpace
2480 )
2481{
2482 dprintf(("GDI32: SetColorSpace - stub\n"));
2483 return FALSE;
2484}
2485//******************************************************************************
2486//******************************************************************************
2487 HCOLORSPACE WIN32API CreateColorSpaceA( /*KSO Thu 21.05.1998*/
2488 LPLOGCOLORSPACEA lpLogColorSpace
2489 )
2490{
2491 dprintf(("GDI32: CreateColorSpaceA - stub\n"));
2492 return 0;
2493}
2494//******************************************************************************
2495//******************************************************************************
2496HCOLORSPACE WIN32API CreateColorSpaceW( /*KSO Thu 21.05.1998*/
2497 LPLOGCOLORSPACEW lpwLogColorSpace
2498 )
2499{
2500 dprintf(("GDI32: CreateColorSpaceW - stub\n"));
2501 return 0;
2502}
2503//******************************************************************************
2504//******************************************************************************
2505HANDLE WIN32API GetColorSpace( /*KSO Thu 21.05.1998*/
2506 HDC hdc
2507 )
2508{
2509 dprintf(("GDI32: GetColorSpace - stub\n"));
2510 return 0;
2511}
2512//******************************************************************************
2513//******************************************************************************
2514int WIN32API SetICMMode( /*KSO Thu 21.05.1998*/
2515 HDC hdc,
2516 int mode
2517 )
2518{
2519 dprintf(("GDI32: SetICMMode - stub\n"));
2520 return 0;
2521}
2522//******************************************************************************
2523
2524
2525
2526
2527/*****************************************************************************
2528 * Name : BOOL CancelDC
2529 * Purpose : The CancelDC function cancels any pending operation on the
2530 * specified device context (DC).
2531 * Parameters: HDC hdc handle of device context
2532 * Variables :
2533 * Result : TRUE / FALSE
2534 * Remark :
2535 * Status : UNTESTED STUB
2536 *
2537 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2538 *****************************************************************************/
2539
2540BOOL WIN32API CancelDC(HDC hdc)
2541{
2542 dprintf(("GDI32: CancelDC(%08xh) not implemented.\n",
2543 hdc));
2544
2545 return (FALSE);
2546}
2547
2548
2549/*****************************************************************************
2550 * Name : BOOL CheckColorsInGamut
2551 * Purpose : The CheckColorsInGamut function indicates whether the specified
2552 * color values are within the gamut of the specified device.
2553 * Parameters: HDC hdc handle of device context
2554 * LPVOID lpaRGBQuad
2555 * LPVOID lpResult
2556 * DWORD dwResult
2557 * Variables :
2558 * Result : TRUE / FALSE
2559 * Remark :
2560 * Status : UNTESTED STUB
2561 *
2562 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2563 *****************************************************************************/
2564
2565BOOL WIN32API CheckColorsInGamut(HDC hdc,
2566 LPVOID lpaRGBQuad,
2567 LPVOID lpResult,
2568 DWORD dwResult)
2569{
2570 dprintf(("GDI32: CheckColorsInGamut(%08xh,%08xh,%08xh,%08xh) not implemented.\n",
2571 hdc,
2572 lpaRGBQuad,
2573 lpResult,
2574 dwResult));
2575
2576 return (FALSE);
2577}
2578
2579
2580/*****************************************************************************
2581 * Name : BOOL ColorMatchToTarget
2582 * Purpose : The ColorMatchToTarget function enables or disables preview for
2583 * the specified device context. When preview is enabled, colors
2584 * in subsequent output to the specified device context are
2585 * displayed as they would appear on the target device. This is
2586 * useful for checking how well the target maps the specified
2587 * colors in an image. To enable preview, image color matching
2588 * must be enabled for both the target and the preview device context.
2589 * Parameters: HDC hdc handle of device context
2590 * HDC hdcTarget handle of target device context
2591 * DWORD uiAction
2592 * Variables :
2593 * Result : TRUE / FALSE
2594 * Remark :
2595 * Status : UNTESTED STUB
2596 *
2597 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2598 *****************************************************************************/
2599
2600BOOL WIN32API ColorMatchToTarget(HDC hdc,
2601 HDC hdcTarget,
2602 DWORD uiAction)
2603{
2604 dprintf(("GDI32: ColorMatchToTarget(%08xh,%08xh,%08xh) not implemented.\n",
2605 hdc,
2606 hdcTarget,
2607 uiAction));
2608
2609 return (FALSE);
2610}
2611
2612
2613/*****************************************************************************
2614 * Name : BOOL CombineTransform
2615 * Purpose : The CombineTransform function concatenates two world-space to
2616 * page-space transformations.
2617 * Parameters: LLPXFORM lLPXFORMResult address of combined transformation
2618 * XFORM *lLPXFORM1 address of 1st transformation
2619 * XFORM *lLPXFORM2 address of 2nd transformation
2620 * Variables :
2621 * Result : TRUE / FALSE
2622 * Remark :
2623 * Status : UNTESTED STUB
2624 *
2625 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2626 *****************************************************************************/
2627
2628BOOL WIN32API CombineTransform(LPXFORM lLPXFORMResult,
2629 CONST XFORM *lLPXFORM1,
2630 CONST XFORM *lLPXFORM2)
2631{
2632 dprintf(("GDI32: CombineTransform(%08xh,%08xh,%08xh) not implemented.\n",
2633 lLPXFORMResult,
2634 lLPXFORM1,
2635 lLPXFORM2));
2636
2637 return (FALSE);
2638}
2639
2640
2641
2642/*****************************************************************************
2643 * Name : HBRUSH CreateDIBPatternBrush
2644 * Purpose : The CreateDIBPatternBrush function creates a logical brush that
2645 * has the pattern specified by the specified device-independent
2646 * bitmap (DIB). The brush can subsequently be selected into any
2647 * device context that is associated with a device that supports
2648 * raster operations.
2649 * This function is provided only for compatibility with applications
2650 * written for versions of Windows earlier than 3.0. For Win32-based
2651 * applications, use the CreateDIBPatternBrushPt function.
2652 * Parameters: HGLOBAL hglbDIBPacked handle of device-independent bitmap
2653 * UINT fuColorSpec color table data
2654 * Variables :
2655 * Result : TRUE / FALSE
2656 * Remark :
2657 * Status : UNTESTED STUB
2658 *
2659 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2660 *****************************************************************************/
2661
2662HBRUSH WIN32API CreateDIBPatternBrush(HGLOBAL hglbDIBPacked,
2663 UINT fuColorSpec)
2664{
2665 dprintf(("GDI32: CreateDIBPatternBrush(%08xh, %08xh) not implemented.\n",
2666 hglbDIBPacked,
2667 fuColorSpec));
2668
2669 return (0);
2670}
2671
2672
2673
2674
2675/*****************************************************************************
2676 * Name : int EnumICMProfilesA
2677 * Purpose : The EnumICMProfilesA function enumerates the different color
2678 * profiles that the system supports for the specified device context.
2679 * Parameters: HDC hdc
2680 * ICMENUMPROC lpICMEnumFunc
2681 * LPARAM lParam
2682 * Variables :
2683 * Result : TRUE / FALSE
2684 * Remark :
2685 * Status : UNTESTED STUB
2686 *
2687 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2688 *****************************************************************************/
2689
2690int WIN32API EnumICMProfilesA(HDC hdc,
2691 ICMENUMPROCA lpICMEnumProc,
2692 LPARAM lParam)
2693{
2694 dprintf(("GDI32: EnumICMProfilesA(%08xh, %08xh, %08xh) not implemented(-1).\n",
2695 hdc,
2696 lpICMEnumProc,
2697 lParam));
2698
2699 return (-1);
2700}
2701
2702
2703/*****************************************************************************
2704 * Name : int EnumICMProfilesW
2705 * Purpose : The EnumICMProfilesW function enumerates the different color
2706 * profiles that the system supports for the specified device context.
2707 * Parameters: HDC hdc
2708 * ICMENUMPROC lpICMEnumFunc
2709 * LPARAM lParam
2710 * Variables :
2711 * Result : TRUE / FALSE
2712 * Remark :
2713 * Status : UNTESTED STUB
2714 *
2715 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2716 *****************************************************************************/
2717
2718int WIN32API EnumICMProfilesW(HDC hdc,
2719 ICMENUMPROCW lpICMEnumProc,
2720 LPARAM lParam)
2721{
2722 dprintf(("GDI32: EnumICMProfilesW(%08xh, %08xh, %08xh) not implemented (-1).\n",
2723 hdc,
2724 lpICMEnumProc,
2725 lParam));
2726
2727 return (-1);
2728}
2729
2730
2731/*****************************************************************************
2732 * Name : BOOL FixBrushOrgEx
2733 * Purpose : The FixBrushOrgEx function is not implemented in the Win32 API.
2734 * It is provided for compatibility with Win32s. If called, the
2735 * function does nothing, and returns FALSE.
2736 * Parameters: HDC, int, int, LPPOINT
2737 * Variables :
2738 * Result : TRUE / FALSE
2739 * Remark : not implemented in Win32
2740 * Status : UNTESTED STUB
2741 *
2742 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2743 *****************************************************************************/
2744
2745BOOL WIN32API FixBrushOrgEx(HDC hdc,
2746 int iDummy1,
2747 int iDummy2,
2748 LPPOINT lpPoint)
2749{
2750 dprintf(("GDI32: FixBrushOrgEx(%08xh,%08xh,%08xh,%08xh) not implemented.\n",
2751 hdc,
2752 iDummy1,
2753 iDummy2,
2754 lpPoint));
2755
2756 return (FALSE);
2757}
2758
2759
2760/*****************************************************************************
2761 * Name : DWORD GdiGetBatchLimit
2762 * Purpose : The GdiGetBatchLimit function returns the maximum number of
2763 * function calls that can be accumulated in the calling thread's
2764 * current batch. The system flushes the current batch whenever
2765 * this limit is exceeded.
2766 * Parameters:
2767 * Variables :
2768 * Result : 1
2769 * Remark :
2770 * Status : UNTESTED STUB
2771 *
2772 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2773 *****************************************************************************/
2774
2775DWORD WIN32API GdiGetBatchLimit(VOID)
2776{
2777 dprintf(("GDI32: GdiGetBatchLimit() not implemented (1).\n"));
2778
2779 return (1);
2780}
2781
2782
2783/*****************************************************************************
2784 * Name : DWORD GdiSetBatchLimit
2785 * Purpose : The GdiSetBatchLimit function sets the maximum number of
2786 * functions that can be accumulated in the calling thread's current
2787 * batch. The system flushes the current batch whenever this limit
2788 * is exceeded.
2789 * Parameters: DWORD dwLimit
2790 * Variables :
2791 * Result :
2792 * Remark :
2793 * Status : UNTESTED STUB
2794 *
2795 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2796 *****************************************************************************/
2797
2798DWORD WIN32API GdiSetBatchLimit(DWORD dwLimit)
2799{
2800 dprintf(("GDI32: GdiSetBatchLimit(%08xh) not implemented (1).\n",
2801 dwLimit));
2802
2803 return (1);
2804}
2805
2806
2807/*****************************************************************************
2808 * Name : DWORD GetCharacterPlacementA
2809 * Purpose : The GetCharacterPlacementA function retrieves information about
2810 * a character string, such as character widths, caret positioning,
2811 * ordering within the string, and glyph rendering. The type of
2812 * information returned depends on the dwFlags parameter and is
2813 * based on the currently selected font in the given display context.
2814 * The function copies the information to the specified GCP_RESULTSA
2815 * structure or to one or more arrays specified by the structure.
2816 * Parameters: HDC hdc handle to device context
2817 * LPCSTR lpString pointer to string
2818 * int nCount number of characters in string
2819 * int nMaxExtent maximum extent for displayed string
2820 * LPGCP_RESULTSA *lpResults pointer to buffer for placement result
2821 * DWORD dwFlags placement flags
2822 * Variables :
2823 * Result :
2824 * Remark :
2825 * Status : UNTESTED STUB
2826 *
2827 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2828 *****************************************************************************/
2829
2830DWORD WIN32API GetCharacterPlacementA(HDC hdc,
2831 LPCSTR lpString,
2832 int nCount,
2833 int nMaxExtent,
2834 GCP_RESULTSA * lpResults,
2835 DWORD dwFlags)
2836{
2837 dprintf(("GDI32: GetCharacterPlacementA(%08xh,%s,%08xh,%08xh,%08xh,%08xh) not implemented.\n",
2838 hdc,
2839 lpString,
2840 nCount,
2841 nMaxExtent,
2842 lpResults,
2843 dwFlags));
2844
2845 return (0);
2846}
2847
2848
2849/*****************************************************************************
2850 * Name : DWORD GetCharacterPlacementW
2851 * Purpose : The GetCharacterPlacementW function retrieves information about
2852 * a character string, such as character widths, caret positioning,
2853 * ordering within the string, and glyph rendering. The type of
2854 * information returned depends on the dwFlags parameter and is
2855 * based on the currently selected font in the given display context.
2856 * The function copies the information to the specified GCP_RESULTSW
2857 * structure or to one or more arrays specified by the structure.
2858 * Parameters: HDC hdc handle to device context
2859 * LPCSTR lpString pointer to string
2860 * int nCount number of characters in string
2861 * int nMaxExtent maximum extent for displayed string
2862 * GCP_RESULTSW *lpResults pointer to buffer for placement result
2863 * DWORD dwFlags placement flags
2864 * Variables :
2865 * Result :
2866 * Remark :
2867 * Status : UNTESTED STUB
2868 *
2869 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2870 *****************************************************************************/
2871
2872DWORD WIN32API GetCharacterPlacementW(HDC hdc,
2873 LPCWSTR lpString,
2874 int nCount,
2875 int nMaxExtent,
2876 GCP_RESULTSW *lpResults,
2877 DWORD dwFlags)
2878{
2879 dprintf(("GDI32: GetCharacterPlacementW(%08xh,%s,%08xh,%08xh,%08xh,%08xh) not implemented.\n",
2880 hdc,
2881 lpString,
2882 nCount,
2883 nMaxExtent,
2884 lpResults,
2885 dwFlags));
2886
2887 return (0);
2888}
2889
2890
2891/*****************************************************************************
2892 * Name : DWORD GetDeviceGammaRamp
2893 * Purpose : The GetDeviceGammaRamp function retrieves the gamma ramp on
2894 * direct color display boards.
2895 * Parameters: HDC hdc handle to device context
2896 * LPVOID lpRamp Gamma ramp array
2897 * Variables :
2898 * Result :
2899 * Remark :
2900 * Status : UNTESTED STUB
2901 *
2902 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2903 *****************************************************************************/
2904
2905DWORD WIN32API GetDeviceGammaRamp(HDC hdc,
2906 LPVOID lpRamp)
2907{
2908 dprintf(("GDI32: GetDeviceGammaRamp(%08xh, %08xh) not implemented.\n",
2909 hdc,
2910 lpRamp));
2911
2912 return (FALSE);
2913}
2914
2915
2916
2917
2918/*****************************************************************************
2919 * Name : BOOL GetICMProfileA
2920 * Purpose : The GetICMProfileA function retrieves the name of the color
2921 * profile file for the device associated with the specified device
2922 * context.
2923 * Parameters: HDC hdc handle to device context
2924 * DWORD cbName
2925 * LPTSTR lpszFilename
2926 * Variables :
2927 * Result : TRUE / FALSE
2928 * Remark :
2929 * Status : UNTESTED STUB
2930 *
2931 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2932 *****************************************************************************/
2933
2934BOOL WIN32API GetICMProfileA(HDC hdc,
2935 DWORD cbName,
2936 LPTSTR lpszFilename)
2937{
2938 dprintf(("GDI32: GetICMProfileA(%08xh, %08xh, %08xh) not implemented.\n",
2939 hdc,
2940 cbName,
2941 lpszFilename));
2942
2943 return (FALSE);
2944}
2945
2946
2947/*****************************************************************************
2948 * Name : BOOL GetICMProfileW
2949 * Purpose : The GetICMProfileW function retrieves the name of the color
2950 * profile file for the device associated with the specified device
2951 * context.
2952 * Parameters: HDC hdc handle to device context
2953 * DWORD cbName
2954 * LPWSTR lpszFilename
2955 * Variables :
2956 * Result : TRUE / FALSE
2957 * Remark :
2958 * Status : UNTESTED STUB
2959 *
2960 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2961 *****************************************************************************/
2962
2963BOOL WIN32API GetICMProfileW(HDC hdc,
2964 DWORD cbName,
2965 LPTSTR lpszFilename)
2966{
2967 dprintf(("GDI32: GetICMProfileW(%08xh, %08xh, %08xh) not implemented.\n",
2968 hdc,
2969 cbName,
2970 lpszFilename));
2971
2972 return (FALSE);
2973}
2974
2975
2976/*****************************************************************************
2977 * Name : BOOL GetLogColorSpaceA
2978 * Purpose : The GetLogColorSpace function retrieves information about the
2979 * logical color space identified by the specified handle.
2980 * Parameters: HCOLORSPACE hColorSpace
2981 * LPLOGCOLORSPACE lpbuffer
2982 * DWORD nSize
2983 * Variables :
2984 * Result : TRUE / FALSE
2985 * Remark :
2986 * Status : UNTESTED STUB
2987 *
2988 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
2989 *****************************************************************************/
2990
2991#define LPLOGCOLORSPACE LPVOID
2992BOOL WIN32API GetLogColorSpaceA(HCOLORSPACE hColorSpace,
2993 LPLOGCOLORSPACE lpBuffer,
2994 DWORD nSize)
2995{
2996 dprintf(("GDI32: GetLogColorSpaceA(%08xh, %08xh, %08xh) not implemented.\n",
2997 hColorSpace,
2998 lpBuffer,
2999 nSize));
3000
3001 return (FALSE);
3002}
3003
3004
3005/*****************************************************************************
3006 * Name : BOOL GetLogColorSpaceW
3007 * Purpose : The GetLogColorSpace function retrieves information about the
3008 * logical color space identified by the specified handle.
3009 * Parameters: HCOLORSPACE hColorSpace
3010 * LPLOGCOLORSPACE lpbuffer
3011 * DWORD nSize
3012 * Variables :
3013 * Result : TRUE / FALSE
3014 * Remark :
3015 * Status : UNTESTED STUB
3016 *
3017 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3018 *****************************************************************************/
3019
3020BOOL WIN32API GetLogColorSpaceW(HCOLORSPACE hColorSpace,
3021 LPLOGCOLORSPACE lpBuffer,
3022 DWORD nSize)
3023{
3024 dprintf(("GDI32: GetLogColorSpaceW(%08xh, %08xh, %08xh) not implemented.\n",
3025 hColorSpace,
3026 lpBuffer,
3027 nSize));
3028
3029 return (FALSE);
3030}
3031
3032
3033/*****************************************************************************
3034 * Name : int GetMetaRgn
3035 * Purpose : The GetMetaRgn function retrieves the current metaregion for
3036 * the specified device context.
3037 * Parameters: HDC hdc handle of device context
3038 * HRGN hrgn handle of region
3039 * Variables :
3040 * Result : 0 / 1
3041 * Remark :
3042 * Status : UNTESTED STUB
3043 *
3044 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3045 *****************************************************************************/
3046
3047int WIN32API GetMetaRgn(HDC hdc,
3048 HRGN hrgn)
3049{
3050 dprintf(("GDI32: GetMetaRgn(%08xh, %08xh) not implemented.\n",
3051 hdc,
3052 hrgn));
3053
3054 return (0);
3055}
3056
3057
3058/*****************************************************************************
3059 * Name : int GetPixelFormat
3060 * Purpose : The GetPixelFormat function obtains the index of the specified
3061 * device context's currently selected pixel format.
3062 * Parameters: HDC hdc handle of device context
3063 * Variables :
3064 * Result : 0 / 1
3065 * Remark :
3066 * Status : UNTESTED STUB
3067 *
3068 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3069 *****************************************************************************/
3070
3071int WIN32API GetPixelFormat(HDC hdc)
3072{
3073 dprintf(("GDI32: GetPixelFormat(%08xh) not implemented.\n",
3074 hdc));
3075
3076 return (0);
3077}
3078
3079
3080/*****************************************************************************
3081 * Name : BOOL PolyTextOutA
3082 * Purpose : The PolyTextOutA function draws several strings using the font
3083 * and text colors currently selected in the specified device context.
3084 * Parameters: HDC hdc handle of device context
3085 * CONST POLYTEXT *pptxt address of array of structures that identify strings
3086 * int cStrings number of structures in array
3087 * Variables :
3088 * Result : TRUE / FALSE
3089 * Remark :
3090 * Status : UNTESTED STUB
3091 *
3092 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3093 *****************************************************************************/
3094
3095BOOL WIN32API PolyTextOutA(HDC hdc,
3096 POLYTEXTA *pptxt,
3097 int cStrings)
3098{
3099 dprintf(("GDI32: PolyTextOutA(%08xh, %08xh, %08xh) not implemented.\n",
3100 hdc,
3101 pptxt,
3102 cStrings));
3103
3104 return (FALSE);
3105}
3106
3107
3108#if 0
3109
3110The POLYTEXT structure describes how the PolyTextOut function should draw a string of text.
3111
3112Members
3113
3114x
3115
3116Specifies the horizontal reference point for the string. The string is aligned to this point using the current text-alignment mode.
3117
3118y
3119
3120Specifies the vertical reference point for the string. The string is aligned to this point using the current text-alignment mode.
3121
3122n
3123
3124Specifies the number of characters in the string.
3125
3126uiFlags
3127
3128Specifies whether the string is to be opaque or clipped and whether the string is accompanied by an array of character-width values. This member can be one or more of the following values:
3129
3130Value Meaning
3131ETO_OPAQUE The rectangles given for each string is to be opaqued with the current background color.
3132ETO_CLIPPED Each string is to be clipped to its given rectangle.
3133lpstr
3134
3135Points to a string of text to be drawn by the PolyTextOut function.
3136
3137rcl
3138
3139Specifies a rectangle structure that contains the dimensions of the opaquing or clipping rectangle. This member is ignored if neither of the ETO_OPAQUE nor the ETO_CLIPPED value is specified for the uiFlags member.
3140
3141pdx
3142
3143Specifies in an array the width value for each character in the string.
3144
3145See Also
3146
3147PolyTextOut
3148#endif
3149
3150
3151/*****************************************************************************
3152 * Name : BOOL PolyTextOutW
3153 * Purpose : The PolyTextOutW function draws several strings using the font
3154 * and text colors currently selected in the specified device context.
3155 * Parameters: HDC hdc handle of device context
3156 * CONST POLYTEXT *pptxt address of array of structures that identify strings
3157 * int cStrings number of structures in array
3158 * Variables :
3159 * Result : TRUE / FALSE
3160 * Remark :
3161 * Status : UNTESTED STUB
3162 *
3163 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3164 *****************************************************************************/
3165
3166BOOL WIN32API PolyTextOutW(HDC hdc,
3167 POLYTEXTW *pptxt,
3168 int cStrings)
3169{
3170 dprintf(("GDI32: PolyTextOutW(%08xh, %08xh, %08xh) not implemented.\n",
3171 hdc,
3172 pptxt,
3173 cStrings));
3174
3175 return (FALSE);
3176}
3177
3178
3179/*****************************************************************************
3180 * Name : BOOL SetDeviceGammaRamp
3181 * Purpose : The SetDeviceGammaRamp function sets the gamma ramp on direct
3182 * color display boards.
3183 * Parameters: HDC hdc handle of device context
3184 * LPVOID lpRamp
3185 * Variables :
3186 * Result : TRUE / FALSE
3187 * Remark :
3188 * Status : UNTESTED STUB
3189 *
3190 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3191 *****************************************************************************/
3192
3193BOOL WIN32API SetDeviceGammaRamp(HDC hdc,
3194 LPVOID lpRamp)
3195{
3196 dprintf(("GDI32: SetDeviceGammaRamp(%08xh, %08xh) not implemented.\n",
3197 hdc,
3198 lpRamp));
3199
3200 return (FALSE);
3201}
3202
3203
3204/*****************************************************************************
3205 * Name : BOOL SetICMProfileA
3206 * Purpose : The SetICMProfileA function sets the color profile for the
3207 * specified device context.
3208 * Parameters: HDC hdc handle of device context
3209 * LPTSTR lpFileName
3210 * Variables :
3211 * Result : TRUE / FALSE
3212 * Remark :
3213 * Status : UNTESTED STUB
3214 *
3215 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3216 *****************************************************************************/
3217
3218BOOL WIN32API SetICMProfileA(HDC hdc,
3219 LPTSTR lpFileName)
3220{
3221 dprintf(("GDI32: SetICMProfileA(%08xh, %s) not implemented.\n",
3222 hdc,
3223 lpFileName));
3224
3225 return (FALSE);
3226}
3227
3228
3229/*****************************************************************************
3230 * Name : BOOL SetICMProfileW
3231 * Purpose : The SetICMProfileW function sets the color profile for the
3232 * specified device context.
3233 * Parameters: HDC hdc handle of device context
3234 * LPTSTR lpFileName
3235 * Variables :
3236 * Result : TRUE / FALSE
3237 * Remark :
3238 * Status : UNTESTED STUB
3239 *
3240 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3241 *****************************************************************************/
3242
3243BOOL WIN32API SetICMProfileW(HDC hdc,
3244 LPWSTR lpFileName)
3245{
3246 dprintf(("GDI32: SetICMProfileW(%08xh, %s) not implemented.\n",
3247 hdc,
3248 lpFileName));
3249
3250 return (FALSE);
3251}
3252
3253
3254/*****************************************************************************
3255 * Name : int SetMetaRgn
3256 * Purpose : The SetMetaRgn function intersects the current clipping region
3257 * for the specified device context with the current metaregion
3258 * and saves the combined region as the new metaregion for the
3259 * specified device context. The clipping region is reset to a null region.
3260 * Parameters: HDC hdc handle of device context
3261 * Variables :
3262 * Result : TRUE / FALSE
3263 * Remark :
3264 * Status : UNTESTED STUB
3265 *
3266 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3267 *****************************************************************************/
3268
3269BOOL WIN32API SetMetaRgn(HDC hdc)
3270{
3271 dprintf(("GDI32: SetMetaRgn(%08xh) not implemented.\n",
3272 hdc));
3273
3274 return (NULLREGION);
3275}
3276
3277
3278/*****************************************************************************
3279 * Name : BOOL UpdateICMRegKeyA
3280 * Purpose : The UpdateICMRegKeyA function installs, removes, or queries
3281 * registry entries that identify ICC color profiles or color-matching
3282 * DLLs. The function carries out the action specified by the nCommand
3283 * parameter.
3284 * Parameters: DWORD dwReserved
3285 * DWORD CMID
3286 * LPTSTR lpszFileName
3287 * UINT nCommand
3288 * Variables :
3289 * Result : TRUE / FALSE
3290 * Remark :
3291 * Status : UNTESTED STUB
3292 *
3293 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3294 *****************************************************************************/
3295
3296BOOL WIN32API UpdateICMRegKeyA(DWORD dwReserved,
3297 DWORD CMID,
3298 LPTSTR lpszFileName,
3299 UINT nCommand)
3300{
3301 dprintf(("GDI32: UpdateICMRegKeyA(%08xh, %08xh, %08xh, %08xh) not implemented.\n",
3302 dwReserved,
3303 CMID,
3304 lpszFileName,
3305 nCommand));
3306
3307 return (FALSE);
3308}
3309
3310
3311/*****************************************************************************
3312 * Name : BOOL UpdateICMRegKeyW
3313 * Purpose : The UpdateICMRegKeyW function installs, removes, or queries
3314 * registry entries that identify ICC color profiles or color-matching
3315 * DLLs. The function carries out the action specified by the nCommand
3316 * parameter.
3317 * Parameters: DWORD dwReserved
3318 * DWORD CMID
3319 * LPWSTR lpszFileName
3320 * UINT nCommand
3321 * Variables :
3322 * Result : TRUE / FALSE
3323 * Remark :
3324 * Status : UNTESTED STUB
3325 *
3326 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
3327 *****************************************************************************/
3328
3329BOOL WIN32API UpdateICMRegKeyW(DWORD dwReserved,
3330 DWORD CMID,
3331 LPWSTR lpszFileName,
3332 UINT nCommand)
3333{
3334 dprintf(("GDI32: UpdateICMRegKeyW(%08xh, %08xh, %08xh, %08xh) not implemented.\n",
3335 dwReserved,
3336 CMID,
3337 lpszFileName,
3338 nCommand));
3339
3340 return (FALSE);
3341}
3342
3343
3344
Note: See TracBrowser for help on using the repository browser.