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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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 EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev;
37 DC *dc = get_dc_ptr( physDev->hdc );
38 EMRRESTOREDC emr;
39
40 emr.emr.iType = EMR_RESTOREDC;
41 emr.emr.nSize = sizeof(emr);
42
43 if (level < 0)
44 emr.iRelative = level;
45 else
46 emr.iRelative = level - dc->saveLevel - 1;
47
48 EMFDRV_WriteRecord( dev, &emr.emr );
49
50 release_dc_ptr( dc );
51 return TRUE;
52 }
53
54 UINT EMFDRV_SetTextAlign( PHYSDEV dev, UINT align )
55 {
56 EMRSETTEXTALIGN emr;
57 emr.emr.iType = EMR_SETTEXTALIGN;
58 emr.emr.nSize = sizeof(emr);
59 emr.iMode = align;
60 return EMFDRV_WriteRecord( dev, &emr.emr );
61 }
62
63 BOOL EMFDRV_SetTextJustification(PHYSDEV dev, INT nBreakExtra, INT nBreakCount)
64 {
65 EMRSETTEXTJUSTIFICATION emr;
66 emr.emr.iType = EMR_SETTEXTJUSTIFICATION;
67 emr.emr.nSize = sizeof(emr);
68 emr.nBreakExtra = nBreakExtra;
69 emr.nBreakCount = nBreakCount;
70 return EMFDRV_WriteRecord(dev, &emr.emr);
71 }
72
73 INT EMFDRV_SetBkMode( PHYSDEV dev, INT mode )
74 {
75 EMRSETBKMODE emr;
76 emr.emr.iType = EMR_SETBKMODE;
77 emr.emr.nSize = sizeof(emr);
78 emr.iMode = mode;
79 return EMFDRV_WriteRecord( dev, &emr.emr );
80 }
81
82 INT EMFDRV_SetROP2( PHYSDEV dev, INT rop )
83 {
84 EMRSETROP2 emr;
85 emr.emr.iType = EMR_SETROP2;
86 emr.emr.nSize = sizeof(emr);
87 emr.iMode = rop;
88 return EMFDRV_WriteRecord( dev, &emr.emr );
89 }
90
91 INT EMFDRV_SetPolyFillMode( PHYSDEV dev, INT mode )
92 {
93 EMRSETPOLYFILLMODE emr;
94 emr.emr.iType = EMR_SETPOLYFILLMODE;
95 emr.emr.nSize = sizeof(emr);
96 emr.iMode = mode;
97 return EMFDRV_WriteRecord( dev, &emr.emr );
98 }
99
100 INT EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode )
101 {
102 EMRSETSTRETCHBLTMODE emr;
103 emr.emr.iType = EMR_SETSTRETCHBLTMODE;
104 emr.emr.nSize = sizeof(emr);
105 emr.iMode = mode;
106 return EMFDRV_WriteRecord( dev, &emr.emr );
107 }
108
109 INT EMFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
110 {
111 EMREXCLUDECLIPRECT emr;
112 emr.emr.iType = EMR_EXCLUDECLIPRECT;
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_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom)
122 {
123 EMRINTERSECTCLIPRECT emr;
124 emr.emr.iType = EMR_INTERSECTCLIPRECT;
125 emr.emr.nSize = sizeof(emr);
126 emr.rclClip.left = left;
127 emr.rclClip.top = top;
128 emr.rclClip.right = right;
129 emr.rclClip.bottom = bottom;
130 return EMFDRV_WriteRecord( dev, &emr.emr );
131 }
132
133 INT EMFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y )
134 {
135 EMROFFSETCLIPRGN emr;
136 emr.emr.iType = EMR_OFFSETCLIPRGN;
137 emr.emr.nSize = sizeof(emr);
138 emr.ptlOffset.x = x;
139 emr.ptlOffset.y = y;
140 return EMFDRV_WriteRecord( dev, &emr.emr );
141 }
142
143 INT EMFDRV_ExtSelectClipRgn( PHYSDEV dev, HRGN hrgn, INT mode )
144 {
145 EMREXTSELECTCLIPRGN *emr;
146 DWORD size, rgnsize;
147 BOOL ret;
148
149 if (!hrgn)
150 {
151 if (mode != RGN_COPY) return ERROR;
152 rgnsize = 0;
153 }
154 else rgnsize = GetRegionData( hrgn, 0, NULL );
155
156 size = rgnsize + offsetof(EMREXTSELECTCLIPRGN,RgnData);
157 emr = HeapAlloc( GetProcessHeap(), 0, size );
158 if (rgnsize) GetRegionData( hrgn, rgnsize, (RGNDATA *)&emr->RgnData );
159
160 emr->emr.iType = EMR_EXTSELECTCLIPRGN;
161 emr->emr.nSize = size;
162 emr->cbRgnData = rgnsize;
163 emr->iMode = mode;
164
165 ret = EMFDRV_WriteRecord( dev, &emr->emr );
166 HeapFree( GetProcessHeap(), 0, emr );
167 return ret ? SIMPLEREGION : ERROR;
168 }
169
170 DWORD EMFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags )
171 {
172 EMRSETMAPPERFLAGS emr;
173
174 emr.emr.iType = EMR_SETMAPPERFLAGS;
175 emr.emr.nSize = sizeof(emr);
176 emr.dwFlags = flags;
177
178 return EMFDRV_WriteRecord( dev, &emr.emr );
179 }
180
181 BOOL EMFDRV_AbortPath( PHYSDEV dev )
182 {
183 EMRABORTPATH emr;
184
185 emr.emr.iType = EMR_ABORTPATH;
186 emr.emr.nSize = sizeof(emr);
187
188 return EMFDRV_WriteRecord( dev, &emr.emr );
189 }
190
191 BOOL EMFDRV_BeginPath( PHYSDEV dev )
192 {
193 EMRBEGINPATH emr;
194
195 emr.emr.iType = EMR_BEGINPATH;
196 emr.emr.nSize = sizeof(emr);
197
198 return EMFDRV_WriteRecord( dev, &emr.emr );
199 }
200
201 BOOL EMFDRV_CloseFigure( PHYSDEV dev )
202 {
203 EMRCLOSEFIGURE emr;
204
205 emr.emr.iType = EMR_CLOSEFIGURE;
206 emr.emr.nSize = sizeof(emr);
207
208 return EMFDRV_WriteRecord( dev, &emr.emr );
209 }
210
211 BOOL EMFDRV_EndPath( PHYSDEV dev )
212 {
213 EMRENDPATH emr;
214
215 emr.emr.iType = EMR_ENDPATH;
216 emr.emr.nSize = sizeof(emr);
217
218 return EMFDRV_WriteRecord( dev, &emr.emr );
219 }
220
221 BOOL EMFDRV_FillPath( PHYSDEV dev )
222 {
223 EMRFILLPATH emr;
224
225 emr.emr.iType = EMR_FILLPATH;
226 emr.emr.nSize = sizeof(emr);
227 FIXME("Bounds\n");
228 emr.rclBounds.left = 0;
229 emr.rclBounds.top = 0;
230 emr.rclBounds.right = 0;
231 emr.rclBounds.bottom = 0;
232 return EMFDRV_WriteRecord( dev, &emr.emr );
233 }
234
235 BOOL EMFDRV_FlattenPath( PHYSDEV dev )
236 {
237 EMRFLATTENPATH emr;
238
239 emr.emr.iType = EMR_FLATTENPATH;
240 emr.emr.nSize = sizeof(emr);
241
242 return EMFDRV_WriteRecord( dev, &emr.emr );
243 }
244
245 BOOL EMFDRV_SelectClipPath( PHYSDEV dev, INT iMode )
246 {
247 EMRSELECTCLIPPATH emr;
248
249 emr.emr.iType = EMR_SELECTCLIPPATH;
250 emr.emr.nSize = sizeof(emr);
251 emr.iMode = iMode;
252
253 return EMFDRV_WriteRecord( dev, &emr.emr );
254 }
255
256 BOOL EMFDRV_StrokeAndFillPath( PHYSDEV dev )
257 {
258 EMRSTROKEANDFILLPATH emr;
259
260 emr.emr.iType = EMR_STROKEANDFILLPATH;
261 emr.emr.nSize = sizeof(emr);
262 FIXME("Bounds\n");
263 emr.rclBounds.left = 0;
264 emr.rclBounds.top = 0;
265 emr.rclBounds.right = 0;
266 emr.rclBounds.bottom = 0;
267 return EMFDRV_WriteRecord( dev, &emr.emr );
268 }
269
270 BOOL EMFDRV_StrokePath( PHYSDEV dev )
271 {
272 EMRSTROKEPATH emr;
273
274 emr.emr.iType = EMR_STROKEPATH;
275 emr.emr.nSize = sizeof(emr);
276 FIXME("Bounds\n");
277 emr.rclBounds.left = 0;
278 emr.rclBounds.top = 0;
279 emr.rclBounds.right = 0;
280 emr.rclBounds.bottom = 0;
281 return EMFDRV_WriteRecord( dev, &emr.emr );
282 }
283
284 BOOL EMFDRV_WidenPath( PHYSDEV dev )
285 {
286 EMRWIDENPATH emr;
287
288 emr.emr.iType = EMR_WIDENPATH;
289 emr.emr.nSize = sizeof(emr);
290
291 return EMFDRV_WriteRecord( dev, &emr.emr );
292 }
293
294 INT EMFDRV_GetDeviceCaps(PHYSDEV dev, INT cap)
295 {
296 EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE*) dev;
297
298 switch(cap) {
299
300 case HORZRES:
301 return physDev->horzres;
302 case VERTRES:
303 return physDev->vertres;
304 case LOGPIXELSX:
305 return physDev->logpixelsx;
306 case LOGPIXELSY:
307 return physDev->logpixelsy;
308 case HORZSIZE:
309 return physDev->horzsize;
310 case VERTSIZE:
311 return physDev->vertsize;
312 case BITSPIXEL:
313 return physDev->bitspixel;
314 case TEXTCAPS:
315 return physDev->textcaps;
316 case RASTERCAPS:
317 return physDev->rastercaps;
318 case TECHNOLOGY:
319 return physDev->technology;
320 case PLANES:
321 return physDev->planes;
322 case NUMCOLORS:
323 return physDev->numcolors;
324 default:
325 FIXME("Unimplemented cap %d\n", cap);
326 return 0;
327 }
328 }
329
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.