Implement ResetDC and PHYSICALOFFSET[X|Y] devcaps.
[wine] / dlls / gdi / enhmfdrv / dc.c
1 /*
2  * Enhanced MetaFile driver dc value functions
3  *
4  * Copyright 1999 Huw D M Davies
5  *
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.
10  *
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.
15  *
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
19  */
20
21 #include "enhmfdrv/enhmetafiledrv.h"
22 #include "wine/debug.h"
23
24 WINE_DEFAULT_DEBUG_CHANNEL(enhmetafile);
25
26 INT EMFDRV_SaveDC( PHYSDEV dev )
27 {
28     EMRSAVEDC emr;
29     emr.emr.iType = EMR_SAVEDC;
30     emr.emr.nSize = sizeof(emr);
31     return EMFDRV_WriteRecord( dev, &emr.emr );
32 }
33
34 BOOL EMFDRV_RestoreDC( PHYSDEV dev, INT level )
35 {
36     EMRRESTOREDC emr;
37     emr.emr.iType = EMR_RESTOREDC;
38     emr.emr.nSize = sizeof(emr);
39     emr.iRelative = level;
40     return EMFDRV_WriteRecord( dev, &emr.emr );
41 }
42
43 UINT EMFDRV_SetTextAlign( PHYSDEV dev, UINT align )
44 {
45     EMRSETTEXTALIGN emr;
46     emr.emr.iType = EMR_SETTEXTALIGN;
47     emr.emr.nSize = sizeof(emr);
48     emr.iMode = align;
49     return EMFDRV_WriteRecord( dev, &emr.emr );
50 }
51
52 INT EMFDRV_SetBkMode( PHYSDEV dev, INT mode )
53 {
54     EMRSETBKMODE emr;
55     emr.emr.iType = EMR_SETBKMODE;
56     emr.emr.nSize = sizeof(emr);
57     emr.iMode = mode;
58     return EMFDRV_WriteRecord( dev, &emr.emr );
59 }
60
61 INT EMFDRV_SetROP2( PHYSDEV dev, INT rop )
62 {
63     EMRSETROP2 emr;
64     emr.emr.iType = EMR_SETROP2;
65     emr.emr.nSize = sizeof(emr);
66     emr.iMode = rop;
67     return EMFDRV_WriteRecord( dev, &emr.emr );
68 }
69
70 INT EMFDRV_SetPolyFillMode( PHYSDEV dev, INT mode )
71 {
72     EMRSETPOLYFILLMODE emr;
73     emr.emr.iType = EMR_SETPOLYFILLMODE;
74     emr.emr.nSize = sizeof(emr);
75     emr.iMode = mode;
76     return EMFDRV_WriteRecord( dev, &emr.emr );
77 }
78
79 INT EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode )
80 {
81     EMRSETSTRETCHBLTMODE emr;
82     emr.emr.iType = EMR_SETSTRETCHBLTMODE;
83     emr.emr.nSize = sizeof(emr);
84     emr.iMode = mode;
85     return EMFDRV_WriteRecord( dev, &emr.emr );
86 }
87
88 INT EMFDRV_SetMapMode( PHYSDEV dev, INT mode )
89 {
90     EMRSETMAPMODE emr;
91     emr.emr.iType = EMR_SETMAPMODE;
92     emr.emr.nSize = sizeof(emr);
93     emr.iMode = mode;
94     return EMFDRV_WriteRecord( dev, &emr.emr );
95 }
96
97 INT EMFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
98 {
99     EMREXCLUDECLIPRECT emr;
100     emr.emr.iType      = EMR_EXCLUDECLIPRECT;
101     emr.emr.nSize      = sizeof(emr);
102     emr.rclClip.left   = left;
103     emr.rclClip.top    = top;
104     emr.rclClip.right  = right;
105     emr.rclClip.bottom = bottom;
106     return EMFDRV_WriteRecord( dev, &emr.emr );
107 }
108
109 INT EMFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom)
110 {
111     EMRINTERSECTCLIPRECT emr;
112     emr.emr.iType      = EMR_INTERSECTCLIPRECT;
113     emr.emr.nSize      = sizeof(emr);
114     emr.rclClip.left   = left;
115     emr.rclClip.top    = top;
116     emr.rclClip.right  = right;
117     emr.rclClip.bottom = bottom;
118     return EMFDRV_WriteRecord( dev, &emr.emr );
119 }
120
121 INT EMFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y )
122 {
123     EMROFFSETCLIPRGN emr;
124     emr.emr.iType   = EMR_OFFSETCLIPRGN;
125     emr.emr.nSize   = sizeof(emr);
126     emr.ptlOffset.x = x;
127     emr.ptlOffset.y = y;
128     return EMFDRV_WriteRecord( dev, &emr.emr );
129 }
130
131 DWORD EMFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags )
132 {
133     EMRSETMAPPERFLAGS emr;
134
135     emr.emr.iType = EMR_SETMAPPERFLAGS;
136     emr.emr.nSize = sizeof(emr);
137     emr.dwFlags   = flags;
138
139     return EMFDRV_WriteRecord( dev, &emr.emr );
140 }
141
142 BOOL EMFDRV_AbortPath( PHYSDEV dev )
143 {
144     EMRABORTPATH emr;
145
146     emr.emr.iType = EMR_ABORTPATH;
147     emr.emr.nSize = sizeof(emr);
148
149     return EMFDRV_WriteRecord( dev, &emr.emr );
150 }
151
152 BOOL EMFDRV_BeginPath( PHYSDEV dev )
153 {
154     EMRBEGINPATH emr;
155
156     emr.emr.iType = EMR_BEGINPATH;
157     emr.emr.nSize = sizeof(emr);
158
159     return EMFDRV_WriteRecord( dev, &emr.emr );
160 }
161
162 BOOL EMFDRV_CloseFigure( PHYSDEV dev )
163 {
164     EMRCLOSEFIGURE emr;
165
166     emr.emr.iType = EMR_CLOSEFIGURE;
167     emr.emr.nSize = sizeof(emr);
168
169     return EMFDRV_WriteRecord( dev, &emr.emr );
170 }
171
172 BOOL EMFDRV_EndPath( PHYSDEV dev )
173 {
174     EMRENDPATH emr;
175
176     emr.emr.iType = EMR_ENDPATH;
177     emr.emr.nSize = sizeof(emr);
178
179     return EMFDRV_WriteRecord( dev, &emr.emr );
180 }
181
182 BOOL EMFDRV_FillPath( PHYSDEV dev )
183 {
184     EMRFILLPATH emr;
185
186     emr.emr.iType = EMR_FILLPATH;
187     emr.emr.nSize = sizeof(emr);
188     FIXME("Bounds\n");
189     emr.rclBounds.left = 0;
190     emr.rclBounds.top = 0;
191     emr.rclBounds.right = 0;
192     emr.rclBounds.bottom = 0;
193     return EMFDRV_WriteRecord( dev, &emr.emr );
194 }
195
196 BOOL EMFDRV_FlattenPath( PHYSDEV dev )
197 {
198     EMRFLATTENPATH emr;
199
200     emr.emr.iType = EMR_FLATTENPATH;
201     emr.emr.nSize = sizeof(emr);
202
203     return EMFDRV_WriteRecord( dev, &emr.emr );
204 }
205
206 BOOL EMFDRV_SelectClipPath( PHYSDEV dev, INT iMode )
207 {
208     EMRSELECTCLIPPATH emr;
209
210     emr.emr.iType = EMR_SELECTCLIPPATH;
211     emr.emr.nSize = sizeof(emr);
212     emr.iMode = iMode;
213
214     return EMFDRV_WriteRecord( dev, &emr.emr );
215 }
216
217 BOOL EMFDRV_StrokeAndFillPath( PHYSDEV dev )
218 {
219     EMRSTROKEANDFILLPATH emr;
220
221     emr.emr.iType = EMR_STROKEANDFILLPATH;
222     emr.emr.nSize = sizeof(emr);
223     FIXME("Bounds\n");
224     emr.rclBounds.left = 0;
225     emr.rclBounds.top = 0;
226     emr.rclBounds.right = 0;
227     emr.rclBounds.bottom = 0;
228     return EMFDRV_WriteRecord( dev, &emr.emr );
229 }
230
231 BOOL EMFDRV_StrokePath( PHYSDEV dev )
232 {
233     EMRSTROKEPATH emr;
234
235     emr.emr.iType = EMR_STROKEPATH;
236     emr.emr.nSize = sizeof(emr);
237     FIXME("Bounds\n");
238     emr.rclBounds.left = 0;
239     emr.rclBounds.top = 0;
240     emr.rclBounds.right = 0;
241     emr.rclBounds.bottom = 0;
242     return EMFDRV_WriteRecord( dev, &emr.emr );
243 }
244
245 BOOL EMFDRV_WidenPath( PHYSDEV dev )
246 {
247     EMRWIDENPATH emr;
248
249     emr.emr.iType = EMR_WIDENPATH;
250     emr.emr.nSize = sizeof(emr);
251
252     return EMFDRV_WriteRecord( dev, &emr.emr );
253 }