Add a .gitattributes with "* text=auto" so that new lines are
[pdfium.git] / core / src / fxge / Microsoft SDK / include / GdiPlusMetaFile.h
1 /**************************************************************************\
2 *
3 * Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
4 *
5 * Module Name:
6 *
7 *   GdiplusMetafile.h
8 *
9 * Abstract:
10 *
11 *   Metafile related declarations
12 *
13 \**************************************************************************/
14
15 #ifndef _GDIPLUSMETAFILE_H
16 #define _GDIPLUSMETAFILE_H
17
18 class Metafile : public Image
19 {
20 public:
21     friend class Image;
22
23     // Read a metafile
24     Metafile()
25     {
26         SetNativeImage(NULL);
27         lastResult = Ok;
28     }
29
30     // Playback a metafile from a HMETAFILE
31     // If deleteWmf is TRUE, then when the metafile is deleted,
32     // the hWmf will also be deleted.  Otherwise, it won't be.
33     Metafile(IN HMETAFILE hWmf,
34              IN const APMFileHeader * apmFileHeader,
35              IN BOOL deleteWmf = FALSE)
36     {
37         GpMetafile *    metafile = NULL;
38
39         lastResult = DllExports::GdipCreateMetafileFromWmf(hWmf, deleteWmf, apmFileHeader, &metafile);
40
41         SetNativeImage(metafile);
42     }
43
44     // Playback a metafile from a HENHMETAFILE
45     // If deleteEmf is TRUE, then when the metafile is deleted,
46     // the hEmf will also be deleted.  Otherwise, it won't be.
47     Metafile(IN HENHMETAFILE hEmf,
48              IN BOOL deleteEmf = FALSE)
49     {
50         GpMetafile *    metafile = NULL;
51
52         lastResult = DllExports::GdipCreateMetafileFromEmf(hEmf, deleteEmf, &metafile);
53
54         SetNativeImage(metafile);
55     }
56
57     // Playback a metafile from a file
58     Metafile(IN const WCHAR* filename)
59     {
60         GpMetafile *    metafile = NULL;
61
62         lastResult = DllExports::GdipCreateMetafileFromFile(filename, &metafile);
63
64         SetNativeImage(metafile);
65     }
66
67     // Playback a WMF metafile from a file
68     Metafile(IN const WCHAR* filename,
69              IN const APMFileHeader * apmFileHeader
70             )
71     {
72         GpMetafile *    metafile = NULL;
73
74         lastResult = DllExports::GdipCreateMetafileFromWmfFile(filename, apmFileHeader, &metafile);
75
76         SetNativeImage(metafile);
77     }
78
79     // Playback a metafile from a stream
80     Metafile(IN IStream* stream)
81     {
82         GpMetafile *    metafile = NULL;
83
84         lastResult = DllExports::GdipCreateMetafileFromStream(stream, &metafile);
85
86         SetNativeImage(metafile);
87     }
88
89     // Record a metafile to memory
90     Metafile(
91         IN HDC                 referenceHdc,
92         IN EmfType             type        = EmfTypeEmfPlusDual,
93         IN const WCHAR *       description = NULL
94         )
95     {
96         GpMetafile *    metafile = NULL;
97
98         lastResult = DllExports::GdipRecordMetafile(
99                         referenceHdc, type, NULL, MetafileFrameUnitGdi,
100                         description, &metafile);
101
102         SetNativeImage(metafile);
103     }
104
105     // Record a metafile to memory
106     Metafile(
107         IN HDC                 referenceHdc,
108         IN const RectF &       frameRect,
109         IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
110         IN EmfType             type        = EmfTypeEmfPlusDual,
111         IN const WCHAR *       description = NULL
112         )
113     {
114         GpMetafile *    metafile = NULL;
115
116         lastResult = DllExports::GdipRecordMetafile(
117                         referenceHdc, type, &frameRect, frameUnit,
118                         description, &metafile);
119
120         SetNativeImage(metafile);
121     }
122
123     // Record a metafile to memory
124     Metafile(
125         IN HDC                 referenceHdc,
126         IN const Rect &        frameRect,
127         IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
128         IN EmfType             type        = EmfTypeEmfPlusDual,
129         IN const WCHAR *       description = NULL
130         )
131     {
132         GpMetafile *    metafile = NULL;
133
134         lastResult = DllExports::GdipRecordMetafileI(
135                         referenceHdc, type, &frameRect, frameUnit,
136                         description, &metafile);
137
138         SetNativeImage(metafile);
139     }
140
141     // Record a metafile to a file
142     Metafile(
143         IN const WCHAR*        fileName,
144         IN HDC                 referenceHdc,
145         IN EmfType             type        = EmfTypeEmfPlusDual,
146         IN const WCHAR *       description = NULL
147         )
148     {
149         GpMetafile *    metafile = NULL;
150
151         lastResult = DllExports::GdipRecordMetafileFileName(fileName,
152                         referenceHdc, type, NULL, MetafileFrameUnitGdi,
153                         description, &metafile);
154
155         SetNativeImage(metafile);
156     }
157
158     // Record a metafile to a file
159     Metafile(
160         IN const WCHAR*        fileName,
161         IN HDC                 referenceHdc,
162         IN const RectF &       frameRect,
163         IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
164         IN EmfType             type        = EmfTypeEmfPlusDual,
165         IN const WCHAR *       description = NULL
166         )
167     {
168         GpMetafile *    metafile = NULL;
169
170         lastResult = DllExports::GdipRecordMetafileFileName(fileName,
171                         referenceHdc, type, &frameRect, frameUnit,
172                         description, &metafile);
173
174         SetNativeImage(metafile);
175     }
176
177     // Record a metafile to a file
178     Metafile(
179         IN const WCHAR*        fileName,
180         IN HDC                 referenceHdc,
181         IN const Rect &        frameRect,
182         IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
183         IN EmfType             type        = EmfTypeEmfPlusDual,
184         IN const WCHAR *       description = NULL
185         )
186     {
187         GpMetafile *    metafile = NULL;
188
189         lastResult = DllExports::GdipRecordMetafileFileNameI(fileName,
190                         referenceHdc, type, &frameRect, frameUnit,
191                         description, &metafile);
192
193         SetNativeImage(metafile);
194     }
195
196     // Record a metafile to a stream
197     Metafile(
198         IN IStream *           stream,
199         IN HDC                 referenceHdc,
200         IN EmfType             type        = EmfTypeEmfPlusDual,
201         IN const WCHAR *       description = NULL
202         )
203     {
204         GpMetafile *    metafile = NULL;
205
206         lastResult = DllExports::GdipRecordMetafileStream(stream,
207                         referenceHdc, type, NULL, MetafileFrameUnitGdi,
208                         description, &metafile);
209
210         SetNativeImage(metafile);
211     }
212
213     // Record a metafile to a stream
214     Metafile(
215         IN IStream *           stream,
216         IN HDC                 referenceHdc,
217         IN const RectF &       frameRect,
218         IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
219         IN EmfType             type        = EmfTypeEmfPlusDual,
220         IN const WCHAR *       description = NULL
221         )
222     {
223         GpMetafile *    metafile = NULL;
224
225         lastResult = DllExports::GdipRecordMetafileStream(stream,
226                         referenceHdc, type, &frameRect, frameUnit,
227                         description, &metafile);
228
229         SetNativeImage(metafile);
230     }
231
232     // Write a metafile to a stream with down-level GDI records
233     Metafile(
234         IN IStream *           stream,
235         IN HDC                 referenceHdc,
236         IN const Rect &        frameRect,
237         IN MetafileFrameUnit   frameUnit   = MetafileFrameUnitGdi,
238         IN EmfType             type        = EmfTypeEmfPlusDual,
239         IN const WCHAR *       description = NULL
240         )
241     {
242         GpMetafile *    metafile = NULL;
243
244         lastResult = DllExports::GdipRecordMetafileStreamI(stream,
245                         referenceHdc, type, &frameRect, frameUnit,
246                         description, &metafile);
247
248         SetNativeImage(metafile);
249     }
250
251     static Status GetMetafileHeader(
252         IN HMETAFILE           hWmf,
253         IN const APMFileHeader *     apmFileHeader,
254         OUT MetafileHeader *   header
255         )
256     {
257         return DllExports::GdipGetMetafileHeaderFromWmf(hWmf, apmFileHeader, header);
258     }
259
260     static Status GetMetafileHeader(
261         IN HENHMETAFILE        hEmf,
262         OUT MetafileHeader *   header
263         )
264     {
265         return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header);
266     }
267
268     static Status GetMetafileHeader(
269         IN const WCHAR*        filename,
270         OUT MetafileHeader *   header
271         )
272     {
273         return DllExports::GdipGetMetafileHeaderFromFile(filename, header);
274     }
275
276     static Status GetMetafileHeader(
277         IN IStream *           stream,
278         OUT MetafileHeader *   header
279         )
280     {
281         return DllExports::GdipGetMetafileHeaderFromStream(stream, header);
282     }
283
284     Status GetMetafileHeader(
285         OUT MetafileHeader *    header
286         ) const
287     {
288         return SetStatus(DllExports::GdipGetMetafileHeaderFromMetafile(
289                                               (GpMetafile *)nativeImage,
290                                               header));
291     }
292
293     // Once this method is called, the Metafile object is in an invalid state
294     // and can no longer be used.  It is the responsiblity of the caller to
295     // invoke DeleteEnhMetaFile to delete this hEmf.
296
297     HENHMETAFILE GetHENHMETAFILE()
298     {
299         HENHMETAFILE hEmf;
300
301         SetStatus(DllExports::GdipGetHemfFromMetafile((GpMetafile *)nativeImage, &hEmf));
302
303         return hEmf;
304     }
305
306     // Used in conjuction with Graphics::EnumerateMetafile to play an EMF+
307     // The data must be DWORD aligned if it's an EMF or EMF+.  It must be
308     // WORD aligned if it's a WMF.
309     Status
310     PlayRecord(
311         IN EmfPlusRecordType   recordType,
312         IN UINT                flags,
313         IN UINT                dataSize,
314         IN const BYTE *        data
315         ) const
316     {
317         return SetStatus(DllExports::GdipPlayMetafileRecord(
318                                 (GpMetafile *)nativeImage,
319                                 recordType,
320                                 flags,
321                                 dataSize,
322                                 data));
323     }
324
325     // If you're using a printer HDC for the metafile, but you want the
326     // metafile rasterized at screen resolution, then use this API to set
327     // the rasterization dpi of the metafile to the screen resolution,
328     // e.g. 96 dpi or 120 dpi.
329     Status SetDownLevelRasterizationLimit(
330         IN UINT     metafileRasterizationLimitDpi
331         )
332     {
333         return SetStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit(
334                                 (GpMetafile *)nativeImage,
335                                 metafileRasterizationLimitDpi));
336     }
337
338     UINT GetDownLevelRasterizationLimit() const
339     {
340         UINT    metafileRasterizationLimitDpi = 0;
341
342         SetStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit(
343                                 (GpMetafile *)nativeImage,
344                                 &metafileRasterizationLimitDpi));
345
346         return metafileRasterizationLimitDpi;
347     }
348
349     static UINT Metafile::EmfToWmfBits(
350         IN HENHMETAFILE       hemf,
351         IN UINT               cbData16,
352         IN LPBYTE             pData16,
353         IN INT                iMapMode = MM_ANISOTROPIC,
354         IN EmfToWmfBitsFlags  eFlags = EmfToWmfBitsFlagsDefault
355     )
356     {
357         return DllExports::GdipEmfToWmfBits(
358             hemf,
359             cbData16,
360             pData16,
361             iMapMode,
362             eFlags);
363     }
364
365 #ifdef DCR_USE_NEW_250932
366
367 private:
368     Metafile(const Metafile &);
369     Metafile& operator=(const Metafile &);
370
371 #endif
372 };
373
374 #endif // !_METAFILE_H