Fixed documentation.
[wine] / objects / dcvalues.c
1 /*
2  * DC device-independent Get/SetXXX functions
3  *
4  * Copyright 1993 Alexandre Julliard
5  *
6  */
7
8 #include "gdi.h"
9 #include "dc.h"
10
11 #define DC_GET_VAL_16( func_type, func_name, dc_field ) \
12 func_type WINAPI func_name( HDC16 hdc ) \
13 { \
14     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
15     if (!dc) return 0; \
16     return dc->dc_field; \
17 }
18
19 #define DC_GET_VAL_32( func_type, func_name, dc_field ) \
20 func_type WINAPI func_name( HDC hdc ) \
21 { \
22     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
23     if (!dc) return 0; \
24     return dc->dc_field; \
25 }
26
27 #define DC_GET_X_Y( func_type, func_name, ret_x, ret_y ) \
28 func_type WINAPI func_name( HDC16 hdc ) \
29 { \
30     DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
31     if (!dc) return 0; \
32     return MAKELONG( dc->ret_x, dc->ret_y ); \
33 }
34
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.
38  */
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 ) \
41 { \
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; \
46     return TRUE; \
47 } \
48  \
49 BOOL WINAPI func_name( HDC hdc, LP##type pt ) \
50 { \
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; \
55     return TRUE; \
56 }
57
58 #define DC_SET_MODE( func_name, dc_field, min_val, max_val ) \
59 INT16 WINAPI func_name##16( HDC16 hdc, INT16 mode ) \
60 { \
61     return func_name( hdc, mode ); \
62 } \
63  \
64 INT WINAPI func_name( HDC hdc, INT mode ) \
65 { \
66     INT prevMode; \
67     DC *dc = DC_GetDCPtr( hdc ); \
68     if(!dc) return 0; \
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 ); \
72     } else { \
73         prevMode = dc->dc_field; \
74         dc->dc_field = mode; \
75     } \
76     GDI_HEAP_UNLOCK( hdc ); \
77     return prevMode; \
78 }
79
80 /***********************************************************************
81  *              SetBkMode               (GDI.2) (GDI32.306)
82  *
83  */
84 DC_SET_MODE( SetBkMode, w.backgroundMode, TRANSPARENT, OPAQUE ) 
85
86 /***********************************************************************
87  *              SetROP2                 (GDI.4) (GDI32.331)
88  */
89 DC_SET_MODE( SetROP2, w.ROPmode, R2_BLACK, R2_WHITE )
90
91 /***********************************************************************
92  *              SetRelAbs               (GDI.5) (GDI32.333)
93  */
94 DC_SET_MODE( SetRelAbs, w.relAbsMode, ABSOLUTE, RELATIVE )
95
96 /***********************************************************************
97  *              SetPolyFillMode         (GDI.6) (GDI32.330)
98  */
99 DC_SET_MODE( SetPolyFillMode, w.polyFillMode, ALTERNATE, WINDING )
100
101 /***********************************************************************
102  *              SetStretchBltMode       (GDI.7) (GDI32.334)
103  */
104 DC_SET_MODE( SetStretchBltMode, w.stretchBltMode, BLACKONWHITE, HALFTONE )
105
106 /***********************************************************************
107  *              GetBkColor16            (GDI.75)
108  */
109 DC_GET_VAL_16( COLORREF, GetBkColor16, w.backgroundColor )
110
111 /***********************************************************************
112  *              GetBkColor              (GDI32.145)
113  */
114 DC_GET_VAL_32( COLORREF, GetBkColor, w.backgroundColor )
115
116 /***********************************************************************
117  *              GetBkMode16             (GDI.76)
118  */
119 DC_GET_VAL_16( INT16, GetBkMode16, w.backgroundMode )
120
121 /***********************************************************************
122  *              GetBkMode               (GDI32.146)
123  */
124 DC_GET_VAL_32( INT, GetBkMode, w.backgroundMode )
125
126 /***********************************************************************
127  *              GetCurrentPosition16    (GDI.78)
128  */
129 DC_GET_X_Y( DWORD, GetCurrentPosition16, w.CursPosX, w.CursPosY )
130
131 /***********************************************************************
132  *              GetMapMode16            (GDI.81)
133  */
134 DC_GET_VAL_16( INT16, GetMapMode16, w.MapMode )
135
136 /***********************************************************************
137  *              GetMapMode              (GDI32.196)
138  */
139 DC_GET_VAL_32( INT, GetMapMode, w.MapMode )
140
141 /***********************************************************************
142  *              GetPolyFillMode16       (GDI.84)
143  */
144 DC_GET_VAL_16( INT16, GetPolyFillMode16, w.polyFillMode )
145
146 /***********************************************************************
147  *              GetPolyFillMode         (GDI32.213)
148  */
149 DC_GET_VAL_32( INT, GetPolyFillMode, w.polyFillMode )
150
151 /***********************************************************************
152  *              GetROP216               (GDI.85)
153  */
154 DC_GET_VAL_16( INT16, GetROP216, w.ROPmode )
155
156 /***********************************************************************
157  *              GetROP2                 (GDI32.214)
158  */
159 DC_GET_VAL_32( INT, GetROP2, w.ROPmode )
160
161 /***********************************************************************
162  *              GetRelAbs16             (GDI.86)
163  */
164 DC_GET_VAL_16( INT16, GetRelAbs16, w.relAbsMode )
165
166 /***********************************************************************
167  *              GetRelAbs               (GDI32.218)
168  */
169 DC_GET_VAL_32( INT, GetRelAbs, w.relAbsMode )
170
171 /***********************************************************************
172  *              GetStretchBltMode16     (GDI.88)
173  */
174 DC_GET_VAL_16( INT16, GetStretchBltMode16, w.stretchBltMode )
175
176 /***********************************************************************
177  *              GetStretchBltMode       (GDI32.221)
178  */
179 DC_GET_VAL_32( INT, GetStretchBltMode, w.stretchBltMode )
180
181 /***********************************************************************
182  *              GetTextColor16          (GDI.90)
183  */
184 DC_GET_VAL_16( COLORREF, GetTextColor16, w.textColor )
185
186 /***********************************************************************
187  *              GetTextColor            (GDI32.227)
188  */
189 DC_GET_VAL_32( COLORREF, GetTextColor, w.textColor )
190
191 /***********************************************************************
192  *              GetViewportExt16        (GDI.94)
193  */
194 DC_GET_X_Y( DWORD, GetViewportExt16, vportExtX, vportExtY )
195
196 /***********************************************************************
197  *              GetViewportOrg16        (GDI.95)
198  */
199 DC_GET_X_Y( DWORD, GetViewportOrg16, vportOrgX, vportOrgY )
200
201 /***********************************************************************
202  *              GetWindowExt16          (GDI.96)
203  */
204 DC_GET_X_Y( DWORD, GetWindowExt16, wndExtX, wndExtY )
205
206 /***********************************************************************
207  *              GetWindowOrg16  (GDI.97)
208  */
209 DC_GET_X_Y( DWORD, GetWindowOrg16, wndOrgX, wndOrgY )
210
211 /***********************************************************************
212  *              InquireVisRgn16 (GDI.131)
213  */
214 DC_GET_VAL_16( HRGN16, InquireVisRgn16, w.hVisRgn )
215
216 /***********************************************************************
217  *              GetClipRgn16    (GDI.173)
218  */
219 DC_GET_VAL_16( HRGN16, GetClipRgn16, w.hClipRgn )
220
221 /***********************************************************************
222  *              GetBrushOrg16   (GDI.149)
223  */
224 DC_GET_X_Y( DWORD, GetBrushOrg16, w.brushOrgX, w.brushOrgY )
225
226 /***********************************************************************
227  *              GetTextAlign16  (GDI.345)
228  */
229 DC_GET_VAL_16( UINT16, GetTextAlign16, w.textAlign )
230
231 /***********************************************************************
232  *              GetTextAlign    (GDI32.224)
233  */
234 DC_GET_VAL_32( UINT, GetTextAlign, w.textAlign )
235
236 /***********************************************************************
237  *              GetCurLogFont16 (GDI.411)
238  */
239 DC_GET_VAL_16( HFONT16, GetCurLogFont16, w.hFont )
240
241 /***********************************************************************
242  *              GetBrushOrgEx   (GDI.469) (GDI32.148)
243  */
244 DC_GET_VAL_EX( GetBrushOrgEx, w.brushOrgX, w.brushOrgY, POINT ) /*  */
245
246 /***********************************************************************
247  *              GetCurrentPositionEx    (GDI.470) (GDI32.167)
248  */
249 DC_GET_VAL_EX( GetCurrentPositionEx, w.CursPosX, w.CursPosY, POINT )
250
251 /***********************************************************************
252  *              GetViewportExtEx        (GDI.472 GDI32.239)
253  */
254 DC_GET_VAL_EX( GetViewportExtEx, vportExtX, vportExtY, SIZE )
255
256 /***********************************************************************
257  *              GetViewportOrgEx        (GDI.473) (GDI32.240)
258  */
259 DC_GET_VAL_EX( GetViewportOrgEx, vportOrgX, vportOrgY, POINT )
260
261 /***********************************************************************
262  *              GetWindowExtEx  (GDI.474) (GDI32.242)
263  */
264 DC_GET_VAL_EX( GetWindowExtEx, wndExtX, wndExtY, SIZE )
265
266 /***********************************************************************
267  *              GetWindowOrgEx  (GDI.475) (GDI32.243)
268  */
269 DC_GET_VAL_EX( GetWindowOrgEx, wndOrgX, wndOrgY, POINT )