4 * Copyright 2002 Alexandre Julliard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 #include "wine/wingdi16.h"
26 #include "wine/debug.h"
28 WINE_DEFAULT_DEBUG_CHANNEL(gdi
);
30 #define HGDIOBJ_32(handle16) ((HGDIOBJ)(ULONG_PTR)(handle16))
31 #define HGDIOBJ_16(handle32) ((HGDIOBJ16)(ULONG_PTR)(handle32))
33 struct callback16_info
39 /* callback for LineDDA16 */
40 static void CALLBACK
linedda_callback( INT x
, INT y
, LPARAM param
)
42 const struct callback16_info
*info
= (struct callback16_info
*)param
;
47 args
[1] = HIWORD(info
->param
);
48 args
[0] = LOWORD(info
->param
);
49 WOWCallback16Ex( (DWORD
)info
->proc
, WCB16_PASCAL
, sizeof(args
), args
, NULL
);
52 /* callback for EnumObjects16 */
53 static INT CALLBACK
enum_pens_callback( void *ptr
, LPARAM param
)
55 const struct callback16_info
*info
= (struct callback16_info
*)param
;
62 pen16
.lopnStyle
= pen
->lopnStyle
;
63 pen16
.lopnWidth
.x
= pen
->lopnWidth
.x
;
64 pen16
.lopnWidth
.y
= pen
->lopnWidth
.y
;
65 pen16
.lopnColor
= pen
->lopnColor
;
66 segptr
= MapLS( &pen16
);
67 args
[3] = SELECTOROF(segptr
);
68 args
[2] = OFFSETOF(segptr
);
69 args
[1] = HIWORD(info
->param
);
70 args
[0] = LOWORD(info
->param
);
71 WOWCallback16Ex( (DWORD
)info
->proc
, WCB16_PASCAL
, sizeof(args
), args
, &ret
);
76 /* callback for EnumObjects16 */
77 static INT CALLBACK
enum_brushes_callback( void *ptr
, LPARAM param
)
79 const struct callback16_info
*info
= (struct callback16_info
*)param
;
80 LOGBRUSH
*brush
= ptr
;
86 brush16
.lbStyle
= brush
->lbStyle
;
87 brush16
.lbColor
= brush
->lbColor
;
88 brush16
.lbHatch
= brush
->lbHatch
;
89 segptr
= MapLS( &brush16
);
90 args
[3] = SELECTOROF(segptr
);
91 args
[2] = OFFSETOF(segptr
);
92 args
[1] = HIWORD(info
->param
);
93 args
[0] = LOWORD(info
->param
);
94 WOWCallback16Ex( (DWORD
)info
->proc
, WCB16_PASCAL
, sizeof(args
), args
, &ret
);
99 /* convert a LOGFONT16 to a LOGFONTW */
100 static void logfont_16_to_W( const LOGFONT16
*font16
, LPLOGFONTW font32
)
102 font32
->lfHeight
= font16
->lfHeight
;
103 font32
->lfWidth
= font16
->lfWidth
;
104 font32
->lfEscapement
= font16
->lfEscapement
;
105 font32
->lfOrientation
= font16
->lfOrientation
;
106 font32
->lfWeight
= font16
->lfWeight
;
107 font32
->lfItalic
= font16
->lfItalic
;
108 font32
->lfUnderline
= font16
->lfUnderline
;
109 font32
->lfStrikeOut
= font16
->lfStrikeOut
;
110 font32
->lfCharSet
= font16
->lfCharSet
;
111 font32
->lfOutPrecision
= font16
->lfOutPrecision
;
112 font32
->lfClipPrecision
= font16
->lfClipPrecision
;
113 font32
->lfQuality
= font16
->lfQuality
;
114 font32
->lfPitchAndFamily
= font16
->lfPitchAndFamily
;
115 MultiByteToWideChar( CP_ACP
, 0, font16
->lfFaceName
, -1, font32
->lfFaceName
, LF_FACESIZE
);
116 font32
->lfFaceName
[LF_FACESIZE
-1] = 0;
120 /***********************************************************************
123 COLORREF WINAPI
SetBkColor16( HDC16 hdc
, COLORREF color
)
125 return SetBkColor( HDC_32(hdc
), color
);
129 /***********************************************************************
132 INT16 WINAPI
SetBkMode16( HDC16 hdc
, INT16 mode
)
134 return SetBkMode( HDC_32(hdc
), mode
);
138 /***********************************************************************
141 INT16 WINAPI
SetMapMode16( HDC16 hdc
, INT16 mode
)
143 return SetMapMode( HDC_32(hdc
), mode
);
147 /***********************************************************************
150 INT16 WINAPI
SetROP216( HDC16 hdc
, INT16 mode
)
152 return SetROP2( HDC_32(hdc
), mode
);
156 /***********************************************************************
159 INT16 WINAPI
SetRelAbs16( HDC16 hdc
, INT16 mode
)
161 return SetRelAbs( HDC_32(hdc
), mode
);
165 /***********************************************************************
166 * SetPolyFillMode (GDI.6)
168 INT16 WINAPI
SetPolyFillMode16( HDC16 hdc
, INT16 mode
)
170 return SetPolyFillMode( HDC_32(hdc
), mode
);
174 /***********************************************************************
175 * SetStretchBltMode (GDI.7)
177 INT16 WINAPI
SetStretchBltMode16( HDC16 hdc
, INT16 mode
)
179 return SetStretchBltMode( HDC_32(hdc
), mode
);
183 /***********************************************************************
184 * SetTextCharacterExtra (GDI.8)
186 INT16 WINAPI
SetTextCharacterExtra16( HDC16 hdc
, INT16 extra
)
188 return SetTextCharacterExtra( HDC_32(hdc
), extra
);
192 /***********************************************************************
193 * SetTextColor (GDI.9)
195 COLORREF WINAPI
SetTextColor16( HDC16 hdc
, COLORREF color
)
197 return SetTextColor( HDC_32(hdc
), color
);
201 /***********************************************************************
202 * SetTextJustification (GDI.10)
204 INT16 WINAPI
SetTextJustification16( HDC16 hdc
, INT16 extra
, INT16 breaks
)
206 return SetTextJustification( HDC_32(hdc
), extra
, breaks
);
210 /***********************************************************************
211 * SetWindowOrg (GDI.11)
213 DWORD WINAPI
SetWindowOrg16( HDC16 hdc
, INT16 x
, INT16 y
)
216 if (!SetWindowOrgEx( HDC_32(hdc
), x
, y
, &pt
)) return 0;
217 return MAKELONG( pt
.x
, pt
.y
);
221 /***********************************************************************
222 * SetWindowExt (GDI.12)
224 DWORD WINAPI
SetWindowExt16( HDC16 hdc
, INT16 x
, INT16 y
)
227 if (!SetWindowExtEx( HDC_32(hdc
), x
, y
, &size
)) return 0;
228 return MAKELONG( size
.cx
, size
.cy
);
232 /***********************************************************************
233 * SetViewportOrg (GDI.13)
235 DWORD WINAPI
SetViewportOrg16( HDC16 hdc
, INT16 x
, INT16 y
)
238 if (!SetViewportOrgEx( HDC_32(hdc
), x
, y
, &pt
)) return 0;
239 return MAKELONG( pt
.x
, pt
.y
);
243 /***********************************************************************
244 * SetViewportExt (GDI.14)
246 DWORD WINAPI
SetViewportExt16( HDC16 hdc
, INT16 x
, INT16 y
)
249 if (!SetViewportExtEx( HDC_32(hdc
), x
, y
, &size
)) return 0;
250 return MAKELONG( size
.cx
, size
.cy
);
254 /***********************************************************************
255 * OffsetWindowOrg (GDI.15)
257 DWORD WINAPI
OffsetWindowOrg16( HDC16 hdc
, INT16 x
, INT16 y
)
260 if (!OffsetWindowOrgEx( HDC_32(hdc
), x
, y
, &pt
)) return 0;
261 return MAKELONG( pt
.x
, pt
.y
);
265 /***********************************************************************
266 * ScaleWindowExt (GDI.16)
268 DWORD WINAPI
ScaleWindowExt16( HDC16 hdc
, INT16 xNum
, INT16 xDenom
,
269 INT16 yNum
, INT16 yDenom
)
272 if (!ScaleWindowExtEx( HDC_32(hdc
), xNum
, xDenom
, yNum
, yDenom
, &size
))
274 return MAKELONG( size
.cx
, size
.cy
);
278 /***********************************************************************
279 * OffsetViewportOrg (GDI.17)
281 DWORD WINAPI
OffsetViewportOrg16( HDC16 hdc
, INT16 x
, INT16 y
)
284 if (!OffsetViewportOrgEx( HDC_32(hdc
), x
, y
, &pt
)) return 0;
285 return MAKELONG( pt
.x
, pt
.y
);
289 /***********************************************************************
290 * ScaleViewportExt (GDI.18)
292 DWORD WINAPI
ScaleViewportExt16( HDC16 hdc
, INT16 xNum
, INT16 xDenom
,
293 INT16 yNum
, INT16 yDenom
)
296 if (!ScaleViewportExtEx( HDC_32(hdc
), xNum
, xDenom
, yNum
, yDenom
, &size
))
298 return MAKELONG( size
.cx
, size
.cy
);
302 /***********************************************************************
305 BOOL16 WINAPI
LineTo16( HDC16 hdc
, INT16 x
, INT16 y
)
307 return LineTo( HDC_32(hdc
), x
, y
);
311 /***********************************************************************
314 DWORD WINAPI
MoveTo16( HDC16 hdc
, INT16 x
, INT16 y
)
318 if (!MoveToEx( HDC_32(hdc
), x
, y
, &pt
)) return 0;
319 return MAKELONG(pt
.x
,pt
.y
);
323 /***********************************************************************
324 * ExcludeClipRect (GDI.21)
326 INT16 WINAPI
ExcludeClipRect16( HDC16 hdc
, INT16 left
, INT16 top
,
327 INT16 right
, INT16 bottom
)
329 return ExcludeClipRect( HDC_32(hdc
), left
, top
, right
, bottom
);
333 /***********************************************************************
334 * IntersectClipRect (GDI.22)
336 INT16 WINAPI
IntersectClipRect16( HDC16 hdc
, INT16 left
, INT16 top
,
337 INT16 right
, INT16 bottom
)
339 return IntersectClipRect( HDC_32(hdc
), left
, top
, right
, bottom
);
343 /***********************************************************************
346 BOOL16 WINAPI
Arc16( HDC16 hdc
, INT16 left
, INT16 top
, INT16 right
,
347 INT16 bottom
, INT16 xstart
, INT16 ystart
,
348 INT16 xend
, INT16 yend
)
350 return Arc( HDC_32(hdc
), left
, top
, right
, bottom
, xstart
, ystart
, xend
, yend
);
354 /***********************************************************************
357 BOOL16 WINAPI
Ellipse16( HDC16 hdc
, INT16 left
, INT16 top
,
358 INT16 right
, INT16 bottom
)
360 return Ellipse( HDC_32(hdc
), left
, top
, right
, bottom
);
364 /**********************************************************************
367 BOOL16 WINAPI
FloodFill16( HDC16 hdc
, INT16 x
, INT16 y
, COLORREF color
)
369 return ExtFloodFill( HDC_32(hdc
), x
, y
, color
, FLOODFILLBORDER
);
373 /***********************************************************************
376 BOOL16 WINAPI
Pie16( HDC16 hdc
, INT16 left
, INT16 top
,
377 INT16 right
, INT16 bottom
, INT16 xstart
, INT16 ystart
,
378 INT16 xend
, INT16 yend
)
380 return Pie( HDC_32(hdc
), left
, top
, right
, bottom
, xstart
, ystart
, xend
, yend
);
384 /***********************************************************************
387 BOOL16 WINAPI
Rectangle16( HDC16 hdc
, INT16 left
, INT16 top
,
388 INT16 right
, INT16 bottom
)
390 return Rectangle( HDC_32(hdc
), left
, top
, right
, bottom
);
394 /***********************************************************************
397 BOOL16 WINAPI
RoundRect16( HDC16 hdc
, INT16 left
, INT16 top
, INT16 right
,
398 INT16 bottom
, INT16 ell_width
, INT16 ell_height
)
400 return RoundRect( HDC_32(hdc
), left
, top
, right
, bottom
, ell_width
, ell_height
);
404 /***********************************************************************
407 BOOL16 WINAPI
PatBlt16( HDC16 hdc
, INT16 left
, INT16 top
,
408 INT16 width
, INT16 height
, DWORD rop
)
410 return PatBlt( HDC_32(hdc
), left
, top
, width
, height
, rop
);
414 /***********************************************************************
417 INT16 WINAPI
SaveDC16( HDC16 hdc
)
419 return SaveDC( HDC_32(hdc
) );
423 /***********************************************************************
426 COLORREF WINAPI
SetPixel16( HDC16 hdc
, INT16 x
, INT16 y
, COLORREF color
)
428 return SetPixel( HDC_32(hdc
), x
, y
, color
);
432 /***********************************************************************
433 * OffsetClipRgn (GDI.32)
435 INT16 WINAPI
OffsetClipRgn16( HDC16 hdc
, INT16 x
, INT16 y
)
437 return OffsetClipRgn( HDC_32(hdc
), x
, y
);
441 /***********************************************************************
444 BOOL16 WINAPI
TextOut16( HDC16 hdc
, INT16 x
, INT16 y
, LPCSTR str
, INT16 count
)
446 return TextOutA( HDC_32(hdc
), x
, y
, str
, count
);
450 /***********************************************************************
453 BOOL16 WINAPI
BitBlt16( HDC16 hdcDst
, INT16 xDst
, INT16 yDst
, INT16 width
,
454 INT16 height
, HDC16 hdcSrc
, INT16 xSrc
, INT16 ySrc
,
457 return BitBlt( HDC_32(hdcDst
), xDst
, yDst
, width
, height
, HDC_32(hdcSrc
), xSrc
, ySrc
, rop
);
461 /***********************************************************************
462 * StretchBlt (GDI.35)
464 BOOL16 WINAPI
StretchBlt16( HDC16 hdcDst
, INT16 xDst
, INT16 yDst
,
465 INT16 widthDst
, INT16 heightDst
,
466 HDC16 hdcSrc
, INT16 xSrc
, INT16 ySrc
,
467 INT16 widthSrc
, INT16 heightSrc
, DWORD rop
)
469 return StretchBlt( HDC_32(hdcDst
), xDst
, yDst
, widthDst
, heightDst
,
470 HDC_32(hdcSrc
), xSrc
, ySrc
, widthSrc
, heightSrc
, rop
);
474 /**********************************************************************
477 BOOL16 WINAPI
Polygon16( HDC16 hdc
, const POINT16
* pt
, INT16 count
)
481 LPPOINT pt32
= (LPPOINT
)HeapAlloc( GetProcessHeap(), 0,
482 count
*sizeof(POINT
) );
484 if (!pt32
) return FALSE
;
485 for (i
=count
;i
--;) CONV_POINT16TO32(&(pt
[i
]),&(pt32
[i
]));
486 ret
= Polygon(HDC_32(hdc
),pt32
,count
);
487 HeapFree( GetProcessHeap(), 0, pt32
);
492 /**********************************************************************
495 BOOL16 WINAPI
Polyline16( HDC16 hdc
, const POINT16
* pt
, INT16 count
)
499 LPPOINT pt32
= (LPPOINT
)HeapAlloc( GetProcessHeap(), 0,
500 count
*sizeof(POINT
) );
502 if (!pt32
) return FALSE
;
503 for (i
=count
;i
--;) CONV_POINT16TO32(&(pt
[i
]),&(pt32
[i
]));
504 ret
= Polyline(HDC_32(hdc
),pt32
,count
);
505 HeapFree( GetProcessHeap(), 0, pt32
);
510 /***********************************************************************
513 INT16 WINAPI
Escape16( HDC16 hdc
, INT16 escape
, INT16 in_count
, SEGPTR in_data
, LPVOID out_data
)
519 /* Escape(hdc,CLIP_TO_PATH,LPINT16,NULL) */
520 /* Escape(hdc,DRAFTMODE,LPINT16,NULL) */
521 /* Escape(hdc,ENUMPAPERBINS,LPINT16,LPSTR); */
522 /* Escape(hdc,EPSPRINTING,LPINT16,NULL) */
523 /* Escape(hdc,EXT_DEVICE_CAPS,LPINT16,LPDWORD) */
524 /* Escape(hdc,GETCOLORTABLE,LPINT16,LPDWORD) */
525 /* Escape(hdc,MOUSETRAILS,LPINT16,NULL) */
526 /* Escape(hdc,POSTSCRIPT_IGNORE,LPINT16,NULL) */
527 /* Escape(hdc,QUERYESCSUPPORT,LPINT16,NULL) */
528 /* Escape(hdc,SET_ARC_DIRECTION,LPINT16,NULL) */
529 /* Escape(hdc,SET_POLY_MODE,LPINT16,NULL) */
530 /* Escape(hdc,SET_SCREEN_ANGLE,LPINT16,NULL) */
531 /* Escape(hdc,SET_SPREAD,LPINT16,NULL) */
536 case EXT_DEVICE_CAPS
:
539 case POSTSCRIPT_IGNORE
:
540 case QUERYESCSUPPORT
:
541 case SET_ARC_DIRECTION
:
543 case SET_SCREEN_ANGLE
:
546 INT16
*ptr
= MapSL(in_data
);
548 return Escape( HDC_32(hdc
), escape
, sizeof(data
), (LPCSTR
)&data
, out_data
);
551 /* Escape(hdc,ENABLEDUPLEX,LPUINT16,NULL) */
554 UINT16
*ptr
= MapSL(in_data
);
556 return Escape( HDC_32(hdc
), escape
, sizeof(data
), (LPCSTR
)&data
, NULL
);
559 /* Escape(hdc,GETPHYSPAGESIZE,NULL,LPPOINT16) */
560 /* Escape(hdc,GETPRINTINGOFFSET,NULL,LPPOINT16) */
561 /* Escape(hdc,GETSCALINGFACTOR,NULL,LPPOINT16) */
562 case GETPHYSPAGESIZE
:
563 case GETPRINTINGOFFSET
:
564 case GETSCALINGFACTOR
:
566 POINT16
*ptr
= out_data
;
568 ret
= Escape( HDC_32(hdc
), escape
, 0, NULL
, &pt32
);
574 /* Escape(hdc,ENABLEPAIRKERNING,LPINT16,LPINT16); */
575 /* Escape(hdc,ENABLERELATIVEWIDTHS,LPINT16,LPINT16); */
576 /* Escape(hdc,SETCOPYCOUNT,LPINT16,LPINT16) */
577 /* Escape(hdc,SETKERNTRACK,LPINT16,LPINT16) */
578 /* Escape(hdc,SETLINECAP,LPINT16,LPINT16) */
579 /* Escape(hdc,SETLINEJOIN,LPINT16,LPINT16) */
580 /* Escape(hdc,SETMITERLIMIT,LPINT16,LPINT16) */
581 case ENABLEPAIRKERNING
:
582 case ENABLERELATIVEWIDTHS
:
589 INT16
*new = MapSL(in_data
);
590 INT16
*old
= out_data
;
592 ret
= Escape( HDC_32(hdc
), escape
, sizeof(in
), (LPCSTR
)&in
, &out
);
597 /* Escape(hdc,SETABORTPROC,ABORTPROC,NULL); */
599 return SetAbortProc16( hdc
, (ABORTPROC16
)in_data
);
601 /* Escape(hdc,STARTDOC,LPSTR,LPDOCINFO16);
602 * lpvOutData is actually a pointer to the DocInfo structure and used as
603 * a second input parameter */
607 ret
= StartDoc16( hdc
, out_data
);
608 if (ret
> 0) ret
= StartPage( HDC_32(hdc
) );
611 return Escape( HDC_32(hdc
), escape
, in_count
, MapSL(in_data
), NULL
);
613 /* Escape(hdc,SET_BOUNDS,LPRECT16,NULL); */
614 /* Escape(hdc,SET_CLIP_BOX,LPRECT16,NULL); */
618 RECT16
*rc16
= MapSL(in_data
);
620 rc
.left
= rc16
->left
;
622 rc
.right
= rc16
->right
;
623 rc
.bottom
= rc16
->bottom
;
624 return Escape( HDC_32(hdc
), escape
, sizeof(rc
), (LPCSTR
)&rc
, NULL
);
627 /* Escape(hdc,NEXTBAND,NULL,LPRECT16); */
631 RECT16
*rc16
= out_data
;
632 ret
= Escape( HDC_32(hdc
), escape
, 0, NULL
, &rc
);
633 rc16
->left
= rc
.left
;
635 rc16
->right
= rc
.right
;
636 rc16
->bottom
= rc
.bottom
;
640 /* Escape(hdc,ABORTDOC,NULL,NULL); */
641 /* Escape(hdc,BANDINFO,BANDINFOSTRUCT*,BANDINFOSTRUCT*); */
642 /* Escape(hdc,BEGIN_PATH,NULL,NULL); */
643 /* Escape(hdc,DRAWPATTERNRECT,PRECT_STRUCT*,NULL); */
644 /* Escape(hdc,ENDDOC,NULL,NULL); */
645 /* Escape(hdc,END_PATH,PATHINFO,NULL); */
646 /* Escape(hdc,EXTTEXTOUT,EXTTEXT_STRUCT*,NULL); */
647 /* Escape(hdc,FLUSHOUTPUT,NULL,NULL); */
648 /* Escape(hdc,GETFACENAME,NULL,LPSTR); */
649 /* Escape(hdc,GETPAIRKERNTABLE,NULL,KERNPAIR*); */
650 /* Escape(hdc,GETSETPAPERBINS,BinInfo*,BinInfo*); */
651 /* Escape(hdc,GETSETPRINTORIENT,ORIENT*,NULL); */
652 /* Escape(hdc,GETSETSCREENPARAMS,SCREENPARAMS*,SCREENPARAMS*); */
653 /* Escape(hdc,GETTECHNOLOGY,NULL,LPSTR); */
654 /* Escape(hdc,GETTRACKKERNTABLE,NULL,KERNTRACK*); */
655 /* Escape(hdc,MFCOMMENT,LPSTR,NULL); */
656 /* Escape(hdc,NEWFRAME,NULL,NULL); */
657 /* Escape(hdc,PASSTHROUGH,LPSTR,NULL); */
658 /* Escape(hdc,RESTORE_CTM,NULL,NULL); */
659 /* Escape(hdc,SAVE_CTM,NULL,NULL); */
660 /* Escape(hdc,SETALLJUSTVALUES,EXTTEXTDATA*,NULL); */
661 /* Escape(hdc,SETCOLORTABLE,COLORTABLE_STRUCT*,LPDWORD); */
662 /* Escape(hdc,SET_BACKGROUND_COLOR,LPDWORD,LPDWORD); */
663 /* Escape(hdc,TRANSFORM_CTM,LPSTR,NULL); */
667 case DRAWPATTERNRECT
:
673 case GETPAIRKERNTABLE
:
674 case GETSETPAPERBINS
:
675 case GETSETPRINTORIENT
:
676 case GETSETSCREENPARAMS
:
678 case GETTRACKKERNTABLE
:
684 case SETALLJUSTVALUES
:
686 case SET_BACKGROUND_COLOR
:
688 /* pass it unmodified to the 32-bit function */
689 return Escape( HDC_32(hdc
), escape
, in_count
, MapSL(in_data
), out_data
);
691 /* Escape(hdc,ENUMPAPERMETRICS,LPINT16,LPRECT16); */
692 /* Escape(hdc,GETEXTENDEDTEXTMETRICS,LPUINT16,EXTTEXTMETRIC*); */
693 /* Escape(hdc,GETEXTENTTABLE,LPSTR,LPINT16); */
694 /* Escape(hdc,GETSETPAPERMETRICS,LPRECT16,LPRECT16); */
695 /* Escape(hdc,GETVECTORBRUSHSIZE,LPLOGBRUSH16,LPPOINT16); */
696 /* Escape(hdc,GETVECTORPENSIZE,LPLOGPEN16,LPPOINT16); */
697 case ENUMPAPERMETRICS
:
698 case GETEXTENDEDTEXTMETRICS
:
700 case GETSETPAPERMETRICS
:
701 case GETVECTORBRUSHSIZE
:
702 case GETVECTORPENSIZE
:
704 FIXME("unknown/unsupported 16-bit escape %x (%d,%p,%p\n",
705 escape
, in_count
, MapSL(in_data
), out_data
);
706 return Escape( HDC_32(hdc
), escape
, in_count
, MapSL(in_data
), out_data
);
711 /***********************************************************************
714 BOOL16 WINAPI
RestoreDC16( HDC16 hdc
, INT16 level
)
716 return RestoreDC( HDC_32(hdc
), level
);
720 /***********************************************************************
723 BOOL16 WINAPI
FillRgn16( HDC16 hdc
, HRGN16 hrgn
, HBRUSH16 hbrush
)
725 return FillRgn( HDC_32(hdc
), HRGN_32(hrgn
), HBRUSH_32(hbrush
) );
729 /***********************************************************************
732 BOOL16 WINAPI
FrameRgn16( HDC16 hdc
, HRGN16 hrgn
, HBRUSH16 hbrush
,
733 INT16 nWidth
, INT16 nHeight
)
735 return FrameRgn( HDC_32(hdc
), HRGN_32(hrgn
), HBRUSH_32(hbrush
), nWidth
, nHeight
);
739 /***********************************************************************
742 BOOL16 WINAPI
InvertRgn16( HDC16 hdc
, HRGN16 hrgn
)
744 return InvertRgn( HDC_32(hdc
), HRGN_32(hrgn
) );
748 /***********************************************************************
751 BOOL16 WINAPI
PaintRgn16( HDC16 hdc
, HRGN16 hrgn
)
753 return PaintRgn( HDC_32(hdc
), HRGN_32(hrgn
) );
757 /***********************************************************************
758 * SelectClipRgn (GDI.44)
760 INT16 WINAPI
SelectClipRgn16( HDC16 hdc
, HRGN16 hrgn
)
762 return SelectClipRgn( HDC_32(hdc
), HRGN_32(hrgn
) );
766 /***********************************************************************
767 * SelectObject (GDI.45)
769 HGDIOBJ16 WINAPI
SelectObject16( HDC16 hdc
, HGDIOBJ16 handle
)
771 return HGDIOBJ_16( SelectObject( HDC_32(hdc
), HGDIOBJ_32(handle
) ) );
775 /***********************************************************************
776 * CombineRgn (GDI.47)
778 INT16 WINAPI
CombineRgn16(HRGN16 hDest
, HRGN16 hSrc1
, HRGN16 hSrc2
, INT16 mode
)
780 return CombineRgn( HRGN_32(hDest
), HRGN_32(hSrc1
), HRGN_32(hSrc2
), mode
);
784 /***********************************************************************
785 * CreateBitmap (GDI.48)
787 HBITMAP16 WINAPI
CreateBitmap16( INT16 width
, INT16 height
, UINT16 planes
,
788 UINT16 bpp
, LPCVOID bits
)
790 return HBITMAP_16( CreateBitmap( width
, height
, planes
, bpp
, bits
) );
794 /***********************************************************************
795 * CreateBitmapIndirect (GDI.49)
797 HBITMAP16 WINAPI
CreateBitmapIndirect16( const BITMAP16
* bmp
)
799 return CreateBitmap16( bmp
->bmWidth
, bmp
->bmHeight
, bmp
->bmPlanes
,
800 bmp
->bmBitsPixel
, MapSL( bmp
->bmBits
) );
804 /***********************************************************************
805 * CreateBrushIndirect (GDI.50)
807 HBRUSH16 WINAPI
CreateBrushIndirect16( const LOGBRUSH16
* brush
)
811 if (brush
->lbStyle
== BS_DIBPATTERN
|| brush
->lbStyle
== BS_DIBPATTERN8X8
)
812 return CreateDIBPatternBrush16( brush
->lbHatch
, brush
->lbColor
);
814 brush32
.lbStyle
= brush
->lbStyle
;
815 brush32
.lbColor
= brush
->lbColor
;
816 brush32
.lbHatch
= brush
->lbHatch
;
817 return HBRUSH_16( CreateBrushIndirect(&brush32
) );
821 /***********************************************************************
822 * CreateCompatibleBitmap (GDI.51)
824 HBITMAP16 WINAPI
CreateCompatibleBitmap16( HDC16 hdc
, INT16 width
, INT16 height
)
826 return HBITMAP_16( CreateCompatibleBitmap( HDC_32(hdc
), width
, height
) );
830 /***********************************************************************
831 * CreateCompatibleDC (GDI.52)
833 HDC16 WINAPI
CreateCompatibleDC16( HDC16 hdc
)
835 return HDC_16( CreateCompatibleDC( HDC_32(hdc
) ) );
839 /***********************************************************************
842 HDC16 WINAPI
CreateDC16( LPCSTR driver
, LPCSTR device
, LPCSTR output
,
843 const DEVMODEA
*initData
)
845 return HDC_16( CreateDCA( driver
, device
, output
, initData
) );
849 /***********************************************************************
850 * CreateEllipticRgn (GDI.54)
852 HRGN16 WINAPI
CreateEllipticRgn16( INT16 left
, INT16 top
, INT16 right
, INT16 bottom
)
854 return HRGN_16( CreateEllipticRgn( left
, top
, right
, bottom
) );
858 /***********************************************************************
859 * CreateEllipticRgnIndirect (GDI.55)
861 HRGN16 WINAPI
CreateEllipticRgnIndirect16( const RECT16
*rect
)
863 return HRGN_16( CreateEllipticRgn( rect
->left
, rect
->top
, rect
->right
, rect
->bottom
) );
867 /***********************************************************************
868 * CreateFont (GDI.56)
870 HFONT16 WINAPI
CreateFont16(INT16 height
, INT16 width
, INT16 esc
, INT16 orient
,
871 INT16 weight
, BYTE italic
, BYTE underline
,
872 BYTE strikeout
, BYTE charset
, BYTE outpres
,
873 BYTE clippres
, BYTE quality
, BYTE pitch
,
876 return HFONT_16( CreateFontA( height
, width
, esc
, orient
, weight
, italic
, underline
,
877 strikeout
, charset
, outpres
, clippres
, quality
, pitch
, name
));
880 /***********************************************************************
881 * CreateFontIndirect (GDI.57)
883 HFONT16 WINAPI
CreateFontIndirect16( const LOGFONT16
*plf16
)
890 logfont_16_to_W( plf16
, &lfW
);
891 ret
= CreateFontIndirectW( &lfW
);
893 else ret
= CreateFontIndirectW( NULL
);
894 return HFONT_16(ret
);
898 /***********************************************************************
899 * CreateHatchBrush (GDI.58)
901 HBRUSH16 WINAPI
CreateHatchBrush16( INT16 style
, COLORREF color
)
903 return HBRUSH_16( CreateHatchBrush( style
, color
) );
907 /***********************************************************************
908 * CreatePatternBrush (GDI.60)
910 HBRUSH16 WINAPI
CreatePatternBrush16( HBITMAP16 hbitmap
)
912 return HBRUSH_16( CreatePatternBrush( HBITMAP_32(hbitmap
) ));
916 /***********************************************************************
919 HPEN16 WINAPI
CreatePen16( INT16 style
, INT16 width
, COLORREF color
)
923 logpen
.lopnStyle
= style
;
924 logpen
.lopnWidth
.x
= width
;
925 logpen
.lopnWidth
.y
= 0;
926 logpen
.lopnColor
= color
;
927 return HPEN_16( CreatePenIndirect( &logpen
) );
931 /***********************************************************************
932 * CreatePenIndirect (GDI.62)
934 HPEN16 WINAPI
CreatePenIndirect16( const LOGPEN16
* pen
)
938 if (pen
->lopnStyle
> PS_INSIDEFRAME
) return 0;
939 logpen
.lopnStyle
= pen
->lopnStyle
;
940 logpen
.lopnWidth
.x
= pen
->lopnWidth
.x
;
941 logpen
.lopnWidth
.y
= pen
->lopnWidth
.y
;
942 logpen
.lopnColor
= pen
->lopnColor
;
943 return HPEN_16( CreatePenIndirect( &logpen
) );
947 /***********************************************************************
948 * CreatePolygonRgn (GDI.63)
950 HRGN16 WINAPI
CreatePolygonRgn16( const POINT16
* points
, INT16 count
, INT16 mode
)
952 return CreatePolyPolygonRgn16( points
, &count
, 1, mode
);
956 /***********************************************************************
957 * CreateRectRgn (GDI.64)
959 * NOTE: cf. SetRectRgn16
961 HRGN16 WINAPI
CreateRectRgn16( INT16 left
, INT16 top
, INT16 right
, INT16 bottom
)
965 if (left
< right
) hrgn
= CreateRectRgn( left
, top
, right
, bottom
);
966 else hrgn
= CreateRectRgn( 0, 0, 0, 0 );
967 return HRGN_16(hrgn
);
971 /***********************************************************************
972 * CreateRectRgnIndirect (GDI.65)
974 HRGN16 WINAPI
CreateRectRgnIndirect16( const RECT16
* rect
)
976 return CreateRectRgn16( rect
->left
, rect
->top
, rect
->right
, rect
->bottom
);
980 /***********************************************************************
981 * CreateSolidBrush (GDI.66)
983 HBRUSH16 WINAPI
CreateSolidBrush16( COLORREF color
)
985 return HBRUSH_16( CreateSolidBrush( color
) );
989 /***********************************************************************
992 BOOL16 WINAPI
DeleteDC16( HDC16 hdc
)
994 return DeleteDC( HDC_32(hdc
) );
998 /***********************************************************************
999 * DeleteObject (GDI.69)
1000 * SysDeleteObject (GDI.605)
1002 BOOL16 WINAPI
DeleteObject16( HGDIOBJ16 obj
)
1004 return DeleteObject( HGDIOBJ_32(obj
) );
1008 /***********************************************************************
1009 * EnumObjects (GDI.71)
1011 INT16 WINAPI
EnumObjects16( HDC16 hdc
, INT16 obj
, GOBJENUMPROC16 proc
, LPARAM lParam
)
1013 struct callback16_info info
;
1015 info
.proc
= (FARPROC16
)proc
;
1016 info
.param
= lParam
;
1020 return EnumObjects( HDC_32(hdc
), OBJ_PEN
, enum_pens_callback
, (LPARAM
)&info
);
1022 return EnumObjects( HDC_32(hdc
), OBJ_BRUSH
, enum_brushes_callback
, (LPARAM
)&info
);
1028 /***********************************************************************
1031 BOOL16 WINAPI
EqualRgn16( HRGN16 rgn1
, HRGN16 rgn2
)
1033 return EqualRgn( HRGN_32(rgn1
), HRGN_32(rgn2
) );
1037 /***********************************************************************
1038 * GetBitmapBits (GDI.74)
1040 LONG WINAPI
GetBitmapBits16( HBITMAP16 hbitmap
, LONG count
, LPVOID buffer
)
1042 return GetBitmapBits( HBITMAP_32(hbitmap
), count
, buffer
);
1046 /***********************************************************************
1047 * GetBkColor (GDI.75)
1049 COLORREF WINAPI
GetBkColor16( HDC16 hdc
)
1051 return GetBkColor( HDC_32(hdc
) );
1055 /***********************************************************************
1056 * GetBkMode (GDI.76)
1058 INT16 WINAPI
GetBkMode16( HDC16 hdc
)
1060 return GetBkMode( HDC_32(hdc
) );
1064 /***********************************************************************
1065 * GetClipBox (GDI.77)
1067 INT16 WINAPI
GetClipBox16( HDC16 hdc
, LPRECT16 rect
)
1070 INT ret
= GetClipBox( HDC_32(hdc
), &rect32
);
1074 rect
->left
= rect32
.left
;
1075 rect
->top
= rect32
.top
;
1076 rect
->right
= rect32
.right
;
1077 rect
->bottom
= rect32
.bottom
;
1083 /***********************************************************************
1084 * GetCurrentPosition (GDI.78)
1086 DWORD WINAPI
GetCurrentPosition16( HDC16 hdc
)
1089 if (!GetCurrentPositionEx( HDC_32(hdc
), &pt32
)) return 0;
1090 return MAKELONG( pt32
.x
, pt32
.y
);
1094 /***********************************************************************
1097 DWORD WINAPI
GetDCOrg16( HDC16 hdc
)
1100 if (GetDCOrgEx( HDC_32(hdc
), &pt
)) return MAKELONG( pt
.x
, pt
.y
);
1105 /***********************************************************************
1106 * GetDeviceCaps (GDI.80)
1108 INT16 WINAPI
GetDeviceCaps16( HDC16 hdc
, INT16 cap
)
1110 INT16 ret
= GetDeviceCaps( HDC_32(hdc
), cap
);
1111 /* some apps don't expect -1 and think it's a B&W screen */
1112 if ((cap
== NUMCOLORS
) && (ret
== -1)) ret
= 2048;
1117 /***********************************************************************
1118 * GetMapMode (GDI.81)
1120 INT16 WINAPI
GetMapMode16( HDC16 hdc
)
1122 return GetMapMode( HDC_32(hdc
) );
1126 /***********************************************************************
1129 COLORREF WINAPI
GetPixel16( HDC16 hdc
, INT16 x
, INT16 y
)
1131 return GetPixel( HDC_32(hdc
), x
, y
);
1135 /***********************************************************************
1136 * GetPolyFillMode (GDI.84)
1138 INT16 WINAPI
GetPolyFillMode16( HDC16 hdc
)
1140 return GetPolyFillMode( HDC_32(hdc
) );
1144 /***********************************************************************
1147 INT16 WINAPI
GetROP216( HDC16 hdc
)
1149 return GetROP2( HDC_32(hdc
) );
1153 /***********************************************************************
1154 * GetRelAbs (GDI.86)
1156 INT16 WINAPI
GetRelAbs16( HDC16 hdc
)
1158 return GetRelAbs( HDC_32(hdc
), 0 );
1162 /***********************************************************************
1163 * GetStockObject (GDI.87)
1165 HGDIOBJ16 WINAPI
GetStockObject16( INT16 obj
)
1167 return HGDIOBJ_16( GetStockObject( obj
) );
1171 /***********************************************************************
1172 * GetStretchBltMode (GDI.88)
1174 INT16 WINAPI
GetStretchBltMode16( HDC16 hdc
)
1176 return GetStretchBltMode( HDC_32(hdc
) );
1180 /***********************************************************************
1181 * GetTextCharacterExtra (GDI.89)
1183 INT16 WINAPI
GetTextCharacterExtra16( HDC16 hdc
)
1185 return GetTextCharacterExtra( HDC_32(hdc
) );
1189 /***********************************************************************
1190 * GetTextColor (GDI.90)
1192 COLORREF WINAPI
GetTextColor16( HDC16 hdc
)
1194 return GetTextColor( HDC_32(hdc
) );
1198 /***********************************************************************
1199 * GetTextExtent (GDI.91)
1201 DWORD WINAPI
GetTextExtent16( HDC16 hdc
, LPCSTR str
, INT16 count
)
1204 if (!GetTextExtentPoint32A( HDC_32(hdc
), str
, count
, &size
)) return 0;
1205 return MAKELONG( size
.cx
, size
.cy
);
1209 /***********************************************************************
1210 * GetTextFace (GDI.92)
1212 INT16 WINAPI
GetTextFace16( HDC16 hdc
, INT16 count
, LPSTR name
)
1214 return GetTextFaceA( HDC_32(hdc
), count
, name
);
1218 /***********************************************************************
1219 * GetTextMetrics (GDI.93)
1221 BOOL16 WINAPI
GetTextMetrics16( HDC16 hdc
, TEXTMETRIC16
*tm
)
1225 if (!GetTextMetricsW( HDC_32(hdc
), &tm32
)) return FALSE
;
1227 tm
->tmHeight
= tm32
.tmHeight
;
1228 tm
->tmAscent
= tm32
.tmAscent
;
1229 tm
->tmDescent
= tm32
.tmDescent
;
1230 tm
->tmInternalLeading
= tm32
.tmInternalLeading
;
1231 tm
->tmExternalLeading
= tm32
.tmExternalLeading
;
1232 tm
->tmAveCharWidth
= tm32
.tmAveCharWidth
;
1233 tm
->tmMaxCharWidth
= tm32
.tmMaxCharWidth
;
1234 tm
->tmWeight
= tm32
.tmWeight
;
1235 tm
->tmOverhang
= tm32
.tmOverhang
;
1236 tm
->tmDigitizedAspectX
= tm32
.tmDigitizedAspectX
;
1237 tm
->tmDigitizedAspectY
= tm32
.tmDigitizedAspectY
;
1238 tm
->tmFirstChar
= tm32
.tmFirstChar
;
1239 tm
->tmLastChar
= tm32
.tmLastChar
;
1240 tm
->tmDefaultChar
= tm32
.tmDefaultChar
;
1241 tm
->tmBreakChar
= tm32
.tmBreakChar
;
1242 tm
->tmItalic
= tm32
.tmItalic
;
1243 tm
->tmUnderlined
= tm32
.tmUnderlined
;
1244 tm
->tmStruckOut
= tm32
.tmStruckOut
;
1245 tm
->tmPitchAndFamily
= tm32
.tmPitchAndFamily
;
1246 tm
->tmCharSet
= tm32
.tmCharSet
;
1251 /***********************************************************************
1252 * GetViewportExt (GDI.94)
1254 DWORD WINAPI
GetViewportExt16( HDC16 hdc
)
1257 if (!GetViewportExtEx( HDC_32(hdc
), &size
)) return 0;
1258 return MAKELONG( size
.cx
, size
.cy
);
1262 /***********************************************************************
1263 * GetViewportOrg (GDI.95)
1265 DWORD WINAPI
GetViewportOrg16( HDC16 hdc
)
1268 if (!GetViewportOrgEx( HDC_32(hdc
), &pt
)) return 0;
1269 return MAKELONG( pt
.x
, pt
.y
);
1273 /***********************************************************************
1274 * GetWindowExt (GDI.96)
1276 DWORD WINAPI
GetWindowExt16( HDC16 hdc
)
1279 if (!GetWindowExtEx( HDC_32(hdc
), &size
)) return 0;
1280 return MAKELONG( size
.cx
, size
.cy
);
1284 /***********************************************************************
1285 * GetWindowOrg (GDI.97)
1287 DWORD WINAPI
GetWindowOrg16( HDC16 hdc
)
1290 if (!GetWindowOrgEx( HDC_32(hdc
), &pt
)) return 0;
1291 return MAKELONG( pt
.x
, pt
.y
);
1297 /**********************************************************************
1300 void WINAPI
LineDDA16( INT16 nXStart
, INT16 nYStart
, INT16 nXEnd
,
1301 INT16 nYEnd
, LINEDDAPROC16 proc
, LPARAM lParam
)
1303 struct callback16_info info
;
1304 info
.proc
= (FARPROC16
)proc
;
1305 info
.param
= lParam
;
1306 LineDDA( nXStart
, nYStart
, nXEnd
, nYEnd
, linedda_callback
, (LPARAM
)&info
);
1310 /***********************************************************************
1311 * OffsetRgn (GDI.101)
1313 INT16 WINAPI
OffsetRgn16( HRGN16 hrgn
, INT16 x
, INT16 y
)
1315 return OffsetRgn( HRGN_32(hrgn
), x
, y
);
1319 /***********************************************************************
1320 * PtVisible (GDI.103)
1322 BOOL16 WINAPI
PtVisible16( HDC16 hdc
, INT16 x
, INT16 y
)
1324 return PtVisible( HDC_32(hdc
), x
, y
);
1328 /***********************************************************************
1329 * SetBitmapBits (GDI.106)
1331 LONG WINAPI
SetBitmapBits16( HBITMAP16 hbitmap
, LONG count
, LPCVOID buffer
)
1333 return SetBitmapBits( HBITMAP_32(hbitmap
), count
, buffer
);
1337 /***********************************************************************
1338 * AddFontResource (GDI.119)
1340 INT16 WINAPI
AddFontResource16( LPCSTR filename
)
1342 return AddFontResourceA( filename
);
1346 /***********************************************************************
1349 * Disables GDI, switches back to text mode.
1350 * We don't have to do anything here,
1351 * just let console support handle everything
1353 void WINAPI
Death16(HDC16 hdc
)
1355 MESSAGE("Death(%04x) called. Application enters text mode...\n", hdc
);
1359 /***********************************************************************
1360 * Resurrection (GDI.122)
1362 * Restores GDI functionality
1364 void WINAPI
Resurrection16(HDC16 hdc
,
1365 WORD w1
, WORD w2
, WORD w3
, WORD w4
, WORD w5
, WORD w6
)
1367 MESSAGE("Resurrection(%04x, %04x, %04x, %04x, %04x, %04x, %04x) called. Application left text mode.\n",
1368 hdc
, w1
, w2
, w3
, w4
, w5
, w6
);
1372 /**********************************************************************
1373 * CreateMetaFile (GDI.125)
1375 HDC16 WINAPI
CreateMetaFile16( LPCSTR filename
)
1377 return HDC_16( CreateMetaFileA( filename
) );
1381 /***********************************************************************
1384 INT16 WINAPI
MulDiv16( INT16 nMultiplicand
, INT16 nMultiplier
, INT16 nDivisor
)
1387 if (!nDivisor
) return -32768;
1388 /* We want to deal with a positive divisor to simplify the logic. */
1391 nMultiplicand
= - nMultiplicand
;
1392 nDivisor
= -nDivisor
;
1394 /* If the result is positive, we "add" to round. else,
1395 * we subtract to round. */
1396 if ( ( (nMultiplicand
< 0) && (nMultiplier
< 0) ) ||
1397 ( (nMultiplicand
>= 0) && (nMultiplier
>= 0) ) )
1398 ret
= (((int)nMultiplicand
* nMultiplier
) + (nDivisor
/2)) / nDivisor
;
1400 ret
= (((int)nMultiplicand
* nMultiplier
) - (nDivisor
/2)) / nDivisor
;
1401 if ((ret
> 32767) || (ret
< -32767)) return -32768;
1406 /***********************************************************************
1407 * GetRgnBox (GDI.134)
1409 INT16 WINAPI
GetRgnBox16( HRGN16 hrgn
, LPRECT16 rect
)
1412 INT16 ret
= GetRgnBox( HRGN_32(hrgn
), &r
);
1413 CONV_RECT32TO16( &r
, rect
);
1418 /***********************************************************************
1419 * RemoveFontResource (GDI.136)
1421 BOOL16 WINAPI
RemoveFontResource16( LPCSTR str
)
1423 return RemoveFontResourceA(str
);
1427 /***********************************************************************
1428 * SetBrushOrg (GDI.148)
1430 DWORD WINAPI
SetBrushOrg16( HDC16 hdc
, INT16 x
, INT16 y
)
1434 if (!SetBrushOrgEx( HDC_32(hdc
), x
, y
, &pt
)) return 0;
1435 return MAKELONG( pt
.x
, pt
.y
);
1439 /***********************************************************************
1440 * GetBrushOrg (GDI.149)
1442 DWORD WINAPI
GetBrushOrg16( HDC16 hdc
)
1445 if (!GetBrushOrgEx( HDC_32(hdc
), &pt
)) return 0;
1446 return MAKELONG( pt
.x
, pt
.y
);
1450 /***********************************************************************
1451 * UnrealizeObject (GDI.150)
1453 BOOL16 WINAPI
UnrealizeObject16( HGDIOBJ16 obj
)
1455 return UnrealizeObject( HGDIOBJ_32(obj
) );
1459 /***********************************************************************
1460 * CreateIC (GDI.153)
1462 HDC16 WINAPI
CreateIC16( LPCSTR driver
, LPCSTR device
, LPCSTR output
,
1463 const DEVMODEA
* initData
)
1465 return HDC_16( CreateICA( driver
, device
, output
, initData
) );
1469 /***********************************************************************
1470 * GetNearestColor (GDI.154)
1472 COLORREF WINAPI
GetNearestColor16( HDC16 hdc
, COLORREF color
)
1474 return GetNearestColor( HDC_32(hdc
), color
);
1478 /***********************************************************************
1479 * CreateDiscardableBitmap (GDI.156)
1481 HBITMAP16 WINAPI
CreateDiscardableBitmap16( HDC16 hdc
, INT16 width
, INT16 height
)
1483 return HBITMAP_16( CreateDiscardableBitmap( HDC_32(hdc
), width
, height
) );
1487 /***********************************************************************
1488 * PtInRegion (GDI.161)
1490 BOOL16 WINAPI
PtInRegion16( HRGN16 hrgn
, INT16 x
, INT16 y
)
1492 return PtInRegion( HRGN_32(hrgn
), x
, y
);
1496 /***********************************************************************
1497 * GetBitmapDimension (GDI.162)
1499 DWORD WINAPI
GetBitmapDimension16( HBITMAP16 hbitmap
)
1502 if (!GetBitmapDimensionEx16( hbitmap
, &size
)) return 0;
1503 return MAKELONG( size
.cx
, size
.cy
);
1507 /***********************************************************************
1508 * SetBitmapDimension (GDI.163)
1510 DWORD WINAPI
SetBitmapDimension16( HBITMAP16 hbitmap
, INT16 x
, INT16 y
)
1513 if (!SetBitmapDimensionEx16( hbitmap
, x
, y
, &size
)) return 0;
1514 return MAKELONG( size
.cx
, size
.cy
);
1518 /***********************************************************************
1519 * SetRectRgn (GDI.172)
1521 * NOTE: Win 3.1 sets region to empty if left > right
1523 void WINAPI
SetRectRgn16( HRGN16 hrgn
, INT16 left
, INT16 top
, INT16 right
, INT16 bottom
)
1525 if (left
< right
) SetRectRgn( HRGN_32(hrgn
), left
, top
, right
, bottom
);
1526 else SetRectRgn( HRGN_32(hrgn
), 0, 0, 0, 0 );
1530 /******************************************************************
1531 * PlayMetaFileRecord (GDI.176)
1533 void WINAPI
PlayMetaFileRecord16( HDC16 hdc
, HANDLETABLE16
*ht
, METARECORD
*mr
, UINT16 handles
)
1535 HANDLETABLE
*ht32
= HeapAlloc( GetProcessHeap(), 0, handles
* sizeof(*ht32
) );
1538 for (i
= 0; i
< handles
; i
++) ht32
->objectHandle
[i
] = (HGDIOBJ
)(ULONG_PTR
)ht
->objectHandle
[i
];
1539 PlayMetaFileRecord( HDC_32(hdc
), ht32
, mr
, handles
);
1540 for (i
= 0; i
< handles
; i
++) ht
->objectHandle
[i
] = LOWORD(ht32
->objectHandle
[i
]);
1541 HeapFree( GetProcessHeap(), 0, ht32
);
1545 /***********************************************************************
1546 * GetCharABCWidths (GDI.307)
1548 BOOL16 WINAPI
GetCharABCWidths16( HDC16 hdc
, UINT16 firstChar
, UINT16 lastChar
, LPABC16 abc
)
1552 LPABC abc32
= HeapAlloc( GetProcessHeap(), 0, sizeof(ABC
) * (lastChar
- firstChar
+ 1) );
1554 if ((ret
= GetCharABCWidthsA( HDC_32(hdc
), firstChar
, lastChar
, abc32
)))
1556 for (i
= firstChar
; i
<= lastChar
; i
++)
1558 abc
[i
-firstChar
].abcA
= abc32
[i
-firstChar
].abcA
;
1559 abc
[i
-firstChar
].abcB
= abc32
[i
-firstChar
].abcB
;
1560 abc
[i
-firstChar
].abcC
= abc32
[i
-firstChar
].abcC
;
1563 HeapFree( GetProcessHeap(), 0, abc32
);
1568 /***********************************************************************
1569 * CreateScalableFontResource (GDI.310)
1571 BOOL16 WINAPI
CreateScalableFontResource16( UINT16 fHidden
, LPCSTR lpszResourceFile
,
1572 LPCSTR fontFile
, LPCSTR path
)
1574 return CreateScalableFontResourceA( fHidden
, lpszResourceFile
, fontFile
, path
);
1578 /*************************************************************************
1579 * GetFontData (GDI.311)
1582 DWORD WINAPI
GetFontData16( HDC16 hdc
, DWORD table
, DWORD offset
, LPVOID buffer
, DWORD count
)
1584 return GetFontData( HDC_32(hdc
), table
, offset
, buffer
, count
);
1588 /*************************************************************************
1589 * GetRasterizerCaps (GDI.313)
1591 BOOL16 WINAPI
GetRasterizerCaps16( LPRASTERIZER_STATUS lprs
, UINT16 cbNumBytes
)
1593 return GetRasterizerCaps( lprs
, cbNumBytes
);
1597 /*************************************************************************
1598 * GetKerningPairs (GDI.332)
1601 INT16 WINAPI
GetKerningPairs16( HDC16 hdc
, INT16 count
, LPKERNINGPAIR16 pairs
)
1603 KERNINGPAIR
*pairs32
;
1606 if (!count
) return 0;
1608 if (!(pairs32
= HeapAlloc( GetProcessHeap(), 0, count
* sizeof(*pairs32
) ))) return 0;
1609 if ((ret
= GetKerningPairsA( HDC_32(hdc
), count
, pairs32
)))
1611 for (i
= 0; i
< ret
; i
++)
1613 pairs
->wFirst
= pairs32
->wFirst
;
1614 pairs
->wSecond
= pairs32
->wSecond
;
1615 pairs
->iKernAmount
= pairs32
->iKernAmount
;
1618 HeapFree( GetProcessHeap(), 0, pairs32
);
1624 /***********************************************************************
1625 * GetTextAlign (GDI.345)
1627 UINT16 WINAPI
GetTextAlign16( HDC16 hdc
)
1629 return GetTextAlign( HDC_32(hdc
) );
1633 /***********************************************************************
1634 * SetTextAlign (GDI.346)
1636 UINT16 WINAPI
SetTextAlign16( HDC16 hdc
, UINT16 align
)
1638 return SetTextAlign( HDC_32(hdc
), align
);
1642 /***********************************************************************
1645 BOOL16 WINAPI
Chord16( HDC16 hdc
, INT16 left
, INT16 top
,
1646 INT16 right
, INT16 bottom
, INT16 xstart
, INT16 ystart
,
1647 INT16 xend
, INT16 yend
)
1649 return Chord( HDC_32(hdc
), left
, top
, right
, bottom
, xstart
, ystart
, xend
, yend
);
1653 /***********************************************************************
1654 * SetMapperFlags (GDI.349)
1656 DWORD WINAPI
SetMapperFlags16( HDC16 hdc
, DWORD flags
)
1658 return SetMapperFlags( HDC_32(hdc
), flags
);
1662 /***********************************************************************
1663 * GetCharWidth (GDI.350)
1665 BOOL16 WINAPI
GetCharWidth16( HDC16 hdc
, UINT16 firstChar
, UINT16 lastChar
, LPINT16 buffer
)
1667 BOOL retVal
= FALSE
;
1669 if( firstChar
!= lastChar
)
1671 LPINT buf32
= HeapAlloc(GetProcessHeap(), 0, sizeof(INT
)*(1 + (lastChar
- firstChar
)));
1674 LPINT obuf32
= buf32
;
1677 retVal
= GetCharWidth32A( HDC_32(hdc
), firstChar
, lastChar
, buf32
);
1680 for (i
= firstChar
; i
<= lastChar
; i
++) *buffer
++ = *buf32
++;
1682 HeapFree(GetProcessHeap(), 0, obuf32
);
1685 else /* happens quite often to warrant a special treatment */
1688 retVal
= GetCharWidth32A( HDC_32(hdc
), firstChar
, lastChar
, &chWidth
);
1695 /***********************************************************************
1696 * ExtTextOut (GDI.351)
1698 BOOL16 WINAPI
ExtTextOut16( HDC16 hdc
, INT16 x
, INT16 y
, UINT16 flags
,
1699 const RECT16
*lprect
, LPCSTR str
, UINT16 count
,
1705 LPINT lpdx32
= NULL
;
1708 lpdx32
= (LPINT
)HeapAlloc( GetProcessHeap(),0, sizeof(INT
)*count
);
1709 if(lpdx32
== NULL
) return FALSE
;
1710 for (i
=count
;i
--;) lpdx32
[i
]=lpDx
[i
];
1712 if (lprect
) CONV_RECT16TO32(lprect
,&rect32
);
1713 ret
= ExtTextOutA(HDC_32(hdc
),x
,y
,flags
,lprect
?&rect32
:NULL
,str
,count
,lpdx32
);
1714 if (lpdx32
) HeapFree( GetProcessHeap(), 0, lpdx32
);
1719 /***********************************************************************
1720 * CreatePalette (GDI.360)
1722 HPALETTE16 WINAPI
CreatePalette16( const LOGPALETTE
* palette
)
1724 return HPALETTE_16( CreatePalette( palette
) );
1728 /***********************************************************************
1729 * GDISelectPalette (GDI.361)
1731 HPALETTE16 WINAPI
GDISelectPalette16( HDC16 hdc
, HPALETTE16 hpalette
, WORD wBkg
)
1733 return HPALETTE_16( GDISelectPalette( HDC_32(hdc
), HPALETTE_32(hpalette
), wBkg
));
1737 /***********************************************************************
1738 * GDIRealizePalette (GDI.362)
1740 UINT16 WINAPI
GDIRealizePalette16( HDC16 hdc
)
1742 return GDIRealizePalette( HDC_32(hdc
) );
1746 /***********************************************************************
1747 * GetPaletteEntries (GDI.363)
1749 UINT16 WINAPI
GetPaletteEntries16( HPALETTE16 hpalette
, UINT16 start
,
1750 UINT16 count
, LPPALETTEENTRY entries
)
1752 return GetPaletteEntries( HPALETTE_32(hpalette
), start
, count
, entries
);
1756 /***********************************************************************
1757 * SetPaletteEntries (GDI.364)
1759 UINT16 WINAPI
SetPaletteEntries16( HPALETTE16 hpalette
, UINT16 start
,
1760 UINT16 count
, const PALETTEENTRY
*entries
)
1762 return SetPaletteEntries( HPALETTE_32(hpalette
), start
, count
, entries
);
1766 /**********************************************************************
1767 * UpdateColors (GDI.366)
1769 INT16 WINAPI
UpdateColors16( HDC16 hdc
)
1771 UpdateColors( HDC_32(hdc
) );
1776 /***********************************************************************
1777 * AnimatePalette (GDI.367)
1779 void WINAPI
AnimatePalette16( HPALETTE16 hpalette
, UINT16 StartIndex
,
1780 UINT16 NumEntries
, const PALETTEENTRY
* PaletteColors
)
1782 AnimatePalette( HPALETTE_32(hpalette
), StartIndex
, NumEntries
, PaletteColors
);
1786 /***********************************************************************
1787 * ResizePalette (GDI.368)
1789 BOOL16 WINAPI
ResizePalette16( HPALETTE16 hpalette
, UINT16 cEntries
)
1791 return ResizePalette( HPALETTE_32(hpalette
), cEntries
);
1795 /***********************************************************************
1796 * GetNearestPaletteIndex (GDI.370)
1798 UINT16 WINAPI
GetNearestPaletteIndex16( HPALETTE16 hpalette
, COLORREF color
)
1800 return GetNearestPaletteIndex( HPALETTE_32(hpalette
), color
);
1804 /**********************************************************************
1805 * ExtFloodFill (GDI.372)
1807 BOOL16 WINAPI
ExtFloodFill16( HDC16 hdc
, INT16 x
, INT16 y
, COLORREF color
,
1810 return ExtFloodFill( HDC_32(hdc
), x
, y
, color
, fillType
);
1814 /***********************************************************************
1815 * SetSystemPaletteUse (GDI.373)
1817 UINT16 WINAPI
SetSystemPaletteUse16( HDC16 hdc
, UINT16 use
)
1819 return SetSystemPaletteUse( HDC_32(hdc
), use
);
1823 /***********************************************************************
1824 * GetSystemPaletteUse (GDI.374)
1826 UINT16 WINAPI
GetSystemPaletteUse16( HDC16 hdc
)
1828 return GetSystemPaletteUse( HDC_32(hdc
) );
1832 /***********************************************************************
1833 * GetSystemPaletteEntries (GDI.375)
1835 UINT16 WINAPI
GetSystemPaletteEntries16( HDC16 hdc
, UINT16 start
, UINT16 count
,
1836 LPPALETTEENTRY entries
)
1838 return GetSystemPaletteEntries( HDC_32(hdc
), start
, count
, entries
);
1842 /***********************************************************************
1845 HDC16 WINAPI
ResetDC16( HDC16 hdc
, const DEVMODEA
*devmode
)
1847 return HDC_16( ResetDCA(HDC_32(hdc
), devmode
) );
1851 /******************************************************************
1852 * StartDoc (GDI.377)
1854 INT16 WINAPI
StartDoc16( HDC16 hdc
, const DOCINFO16
*lpdoc
)
1858 docA
.cbSize
= lpdoc
->cbSize
;
1859 docA
.lpszDocName
= MapSL(lpdoc
->lpszDocName
);
1860 docA
.lpszOutput
= MapSL(lpdoc
->lpszOutput
);
1861 if(lpdoc
->cbSize
> offsetof(DOCINFO16
,lpszDatatype
))
1862 docA
.lpszDatatype
= MapSL(lpdoc
->lpszDatatype
);
1864 docA
.lpszDatatype
= NULL
;
1865 if(lpdoc
->cbSize
> offsetof(DOCINFO16
,fwType
))
1866 docA
.fwType
= lpdoc
->fwType
;
1869 return StartDocA( HDC_32(hdc
), &docA
);
1873 /******************************************************************
1876 INT16 WINAPI
EndDoc16( HDC16 hdc
)
1878 return EndDoc( HDC_32(hdc
) );
1882 /******************************************************************
1883 * StartPage (GDI.379)
1885 INT16 WINAPI
StartPage16( HDC16 hdc
)
1887 return StartPage( HDC_32(hdc
) );
1891 /******************************************************************
1894 INT16 WINAPI
EndPage16( HDC16 hdc
)
1896 return EndPage( HDC_32(hdc
) );
1900 /******************************************************************************
1901 * AbortDoc (GDI.382)
1903 INT16 WINAPI
AbortDoc16( HDC16 hdc
)
1905 return AbortDoc( HDC_32(hdc
) );
1909 /***********************************************************************
1910 * FastWindowFrame (GDI.400)
1912 BOOL16 WINAPI
FastWindowFrame16( HDC16 hdc
, const RECT16
*rect
,
1913 INT16 width
, INT16 height
, DWORD rop
)
1915 HDC hdc32
= HDC_32(hdc
);
1916 HBRUSH hbrush
= SelectObject( hdc32
, GetStockObject( GRAY_BRUSH
) );
1917 PatBlt( hdc32
, rect
->left
, rect
->top
,
1918 rect
->right
- rect
->left
- width
, height
, rop
);
1919 PatBlt( hdc32
, rect
->left
, rect
->top
+ height
, width
,
1920 rect
->bottom
- rect
->top
- height
, rop
);
1921 PatBlt( hdc32
, rect
->left
+ width
, rect
->bottom
- 1,
1922 rect
->right
- rect
->left
- width
, -height
, rop
);
1923 PatBlt( hdc32
, rect
->right
- 1, rect
->top
, -width
,
1924 rect
->bottom
- rect
->top
- height
, rop
);
1925 SelectObject( hdc32
, hbrush
);
1930 /***********************************************************************
1931 * CreateUserBitmap (GDI.407)
1933 HBITMAP16 WINAPI
CreateUserBitmap16( INT16 width
, INT16 height
, UINT16 planes
,
1934 UINT16 bpp
, LPCVOID bits
)
1936 return CreateBitmap16( width
, height
, planes
, bpp
, bits
);
1940 /***********************************************************************
1941 * CreateUserDiscardableBitmap (GDI.409)
1943 HBITMAP16 WINAPI
CreateUserDiscardableBitmap16( WORD dummy
, INT16 width
, INT16 height
)
1945 HDC hdc
= CreateDCA( "DISPLAY", NULL
, NULL
, NULL
);
1946 HBITMAP ret
= CreateCompatibleBitmap( hdc
, width
, height
);
1948 return HBITMAP_16(ret
);
1952 /***********************************************************************
1953 * GetCurLogFont (GDI.411)
1955 HFONT16 WINAPI
GetCurLogFont16( HDC16 hdc
)
1957 return HFONT_16( GetCurrentObject( HDC_32(hdc
), OBJ_FONT
) );
1961 /***********************************************************************
1962 * StretchDIBits (GDI.439)
1964 INT16 WINAPI
StretchDIBits16( HDC16 hdc
, INT16 xDst
, INT16 yDst
, INT16 widthDst
,
1965 INT16 heightDst
, INT16 xSrc
, INT16 ySrc
, INT16 widthSrc
,
1966 INT16 heightSrc
, const VOID
*bits
,
1967 const BITMAPINFO
*info
, UINT16 wUsage
, DWORD dwRop
)
1969 return StretchDIBits( HDC_32(hdc
), xDst
, yDst
, widthDst
, heightDst
,
1970 xSrc
, ySrc
, widthSrc
, heightSrc
, bits
,
1971 info
, wUsage
, dwRop
);
1975 /***********************************************************************
1976 * SetDIBits (GDI.440)
1978 INT16 WINAPI
SetDIBits16( HDC16 hdc
, HBITMAP16 hbitmap
, UINT16 startscan
,
1979 UINT16 lines
, LPCVOID bits
, const BITMAPINFO
*info
,
1982 return SetDIBits( HDC_32(hdc
), HBITMAP_32(hbitmap
), startscan
, lines
, bits
, info
, coloruse
);
1986 /***********************************************************************
1987 * GetDIBits (GDI.441)
1989 INT16 WINAPI
GetDIBits16( HDC16 hdc
, HBITMAP16 hbitmap
, UINT16 startscan
,
1990 UINT16 lines
, LPVOID bits
, BITMAPINFO
* info
,
1993 return GetDIBits( HDC_32(hdc
), HBITMAP_32(hbitmap
), startscan
, lines
, bits
, info
, coloruse
);
1997 /***********************************************************************
1998 * CreateDIBitmap (GDI.442)
2000 HBITMAP16 WINAPI
CreateDIBitmap16( HDC16 hdc
, const BITMAPINFOHEADER
* header
,
2001 DWORD init
, LPCVOID bits
, const BITMAPINFO
* data
,
2004 return HBITMAP_16( CreateDIBitmap( HDC_32(hdc
), header
, init
, bits
, data
, coloruse
) );
2008 /***********************************************************************
2009 * SetDIBitsToDevice (GDI.443)
2011 INT16 WINAPI
SetDIBitsToDevice16( HDC16 hdc
, INT16 xDest
, INT16 yDest
, INT16 cx
,
2012 INT16 cy
, INT16 xSrc
, INT16 ySrc
, UINT16 startscan
,
2013 UINT16 lines
, LPCVOID bits
, const BITMAPINFO
*info
,
2016 return SetDIBitsToDevice( HDC_32(hdc
), xDest
, yDest
, cx
, cy
, xSrc
, ySrc
,
2017 startscan
, lines
, bits
, info
, coloruse
);
2021 /***********************************************************************
2022 * CreateRoundRectRgn (GDI.444)
2024 * If either ellipse dimension is zero we call CreateRectRgn16 for its
2025 * `special' behaviour. -ve ellipse dimensions can result in GPFs under win3.1
2026 * we just let CreateRoundRectRgn convert them to +ve values.
2029 HRGN16 WINAPI
CreateRoundRectRgn16( INT16 left
, INT16 top
, INT16 right
, INT16 bottom
,
2030 INT16 ellipse_width
, INT16 ellipse_height
)
2032 if( ellipse_width
== 0 || ellipse_height
== 0 )
2033 return CreateRectRgn16( left
, top
, right
, bottom
);
2035 return HRGN_16( CreateRoundRectRgn( left
, top
, right
, bottom
,
2036 ellipse_width
, ellipse_height
));
2040 /***********************************************************************
2041 * CreateDIBPatternBrush (GDI.445)
2043 HBRUSH16 WINAPI
CreateDIBPatternBrush16( HGLOBAL16 hbitmap
, UINT16 coloruse
)
2048 if (!(bmi
= GlobalLock16( hbitmap
))) return 0;
2049 ret
= HBRUSH_16( CreateDIBPatternBrushPt( bmi
, coloruse
));
2050 GlobalUnlock16( hbitmap
);
2055 /**********************************************************************
2056 * PolyPolygon (GDI.450)
2058 BOOL16 WINAPI
PolyPolygon16( HDC16 hdc
, const POINT16
* pt
, const INT16
* counts
,
2067 for (i
=polygons
;i
--;)
2069 pt32
= (LPPOINT
)HeapAlloc( GetProcessHeap(), 0, sizeof(POINT
)*nrpts
);
2070 if(pt32
== NULL
) return FALSE
;
2072 CONV_POINT16TO32(&(pt
[i
]),&(pt32
[i
]));
2073 counts32
= (LPINT
)HeapAlloc( GetProcessHeap(), 0, polygons
*sizeof(INT
) );
2074 if(counts32
== NULL
) {
2075 HeapFree( GetProcessHeap(), 0, pt32
);
2078 for (i
=polygons
;i
--;) counts32
[i
]=counts
[i
];
2080 ret
= PolyPolygon(HDC_32(hdc
),pt32
,counts32
,polygons
);
2081 HeapFree( GetProcessHeap(), 0, counts32
);
2082 HeapFree( GetProcessHeap(), 0, pt32
);
2087 /***********************************************************************
2088 * CreatePolyPolygonRgn (GDI.451)
2090 HRGN16 WINAPI
CreatePolyPolygonRgn16( const POINT16
*points
,
2091 const INT16
*count
, INT16 nbpolygons
, INT16 mode
)
2098 for (i
= 0; i
< nbpolygons
; i
++) npts
+= count
[i
];
2099 points32
= HeapAlloc( GetProcessHeap(), 0, npts
* sizeof(POINT
) );
2100 for (i
= 0; i
< npts
; i
++) CONV_POINT16TO32( &(points
[i
]), &(points32
[i
]) );
2102 count32
= HeapAlloc( GetProcessHeap(), 0, nbpolygons
* sizeof(INT
) );
2103 for (i
= 0; i
< nbpolygons
; i
++) count32
[i
] = count
[i
];
2104 hrgn
= CreatePolyPolygonRgn( points32
, count32
, nbpolygons
, mode
);
2105 HeapFree( GetProcessHeap(), 0, count32
);
2106 HeapFree( GetProcessHeap(), 0, points32
);
2107 return HRGN_16(hrgn
);
2111 /***********************************************************************
2112 * SetObjectOwner (GDI.461)
2114 void WINAPI
SetObjectOwner16( HGDIOBJ16 handle
, HANDLE16 owner
)
2120 /***********************************************************************
2121 * RectVisible (GDI.465)
2122 * RectVisibleOld (GDI.104)
2124 BOOL16 WINAPI
RectVisible16( HDC16 hdc
, const RECT16
* rect16
)
2127 CONV_RECT16TO32( rect16
, &rect
);
2128 return RectVisible( HDC_32(hdc
), &rect
);
2132 /***********************************************************************
2133 * RectInRegion (GDI.466)
2134 * RectInRegionOld (GDI.181)
2136 BOOL16 WINAPI
RectInRegion16( HRGN16 hrgn
, const RECT16
*rect
)
2140 CONV_RECT16TO32(rect
, &r32
);
2141 return RectInRegion( HRGN_32(hrgn
), &r32
);
2145 /***********************************************************************
2146 * GetBitmapDimensionEx (GDI.468)
2148 BOOL16 WINAPI
GetBitmapDimensionEx16( HBITMAP16 hbitmap
, LPSIZE16 size
)
2151 BOOL ret
= GetBitmapDimensionEx( HBITMAP_32(hbitmap
), &size32
);
2155 size
->cx
= size32
.cx
;
2156 size
->cy
= size32
.cy
;
2162 /***********************************************************************
2163 * GetBrushOrgEx (GDI.469)
2165 BOOL16 WINAPI
GetBrushOrgEx16( HDC16 hdc
, LPPOINT16 pt
)
2168 if (!GetBrushOrgEx( HDC_32(hdc
), &pt32
)) return FALSE
;
2175 /***********************************************************************
2176 * GetCurrentPositionEx (GDI.470)
2178 BOOL16 WINAPI
GetCurrentPositionEx16( HDC16 hdc
, LPPOINT16 pt
)
2181 if (!GetCurrentPositionEx( HDC_32(hdc
), &pt32
)) return FALSE
;
2188 /***********************************************************************
2189 * GetTextExtentPoint (GDI.471)
2191 * FIXME: Should this have a bug for compatibility?
2192 * Original Windows versions of GetTextExtentPoint{A,W} have documented
2193 * bugs (-> MSDN KB q147647.txt).
2195 BOOL16 WINAPI
GetTextExtentPoint16( HDC16 hdc
, LPCSTR str
, INT16 count
, LPSIZE16 size
)
2198 BOOL ret
= GetTextExtentPoint32A( HDC_32(hdc
), str
, count
, &size32
);
2202 size
->cx
= size32
.cx
;
2203 size
->cy
= size32
.cy
;
2209 /***********************************************************************
2210 * GetViewportExtEx (GDI.472)
2212 BOOL16 WINAPI
GetViewportExtEx16( HDC16 hdc
, LPSIZE16 size
)
2215 if (!GetViewportExtEx( HDC_32(hdc
), &size32
)) return FALSE
;
2216 size
->cx
= size32
.cx
;
2217 size
->cy
= size32
.cy
;
2222 /***********************************************************************
2223 * GetViewportOrgEx (GDI.473)
2225 BOOL16 WINAPI
GetViewportOrgEx16( HDC16 hdc
, LPPOINT16 pt
)
2228 if (!GetViewportOrgEx( HDC_32(hdc
), &pt32
)) return FALSE
;
2235 /***********************************************************************
2236 * GetWindowExtEx (GDI.474)
2238 BOOL16 WINAPI
GetWindowExtEx16( HDC16 hdc
, LPSIZE16 size
)
2241 if (!GetWindowExtEx( HDC_32(hdc
), &size32
)) return FALSE
;
2242 size
->cx
= size32
.cx
;
2243 size
->cy
= size32
.cy
;
2248 /***********************************************************************
2249 * GetWindowOrgEx (GDI.475)
2251 BOOL16 WINAPI
GetWindowOrgEx16( HDC16 hdc
, LPPOINT16 pt
)
2254 if (!GetWindowOrgEx( HDC_32(hdc
), &pt32
)) return FALSE
;
2261 /***********************************************************************
2262 * OffsetViewportOrgEx (GDI.476)
2264 BOOL16 WINAPI
OffsetViewportOrgEx16( HDC16 hdc
, INT16 x
, INT16 y
, LPPOINT16 pt
)
2267 BOOL16 ret
= OffsetViewportOrgEx( HDC_32(hdc
), x
, y
, &pt32
);
2268 if (pt
) CONV_POINT32TO16( &pt32
, pt
);
2273 /***********************************************************************
2274 * OffsetWindowOrgEx (GDI.477)
2276 BOOL16 WINAPI
OffsetWindowOrgEx16( HDC16 hdc
, INT16 x
, INT16 y
, LPPOINT16 pt
)
2279 BOOL16 ret
= OffsetWindowOrgEx( HDC_32(hdc
), x
, y
, &pt32
);
2280 if (pt
) CONV_POINT32TO16( &pt32
, pt
);
2285 /***********************************************************************
2286 * SetBitmapDimensionEx (GDI.478)
2288 BOOL16 WINAPI
SetBitmapDimensionEx16( HBITMAP16 hbitmap
, INT16 x
, INT16 y
, LPSIZE16 prevSize
)
2291 BOOL ret
= SetBitmapDimensionEx( HBITMAP_32(hbitmap
), x
, y
, &size32
);
2293 if (ret
&& prevSize
)
2295 prevSize
->cx
= size32
.cx
;
2296 prevSize
->cy
= size32
.cy
;
2302 /***********************************************************************
2303 * SetViewportExtEx (GDI.479)
2305 BOOL16 WINAPI
SetViewportExtEx16( HDC16 hdc
, INT16 x
, INT16 y
, LPSIZE16 size
)
2308 BOOL16 ret
= SetViewportExtEx( HDC_32(hdc
), x
, y
, &size32
);
2309 if (size
) { size
->cx
= size32
.cx
; size
->cy
= size32
.cy
; }
2314 /***********************************************************************
2315 * SetViewportOrgEx (GDI.480)
2317 BOOL16 WINAPI
SetViewportOrgEx16( HDC16 hdc
, INT16 x
, INT16 y
, LPPOINT16 pt
)
2320 BOOL16 ret
= SetViewportOrgEx( HDC_32(hdc
), x
, y
, &pt32
);
2321 if (pt
) CONV_POINT32TO16( &pt32
, pt
);
2326 /***********************************************************************
2327 * SetWindowExtEx (GDI.481)
2329 BOOL16 WINAPI
SetWindowExtEx16( HDC16 hdc
, INT16 x
, INT16 y
, LPSIZE16 size
)
2332 BOOL16 ret
= SetWindowExtEx( HDC_32(hdc
), x
, y
, &size32
);
2333 if (size
) { size
->cx
= size32
.cx
; size
->cy
= size32
.cy
; }
2338 /***********************************************************************
2339 * SetWindowOrgEx (GDI.482)
2341 BOOL16 WINAPI
SetWindowOrgEx16( HDC16 hdc
, INT16 x
, INT16 y
, LPPOINT16 pt
)
2344 BOOL16 ret
= SetWindowOrgEx( HDC_32(hdc
), x
, y
, &pt32
);
2345 if (pt
) CONV_POINT32TO16( &pt32
, pt
);
2350 /***********************************************************************
2351 * MoveToEx (GDI.483)
2353 BOOL16 WINAPI
MoveToEx16( HDC16 hdc
, INT16 x
, INT16 y
, LPPOINT16 pt
)
2357 if (!MoveToEx( HDC_32(hdc
), x
, y
, &pt32
)) return FALSE
;
2358 if (pt
) CONV_POINT32TO16( &pt32
, pt
);
2363 /***********************************************************************
2364 * ScaleViewportExtEx (GDI.484)
2366 BOOL16 WINAPI
ScaleViewportExtEx16( HDC16 hdc
, INT16 xNum
, INT16 xDenom
,
2367 INT16 yNum
, INT16 yDenom
, LPSIZE16 size
)
2370 BOOL16 ret
= ScaleViewportExtEx( HDC_32(hdc
), xNum
, xDenom
, yNum
, yDenom
,
2372 if (size
) { size
->cx
= size32
.cx
; size
->cy
= size32
.cy
; }
2377 /***********************************************************************
2378 * ScaleWindowExtEx (GDI.485)
2380 BOOL16 WINAPI
ScaleWindowExtEx16( HDC16 hdc
, INT16 xNum
, INT16 xDenom
,
2381 INT16 yNum
, INT16 yDenom
, LPSIZE16 size
)
2384 BOOL16 ret
= ScaleWindowExtEx( HDC_32(hdc
), xNum
, xDenom
, yNum
, yDenom
,
2386 if (size
) { size
->cx
= size32
.cx
; size
->cy
= size32
.cy
; }
2391 /******************************************************************************
2392 * PolyBezier (GDI.502)
2394 BOOL16 WINAPI
PolyBezier16( HDC16 hdc
, const POINT16
* lppt
, INT16 cPoints
)
2398 LPPOINT pt32
= (LPPOINT
)HeapAlloc( GetProcessHeap(), 0,
2399 cPoints
*sizeof(POINT
) );
2400 if(!pt32
) return FALSE
;
2401 for (i
=cPoints
;i
--;) CONV_POINT16TO32(&(lppt
[i
]),&(pt32
[i
]));
2402 ret
= PolyBezier(HDC_32(hdc
), pt32
, cPoints
);
2403 HeapFree( GetProcessHeap(), 0, pt32
);
2408 /******************************************************************************
2409 * PolyBezierTo (GDI.503)
2411 BOOL16 WINAPI
PolyBezierTo16( HDC16 hdc
, const POINT16
* lppt
, INT16 cPoints
)
2415 LPPOINT pt32
= (LPPOINT
)HeapAlloc( GetProcessHeap(), 0,
2416 cPoints
*sizeof(POINT
) );
2417 if(!pt32
) return FALSE
;
2418 for (i
=cPoints
;i
--;) CONV_POINT16TO32(&(lppt
[i
]),&(pt32
[i
]));
2419 ret
= PolyBezierTo(HDC_32(hdc
), pt32
, cPoints
);
2420 HeapFree( GetProcessHeap(), 0, pt32
);
2425 /******************************************************************************
2426 * ExtSelectClipRgn (GDI.508)
2428 INT16 WINAPI
ExtSelectClipRgn16( HDC16 hdc
, HRGN16 hrgn
, INT16 fnMode
)
2430 return ExtSelectClipRgn( HDC_32(hdc
), HRGN_32(hrgn
), fnMode
);
2434 /***********************************************************************
2435 * AbortPath (GDI.511)
2437 BOOL16 WINAPI
AbortPath16(HDC16 hdc
)
2439 return AbortPath( HDC_32(hdc
) );
2443 /***********************************************************************
2444 * BeginPath (GDI.512)
2446 BOOL16 WINAPI
BeginPath16(HDC16 hdc
)
2448 return BeginPath( HDC_32(hdc
) );
2452 /***********************************************************************
2453 * CloseFigure (GDI.513)
2455 BOOL16 WINAPI
CloseFigure16(HDC16 hdc
)
2457 return CloseFigure( HDC_32(hdc
) );
2461 /***********************************************************************
2464 BOOL16 WINAPI
EndPath16(HDC16 hdc
)
2466 return EndPath( HDC_32(hdc
) );
2470 /***********************************************************************
2471 * FillPath (GDI.515)
2473 BOOL16 WINAPI
FillPath16(HDC16 hdc
)
2475 return FillPath( HDC_32(hdc
) );
2479 /*******************************************************************
2480 * FlattenPath (GDI.516)
2482 BOOL16 WINAPI
FlattenPath16(HDC16 hdc
)
2484 return FlattenPath( HDC_32(hdc
) );
2488 /***********************************************************************
2491 INT16 WINAPI
GetPath16(HDC16 hdc
, LPPOINT16 pPoints
, LPBYTE pTypes
, INT16 nSize
)
2493 FIXME("(%d,%p,%p): stub\n",hdc
,pPoints
,pTypes
);
2498 /***********************************************************************
2499 * PathToRegion (GDI.518)
2501 HRGN16 WINAPI
PathToRegion16(HDC16 hdc
)
2503 return HRGN_16( PathToRegion( HDC_32(hdc
) ));
2507 /***********************************************************************
2508 * SelectClipPath (GDI.519)
2510 BOOL16 WINAPI
SelectClipPath16(HDC16 hdc
, INT16 iMode
)
2512 return SelectClipPath( HDC_32(hdc
), iMode
);
2516 /*******************************************************************
2517 * StrokeAndFillPath (GDI.520)
2519 BOOL16 WINAPI
StrokeAndFillPath16(HDC16 hdc
)
2521 return StrokeAndFillPath( HDC_32(hdc
) );
2525 /*******************************************************************
2526 * StrokePath (GDI.521)
2528 BOOL16 WINAPI
StrokePath16(HDC16 hdc
)
2530 return StrokePath( HDC_32(hdc
) );
2534 /*******************************************************************
2535 * WidenPath (GDI.522)
2537 BOOL16 WINAPI
WidenPath16(HDC16 hdc
)
2539 return WidenPath( HDC_32(hdc
) );
2543 /***********************************************************************
2544 * GetArcDirection (GDI.524)
2546 INT16 WINAPI
GetArcDirection16( HDC16 hdc
)
2548 return GetArcDirection( HDC_32(hdc
) );
2552 /***********************************************************************
2553 * SetArcDirection (GDI.525)
2555 INT16 WINAPI
SetArcDirection16( HDC16 hdc
, INT16 nDirection
)
2557 return SetArcDirection( HDC_32(hdc
), (INT
)nDirection
);
2561 /***********************************************************************
2562 * CreateHalftonePalette (GDI.529)
2564 HPALETTE16 WINAPI
CreateHalftonePalette16( HDC16 hdc
)
2566 return HPALETTE_16( CreateHalftonePalette( HDC_32(hdc
) ));
2570 /***********************************************************************
2571 * SetDIBColorTable (GDI.602)
2573 UINT16 WINAPI
SetDIBColorTable16( HDC16 hdc
, UINT16 startpos
, UINT16 entries
, RGBQUAD
*colors
)
2575 return SetDIBColorTable( HDC_32(hdc
), startpos
, entries
, colors
);
2579 /***********************************************************************
2580 * GetDIBColorTable (GDI.603)
2582 UINT16 WINAPI
GetDIBColorTable16( HDC16 hdc
, UINT16 startpos
, UINT16 entries
, RGBQUAD
*colors
)
2584 return GetDIBColorTable( HDC_32(hdc
), startpos
, entries
, colors
);
2588 /***********************************************************************
2589 * GetRegionData (GDI.607)
2591 * FIXME: is LPRGNDATA the same in Win16 and Win32 ?
2593 DWORD WINAPI
GetRegionData16( HRGN16 hrgn
, DWORD count
, LPRGNDATA rgndata
)
2595 return GetRegionData( HRGN_32(hrgn
), count
, rgndata
);
2599 /***********************************************************************
2600 * GetTextCharset (GDI.612)
2602 UINT16 WINAPI
GetTextCharset16( HDC16 hdc
)
2604 return GetTextCharset( HDC_32(hdc
) );
2608 /*************************************************************************
2609 * GetFontLanguageInfo (GDI.616)
2611 DWORD WINAPI
GetFontLanguageInfo16( HDC16 hdc
)
2613 return GetFontLanguageInfo( HDC_32(hdc
) );
2617 /***********************************************************************
2618 * SetLayout (GDI.1000)
2620 * Sets left->right or right->left text layout flags of a dc.
2622 BOOL16 WINAPI
SetLayout16( HDC16 hdc
, DWORD layout
)
2624 return SetLayout( HDC_32(hdc
), layout
);