2 * Enhanced MetaFile driver dc value functions
4 * Copyright 1999 Huw D M Davies
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.
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.
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
21 #include "enhmfdrv/enhmetafiledrv.h"
22 #include "wine/debug.h"
24 WINE_DEFAULT_DEBUG_CHANNEL(enhmetafile);
26 INT EMFDRV_SaveDC( PHYSDEV dev )
29 emr.emr.iType = EMR_SAVEDC;
30 emr.emr.nSize = sizeof(emr);
31 return EMFDRV_WriteRecord( dev, &emr.emr );
34 BOOL EMFDRV_RestoreDC( PHYSDEV dev, INT level )
37 emr.emr.iType = EMR_RESTOREDC;
38 emr.emr.nSize = sizeof(emr);
39 emr.iRelative = level;
40 return EMFDRV_WriteRecord( dev, &emr.emr );
43 UINT EMFDRV_SetTextAlign( PHYSDEV dev, UINT align )
46 emr.emr.iType = EMR_SETTEXTALIGN;
47 emr.emr.nSize = sizeof(emr);
49 return EMFDRV_WriteRecord( dev, &emr.emr );
52 INT EMFDRV_SetBkMode( PHYSDEV dev, INT mode )
55 emr.emr.iType = EMR_SETBKMODE;
56 emr.emr.nSize = sizeof(emr);
58 return EMFDRV_WriteRecord( dev, &emr.emr );
61 INT EMFDRV_SetROP2( PHYSDEV dev, INT rop )
64 emr.emr.iType = EMR_SETROP2;
65 emr.emr.nSize = sizeof(emr);
67 return EMFDRV_WriteRecord( dev, &emr.emr );
70 INT EMFDRV_SetPolyFillMode( PHYSDEV dev, INT mode )
72 EMRSETPOLYFILLMODE emr;
73 emr.emr.iType = EMR_SETPOLYFILLMODE;
74 emr.emr.nSize = sizeof(emr);
76 return EMFDRV_WriteRecord( dev, &emr.emr );
79 INT EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode )
81 EMRSETSTRETCHBLTMODE emr;
82 emr.emr.iType = EMR_SETSTRETCHBLTMODE;
83 emr.emr.nSize = sizeof(emr);
85 return EMFDRV_WriteRecord( dev, &emr.emr );
88 INT EMFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
90 EMREXCLUDECLIPRECT emr;
91 emr.emr.iType = EMR_EXCLUDECLIPRECT;
92 emr.emr.nSize = sizeof(emr);
93 emr.rclClip.left = left;
94 emr.rclClip.top = top;
95 emr.rclClip.right = right;
96 emr.rclClip.bottom = bottom;
97 return EMFDRV_WriteRecord( dev, &emr.emr );
100 INT EMFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom)
102 EMRINTERSECTCLIPRECT emr;
103 emr.emr.iType = EMR_INTERSECTCLIPRECT;
104 emr.emr.nSize = sizeof(emr);
105 emr.rclClip.left = left;
106 emr.rclClip.top = top;
107 emr.rclClip.right = right;
108 emr.rclClip.bottom = bottom;
109 return EMFDRV_WriteRecord( dev, &emr.emr );
112 INT EMFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y )
114 EMROFFSETCLIPRGN emr;
115 emr.emr.iType = EMR_OFFSETCLIPRGN;
116 emr.emr.nSize = sizeof(emr);
119 return EMFDRV_WriteRecord( dev, &emr.emr );
122 INT EMFDRV_ExtSelectClipRgn( PHYSDEV dev, HRGN hrgn, INT mode )
124 EMREXTSELECTCLIPRGN *emr;
130 if (mode != RGN_COPY) return ERROR;
133 else rgnsize = GetRegionData( hrgn, 0, NULL );
135 size = rgnsize + offsetof(EMREXTSELECTCLIPRGN,RgnData);
136 emr = HeapAlloc( GetProcessHeap(), 0, size );
137 if (rgnsize) GetRegionData( hrgn, rgnsize, (RGNDATA *)&emr->RgnData );
139 emr->emr.iType = EMR_EXTSELECTCLIPRGN;
140 emr->emr.nSize = size;
141 emr->cbRgnData = rgnsize;
144 ret = EMFDRV_WriteRecord( dev, &emr->emr );
145 HeapFree( GetProcessHeap(), 0, emr );
146 return ret ? SIMPLEREGION : ERROR;
149 DWORD EMFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags )
151 EMRSETMAPPERFLAGS emr;
153 emr.emr.iType = EMR_SETMAPPERFLAGS;
154 emr.emr.nSize = sizeof(emr);
157 return EMFDRV_WriteRecord( dev, &emr.emr );
160 BOOL EMFDRV_AbortPath( PHYSDEV dev )
164 emr.emr.iType = EMR_ABORTPATH;
165 emr.emr.nSize = sizeof(emr);
167 return EMFDRV_WriteRecord( dev, &emr.emr );
170 BOOL EMFDRV_BeginPath( PHYSDEV dev )
174 emr.emr.iType = EMR_BEGINPATH;
175 emr.emr.nSize = sizeof(emr);
177 return EMFDRV_WriteRecord( dev, &emr.emr );
180 BOOL EMFDRV_CloseFigure( PHYSDEV dev )
184 emr.emr.iType = EMR_CLOSEFIGURE;
185 emr.emr.nSize = sizeof(emr);
187 return EMFDRV_WriteRecord( dev, &emr.emr );
190 BOOL EMFDRV_EndPath( PHYSDEV dev )
194 emr.emr.iType = EMR_ENDPATH;
195 emr.emr.nSize = sizeof(emr);
197 return EMFDRV_WriteRecord( dev, &emr.emr );
200 BOOL EMFDRV_FillPath( PHYSDEV dev )
204 emr.emr.iType = EMR_FILLPATH;
205 emr.emr.nSize = sizeof(emr);
207 emr.rclBounds.left = 0;
208 emr.rclBounds.top = 0;
209 emr.rclBounds.right = 0;
210 emr.rclBounds.bottom = 0;
211 return EMFDRV_WriteRecord( dev, &emr.emr );
214 BOOL EMFDRV_FlattenPath( PHYSDEV dev )
218 emr.emr.iType = EMR_FLATTENPATH;
219 emr.emr.nSize = sizeof(emr);
221 return EMFDRV_WriteRecord( dev, &emr.emr );
224 BOOL EMFDRV_SelectClipPath( PHYSDEV dev, INT iMode )
226 EMRSELECTCLIPPATH emr;
228 emr.emr.iType = EMR_SELECTCLIPPATH;
229 emr.emr.nSize = sizeof(emr);
232 return EMFDRV_WriteRecord( dev, &emr.emr );
235 BOOL EMFDRV_StrokeAndFillPath( PHYSDEV dev )
237 EMRSTROKEANDFILLPATH emr;
239 emr.emr.iType = EMR_STROKEANDFILLPATH;
240 emr.emr.nSize = sizeof(emr);
242 emr.rclBounds.left = 0;
243 emr.rclBounds.top = 0;
244 emr.rclBounds.right = 0;
245 emr.rclBounds.bottom = 0;
246 return EMFDRV_WriteRecord( dev, &emr.emr );
249 BOOL EMFDRV_StrokePath( PHYSDEV dev )
253 emr.emr.iType = EMR_STROKEPATH;
254 emr.emr.nSize = sizeof(emr);
256 emr.rclBounds.left = 0;
257 emr.rclBounds.top = 0;
258 emr.rclBounds.right = 0;
259 emr.rclBounds.bottom = 0;
260 return EMFDRV_WriteRecord( dev, &emr.emr );
263 BOOL EMFDRV_WidenPath( PHYSDEV dev )
267 emr.emr.iType = EMR_WIDENPATH;
268 emr.emr.nSize = sizeof(emr);
270 return EMFDRV_WriteRecord( dev, &emr.emr );
273 INT EMFDRV_GetDeviceCaps(PHYSDEV dev, INT cap)
275 EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE*) dev;
280 return physDev->horzres;
282 return physDev->vertres;
284 return physDev->logpixelsx;
286 return physDev->logpixelsy;
288 return physDev->horzsize;
290 return physDev->vertsize;
292 return physDev->bitspixel;
295 FIXME("Unimplemented cap %d\n", cap);