Release 961222
[wine/multimedia.git] / objects / dcvalues.c
blobb90b484ab56eed48e6f768406229bca251f31d27
1 /*
2 * DC device-independent Get/SetXXX functions
4 * Copyright 1993 Alexandre Julliard
6 */
8 #define NO_TRANSITION_TYPES /* This file is Win32-clean */
9 #include "gdi.h"
10 #include "metafile.h"
13 #define DC_GET_VAL_16( func_type, func_name, dc_field ) \
14 func_type func_name( HDC16 hdc ) \
15 { \
16 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
17 if (!dc) return 0; \
18 return dc->dc_field; \
21 #define DC_GET_VAL_32( func_type, func_name, dc_field ) \
22 func_type func_name( HDC32 hdc ) \
23 { \
24 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
25 if (!dc) return 0; \
26 return dc->dc_field; \
29 #define DC_GET_X_Y( func_type, func_name, ret_x, ret_y ) \
30 func_type func_name( HDC16 hdc ) \
31 { \
32 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
33 if (!dc) return 0; \
34 return MAKELONG( dc->ret_x, dc->ret_y ); \
37 #define DC_GET_VAL_EX( func_name, ret_x, ret_y ) \
38 BOOL16 func_name##16( HDC16 hdc, LPPOINT16 pt ) \
39 { \
40 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
41 if (!dc) return FALSE; \
42 pt->x = dc->ret_x; \
43 pt->y = dc->ret_y; \
44 return TRUE; \
45 } \
47 BOOL32 func_name##32( HDC32 hdc, LPPOINT32 pt ) \
48 { \
49 DC * dc = (DC *) GDI_GetObjPtr( (HDC16)hdc, DC_MAGIC ); \
50 if (!dc) return FALSE; \
51 pt->x = dc->ret_x; \
52 pt->y = dc->ret_y; \
53 return TRUE; \
56 #define DC_SET_MODE_16( func_name, dc_field, min_val, max_val, meta_func ) \
57 INT16 func_name( HDC16 hdc, INT16 mode ) \
58 { \
59 INT16 prevMode; \
60 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
61 if ((mode < min_val) || (mode > max_val)) return 0; \
62 if (!dc) { \
63 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC); \
64 if (!dc) return 0; \
65 MF_MetaParam1(dc, meta_func, mode); \
66 return 1; \
67 } \
68 prevMode = dc->dc_field; \
69 dc->dc_field = mode; \
70 return prevMode; \
73 #define DC_SET_MODE_32( func_name, dc_field, min_val, max_val, meta_func ) \
74 INT32 func_name( HDC32 hdc, INT32 mode ) \
75 { \
76 INT32 prevMode; \
77 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
78 if ((mode < min_val) || (mode > max_val)) return 0; \
79 if (!dc) { \
80 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC); \
81 if (!dc) return 0; \
82 MF_MetaParam1(dc, meta_func, mode); \
83 return 1; \
84 } \
85 prevMode = dc->dc_field; \
86 dc->dc_field = mode; \
87 return prevMode; \
91 DC_SET_MODE_16( SetBkMode16, w.backgroundMode, TRANSPARENT, /* GDI.2 */
92 OPAQUE, META_SETBKMODE )
93 DC_SET_MODE_32( SetBkMode32, w.backgroundMode, TRANSPARENT, /* GDI32.306 */
94 OPAQUE, META_SETBKMODE )
95 DC_SET_MODE_16( SetROP216, w.ROPmode, R2_BLACK, R2_WHITE, /* GDI.4 */
96 META_SETROP2 )
97 DC_SET_MODE_32( SetROP232, w.ROPmode, R2_BLACK, R2_WHITE, /* GDI32.331 */
98 META_SETROP2 )
99 DC_SET_MODE_16( SetRelAbs16, w.relAbsMode, ABSOLUTE, RELATIVE, /* GDI.5 */
100 META_SETRELABS )
101 DC_SET_MODE_32( SetRelAbs32, w.relAbsMode, ABSOLUTE, RELATIVE, /* GDI32.333 */
102 META_SETRELABS )
103 DC_SET_MODE_16( SetPolyFillMode16, w.polyFillMode, /* GDI.6 */
104 ALTERNATE, WINDING, META_SETPOLYFILLMODE )
105 DC_SET_MODE_32( SetPolyFillMode32, w.polyFillMode, /* GDI32.330 */
106 ALTERNATE, WINDING, META_SETPOLYFILLMODE )
107 DC_SET_MODE_16( SetStretchBltMode16, w.stretchBltMode, /* GDI.7 */
108 BLACKONWHITE, COLORONCOLOR, META_SETSTRETCHBLTMODE )
109 DC_SET_MODE_32( SetStretchBltMode32, w.stretchBltMode, /* GDI32.334 */
110 BLACKONWHITE, COLORONCOLOR, META_SETSTRETCHBLTMODE )
111 DC_GET_VAL_16( COLORREF, GetBkColor16, w.backgroundColor ) /* GDI.75 */
112 DC_GET_VAL_32( COLORREF, GetBkColor32, w.backgroundColor ) /* GDI32.145 */
113 DC_GET_VAL_16( INT16, GetBkMode16, w.backgroundMode ) /* GDI.76 */
114 DC_GET_VAL_32( INT32, GetBkMode32, w.backgroundMode ) /* GDI32.146 */
115 DC_GET_X_Y( DWORD, GetCurrentPosition, w.CursPosX, w.CursPosY ) /* GDI.78 */
116 DC_GET_VAL_16( INT16, GetMapMode16, w.MapMode ) /* GDI.81 */
117 DC_GET_VAL_32( INT32, GetMapMode32, w.MapMode ) /* GDI32.196 */
118 DC_GET_VAL_16( INT16, GetPolyFillMode16, w.polyFillMode ) /* GDI.84 */
119 DC_GET_VAL_32( INT32, GetPolyFillMode32, w.polyFillMode ) /* GDI32.213 */
120 DC_GET_VAL_16( INT16, GetROP216, w.ROPmode ) /* GDI.85 */
121 DC_GET_VAL_32( INT32, GetROP232, w.ROPmode ) /* GDI32.214 */
122 DC_GET_VAL_16( INT16, GetRelAbs16, w.relAbsMode ) /* GDI.86 */
123 DC_GET_VAL_32( INT32, GetRelAbs32, w.relAbsMode ) /* GDI32.218 */
124 DC_GET_VAL_16( INT16, GetStretchBltMode16, w.stretchBltMode ) /* GDI.88 */
125 DC_GET_VAL_32( INT32, GetStretchBltMode32, w.stretchBltMode ) /* GDI32.221 */
126 DC_GET_VAL_16( COLORREF, GetTextColor16, w.textColor ) /* GDI.90 */
127 DC_GET_VAL_32( COLORREF, GetTextColor32, w.textColor ) /* GDI32.227 */
128 DC_GET_X_Y( DWORD, GetViewportExt, vportExtX, vportExtY ) /* GDI.94 */
129 DC_GET_X_Y( DWORD, GetViewportOrg, vportOrgX, vportOrgY ) /* GDI.95 */
130 DC_GET_X_Y( DWORD, GetWindowExt, wndExtX, wndExtY ) /* GDI.96 */
131 DC_GET_X_Y( DWORD, GetWindowOrg, wndOrgX, wndOrgY ) /* GDI.97 */
132 DC_GET_VAL_16( HRGN16, InquireVisRgn, w.hVisRgn ) /* GDI.131 */
133 DC_GET_X_Y( DWORD, GetBrushOrg, w.brushOrgX, w.brushOrgY ) /* GDI.149 */
134 DC_GET_VAL_16( UINT16, GetTextAlign16, w.textAlign ) /* GDI.345 */
135 DC_GET_VAL_32( UINT32, GetTextAlign32, w.textAlign ) /* GDI32.224 */
136 DC_GET_VAL_16( HFONT16, GetCurLogFont, w.hFont ) /* GDI.411 */
137 DC_GET_VAL_EX( GetBrushOrgEx, w.brushOrgX, w.brushOrgY )/* GDI.469 GDI32.148 */
138 DC_GET_VAL_EX( GetCurrentPositionEx, w.CursPosX, /* GDI.470 GDI32.167 */
139 w.CursPosY )
140 DC_GET_VAL_EX( GetViewportExtEx, vportExtX, vportExtY ) /* GDI.472 GDI32.239 */
141 DC_GET_VAL_EX( GetViewportOrgEx, vportOrgX, vportOrgY ) /* GDI.473 GDI32.240 */
142 DC_GET_VAL_EX( GetWindowExtEx, wndExtX, wndExtY ) /* GDI.474 GDI32.242 */
143 DC_GET_VAL_EX( GetWindowOrgEx, wndOrgX, wndOrgY ) /* GDI.475 GDI32.243 */
145 /* this one is wrong - Windows returns region that
146 is relative to the device and not to the DC origin */
148 DC_GET_VAL_16( HRGN16, GetClipRgn16, w.hClipRgn ) /* GDI.173 */