2 * DC device-independent Get/SetXXX functions
4 * Copyright 1993 Alexandre Julliard
11 #define DC_GET_VAL_16( func_type, func_name, dc_field ) \
12 func_type WINAPI func_name( HDC16 hdc ) \
14 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
16 return dc->dc_field; \
19 #define DC_GET_VAL_32( func_type, func_name, dc_field ) \
20 func_type WINAPI func_name( HDC hdc ) \
22 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
24 return dc->dc_field; \
27 #define DC_GET_X_Y( func_type, func_name, ret_x, ret_y ) \
28 func_type WINAPI func_name( HDC16 hdc ) \
30 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
32 return MAKELONG( dc->ret_x, dc->ret_y ); \
35 /* DC_GET_VAL_EX is used to define functions returning a POINT or a SIZE. It is
36 * important that the function has the right signature, for the implementation
37 * we can do whatever we want.
39 #define DC_GET_VAL_EX( func_name, ret_x, ret_y, type ) \
40 BOOL16 WINAPI func_name##16( HDC16 hdc, LP##type##16 pt ) \
42 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
43 if (!dc) return FALSE; \
44 ((LPPOINT16)pt)->x = dc->ret_x; \
45 ((LPPOINT16)pt)->y = dc->ret_y; \
49 BOOL WINAPI func_name( HDC hdc, LP##type pt ) \
51 DC * dc = (DC *) GDI_GetObjPtr( (HDC16)hdc, DC_MAGIC ); \
52 if (!dc) return FALSE; \
53 ((LPPOINT)pt)->x = dc->ret_x; \
54 ((LPPOINT)pt)->y = dc->ret_y; \
58 #define DC_SET_MODE( func_name, dc_field, min_val, max_val ) \
59 INT16 WINAPI func_name##16( HDC16 hdc, INT16 mode ) \
61 return func_name( hdc, mode ); \
64 INT WINAPI func_name( HDC hdc, INT mode ) \
67 DC *dc = DC_GetDCPtr( hdc ); \
69 if ((mode < min_val) || (mode > max_val)) return 0; \
70 if (dc->funcs->p##func_name) { \
71 prevMode = dc->funcs->p##func_name( dc, mode ); \
73 prevMode = dc->dc_field; \
74 dc->dc_field = mode; \
76 GDI_HEAP_UNLOCK( hdc ); \
83 DC_SET_MODE( SetBkMode
, w
.backgroundMode
, TRANSPARENT
, OPAQUE
)
86 DC_SET_MODE( SetROP2
, w
.ROPmode
, R2_BLACK
, R2_WHITE
)
89 DC_SET_MODE( SetRelAbs
, w
.relAbsMode
, ABSOLUTE
, RELATIVE
)
92 DC_SET_MODE( SetPolyFillMode
, w
.polyFillMode
, ALTERNATE
, WINDING
)
95 DC_SET_MODE( SetStretchBltMode
, w
.stretchBltMode
, BLACKONWHITE
, HALFTONE
)
97 DC_GET_VAL_16( COLORREF
, GetBkColor16
, w
.backgroundColor
) /* GDI.75 */
98 DC_GET_VAL_32( COLORREF
, GetBkColor
, w
.backgroundColor
) /* GDI32.145 */
99 DC_GET_VAL_16( INT16
, GetBkMode16
, w
.backgroundMode
) /* GDI.76 */
100 DC_GET_VAL_32( INT
, GetBkMode
, w
.backgroundMode
) /* GDI32.146 */
101 DC_GET_X_Y( DWORD
, GetCurrentPosition16
, w
.CursPosX
, w
.CursPosY
) /* GDI.78 */
102 DC_GET_VAL_16( INT16
, GetMapMode16
, w
.MapMode
) /* GDI.81 */
103 DC_GET_VAL_32( INT
, GetMapMode
, w
.MapMode
) /* GDI32.196 */
104 DC_GET_VAL_16( INT16
, GetPolyFillMode16
, w
.polyFillMode
) /* GDI.84 */
105 DC_GET_VAL_32( INT
, GetPolyFillMode
, w
.polyFillMode
) /* GDI32.213 */
106 DC_GET_VAL_16( INT16
, GetROP216
, w
.ROPmode
) /* GDI.85 */
107 DC_GET_VAL_32( INT
, GetROP2
, w
.ROPmode
) /* GDI32.214 */
108 DC_GET_VAL_16( INT16
, GetRelAbs16
, w
.relAbsMode
) /* GDI.86 */
109 DC_GET_VAL_32( INT
, GetRelAbs
, w
.relAbsMode
) /* GDI32.218 */
110 DC_GET_VAL_16( INT16
, GetStretchBltMode16
, w
.stretchBltMode
) /* GDI.88 */
111 DC_GET_VAL_32( INT
, GetStretchBltMode
, w
.stretchBltMode
) /* GDI32.221 */
112 DC_GET_VAL_16( COLORREF
, GetTextColor16
, w
.textColor
) /* GDI.90 */
113 DC_GET_VAL_32( COLORREF
, GetTextColor
, w
.textColor
) /* GDI32.227 */
114 DC_GET_X_Y( DWORD
, GetViewportExt16
, vportExtX
, vportExtY
) /* GDI.94 */
115 DC_GET_X_Y( DWORD
, GetViewportOrg16
, vportOrgX
, vportOrgY
) /* GDI.95 */
116 DC_GET_X_Y( DWORD
, GetWindowExt16
, wndExtX
, wndExtY
) /* GDI.96 */
117 DC_GET_X_Y( DWORD
, GetWindowOrg16
, wndOrgX
, wndOrgY
) /* GDI.97 */
118 DC_GET_VAL_16( HRGN16
, InquireVisRgn16
, w
.hVisRgn
) /* GDI.131 */
119 DC_GET_VAL_16( HRGN16
, GetClipRgn16
, w
.hClipRgn
) /* GDI.173 */
120 DC_GET_X_Y( DWORD
, GetBrushOrg16
, w
.brushOrgX
, w
.brushOrgY
) /* GDI.149 */
121 DC_GET_VAL_16( UINT16
, GetTextAlign16
, w
.textAlign
) /* GDI.345 */
122 DC_GET_VAL_32( UINT
, GetTextAlign
, w
.textAlign
) /* GDI32.224 */
123 DC_GET_VAL_16( HFONT16
, GetCurLogFont16
, w
.hFont
) /* GDI.411 */
124 DC_GET_VAL_EX( GetBrushOrgEx
, w
.brushOrgX
, w
.brushOrgY
, POINT
) /* GDI.469 GDI32.148 */
125 DC_GET_VAL_EX( GetCurrentPositionEx
, w
.CursPosX
, w
.CursPosY
, /* GDI.470 GDI32.167 */
127 DC_GET_VAL_EX( GetViewportExtEx
, vportExtX
, vportExtY
, SIZE
) /* GDI.472 GDI32.239 */
128 DC_GET_VAL_EX( GetViewportOrgEx
, vportOrgX
, vportOrgY
, POINT
) /* GDI.473 GDI32.240 */
129 DC_GET_VAL_EX( GetWindowExtEx
, wndExtX
, wndExtY
, SIZE
) /* GDI.474 GDI32.242 */
130 DC_GET_VAL_EX( GetWindowOrgEx
, wndOrgX
, wndOrgY
, POINT
) /* GDI.475 GDI32.243 */