[SDK][INCLUDE] Improve gdiplusmetafile.h (#2221)
[reactos.git] / sdk / include / psdk / gdiplusmetafile.h
1 /*
2 * GdiPlusMetaFile.h
3 *
4 * Windows GDI+
5 *
6 * This file is part of the w32api package.
7 *
8 * THIS SOFTWARE IS NOT COPYRIGHTED
9 *
10 * This source code is offered for use in the public domain. You may
11 * use, modify or distribute it freely.
12 *
13 * This code is distributed in the hope that it will be useful but
14 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
15 * DISCLAIMED. This includes but is not limited to warranties of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17 */
18
19 #ifndef _GDIPLUSMETAFILE_H
20 #define _GDIPLUSMETAFILE_H
21
22 class Metafile : public Image
23 {
24 public:
25 Metafile(HDC referenceHdc, EmfType type = EmfTypeEmfPlusDual, const WCHAR *description = NULL)
26 {
27 GpMetafile *metafile = NULL;
28 lastStatus =
29 DllExports::GdipRecordMetafile(referenceHdc, type, NULL, MetafileFrameUnitGdi, description, &metafile);
30 SetNativeImage(metafile);
31 }
32
33 Metafile(const WCHAR *filename)
34 {
35 GpMetafile *metafile = NULL;
36 lastStatus = DllExports::GdipCreateMetafileFromFile(filename, &metafile);
37 SetNativeImage(metafile);
38 }
39
40 Metafile(
41 HDC referenceHdc,
42 const RectF &frameRect,
43 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
44 EmfType type = EmfTypeEmfPlusDual,
45 const WCHAR *description = NULL)
46 {
47 GpMetafile *metafile = NULL;
48 lastStatus = DllExports::GdipRecordMetafile(referenceHdc, type, &frameRect, frameUnit, description, &metafile);
49 SetNativeImage(metafile);
50 }
51
52 Metafile(HMETAFILE hWmf, const WmfPlaceableFileHeader *wmfPlaceableFileHeader, BOOL deleteWmf = FALSE)
53 {
54 GpMetafile *metafile = NULL;
55 lastStatus = DllExports::GdipCreateMetafileFromWmf(hWmf, deleteWmf, wmfPlaceableFileHeader, &metafile);
56 SetNativeImage(metafile);
57 }
58
59 Metafile(
60 const WCHAR *fileName,
61 HDC referenceHdc,
62 const Rect &frameRect,
63 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
64 EmfType type = EmfTypeEmfPlusDual,
65 const WCHAR *description = NULL)
66 {
67 GpMetafile *metafile = NULL;
68 lastStatus = DllExports::GdipRecordMetafileFileNameI(
69 fileName, referenceHdc, type, &frameRect, frameUnit, description, &metafile);
70 SetNativeImage(metafile);
71 }
72
73 Metafile(
74 IStream *stream,
75 HDC referenceHdc,
76 const RectF &frameRect,
77 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
78 EmfType type = EmfTypeEmfPlusDual,
79 const WCHAR *description = NULL)
80 {
81 GpMetafile *metafile = NULL;
82 lastStatus = DllExports::GdipRecordMetafile(referenceHdc, type, &frameRect, frameUnit, description, &metafile);
83 SetNativeImage(metafile);
84 }
85
86 Metafile(IStream *stream, HDC referenceHdc, EmfType type = EmfTypeEmfPlusDual, const WCHAR *description = NULL)
87 {
88 #if 1
89 // FIXME
90 SetNativeImage(NULL);
91 #else
92 GpMetafile *metafile = NULL;
93 lastStatus = DllExports::GdipRecordMetafileStream(
94 stream, referenceHdc, type, NULL, MetafileFrameUnitGdi, description, &metafile);
95 SetNativeImage(metafile);
96 #endif
97 }
98
99 Metafile(
100 IStream *stream,
101 HDC referenceHdc,
102 const Rect &frameRect,
103 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
104 EmfType type = EmfTypeEmfPlusDual,
105 const WCHAR *description = NULL)
106 {
107 GpMetafile *metafile = NULL;
108 lastStatus = DllExports::GdipRecordMetafileI(referenceHdc, type, &frameRect, frameUnit, description, &metafile);
109 SetNativeImage(metafile);
110 }
111
112 Metafile(
113 const WCHAR *fileName,
114 HDC referenceHdc,
115 const RectF &frameRect,
116 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
117 EmfType type = EmfTypeEmfPlusDual,
118 const WCHAR *description = NULL)
119 {
120 GpMetafile *metafile = NULL;
121 lastStatus = DllExports::GdipRecordMetafileFileName(
122 fileName, referenceHdc, type, &frameRect, frameUnit, description, &metafile);
123 SetNativeImage(metafile);
124 }
125
126 Metafile(
127 const WCHAR *fileName,
128 HDC referenceHdc,
129 EmfType type = EmfTypeEmfPlusDual,
130 const WCHAR *description = NULL)
131 {
132 GpMetafile *metafile = NULL;
133 lastStatus = DllExports::GdipRecordMetafileFileName(
134 fileName, referenceHdc, type, NULL, MetafileFrameUnitGdi, description, &metafile);
135 SetNativeImage(metafile);
136 }
137
138 Metafile(IStream *stream)
139 {
140 GpMetafile *metafile = NULL;
141 lastStatus = DllExports::GdipCreateMetafileFromStream(stream, &metafile);
142 SetNativeImage(metafile);
143 }
144
145 Metafile(HENHMETAFILE hEmf, BOOL deleteEmf = FALSE)
146 {
147 GpMetafile *metafile = NULL;
148 lastStatus = DllExports::GdipCreateMetafileFromEmf(hEmf, deleteEmf, &metafile);
149 SetNativeImage(metafile);
150 }
151
152 Metafile(
153 HDC referenceHdc,
154 const Rect &frameRect,
155 MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
156 EmfType type = EmfTypeEmfPlusDual,
157 const WCHAR *description = NULL)
158 {
159 GpMetafile *metafile = NULL;
160 lastStatus = DllExports::GdipRecordMetafileI(referenceHdc, type, &frameRect, frameUnit, description, &metafile);
161 SetNativeImage(metafile);
162 }
163
164 static UINT
165 EmfToWmfBits(
166 HENHMETAFILE hemf,
167 UINT cbData16,
168 LPBYTE pData16,
169 INT iMapMode = MM_ANISOTROPIC,
170 EmfToWmfBitsFlags eFlags = EmfToWmfBitsFlagsDefault)
171 {
172 return DllExports::GdipEmfToWmfBits(hemf, cbData16, pData16, iMapMode, eFlags);
173 }
174
175 UINT
176 GetDownLevelRasterizationLimit() const
177 {
178 #if 1
179 return 0; // FIXME
180 #else
181 UINT metafileRasterizationLimitDpi = 0;
182 SetStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit(
183 GetNativeMetafile(), &metafileRasterizationLimitDpi));
184 return metafileRasterizationLimitDpi;
185 #endif
186 }
187
188 HENHMETAFILE
189 GetHENHMETAFILE() const
190 {
191 HENHMETAFILE hEmf;
192 SetStatus(DllExports::GdipGetHemfFromMetafile(GetNativeMetafile(), &hEmf));
193 return hEmf;
194 }
195
196 static Status
197 GetMetafileHeader(const WCHAR *filename, MetafileHeader *header)
198 {
199 return DllExports::GdipGetMetafileHeaderFromFile(filename, header);
200 }
201
202 static Status
203 GetMetafileHeader(HENHMETAFILE hEmf, MetafileHeader *header)
204 {
205 return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header);
206 }
207
208 static Status
209 GetMetafileHeader(HMETAFILE hWmf, const WmfPlaceableFileHeader *wmfPlaceableFileHeader, MetafileHeader *header)
210 {
211 return DllExports::GdipGetMetafileHeaderFromWmf(hWmf, wmfPlaceableFileHeader, header);
212 }
213
214 Status
215 GetMetafileHeader(MetafileHeader *header) const
216 {
217 return SetStatus(DllExports::GdipGetMetafileHeaderFromMetafile(GetNativeMetafile(), header));
218 }
219
220 static Status
221 GetMetafileHeader(IStream *stream, MetafileHeader *header)
222 {
223 return DllExports::GdipGetMetafileHeaderFromStream(stream, header);
224 }
225
226 Status
227 PlayRecord(EmfPlusRecordType recordType, UINT flags, UINT dataSize, const BYTE *data)
228 {
229 return SetStatus(DllExports::GdipPlayMetafileRecord(GetNativeMetafile(), recordType, flags, dataSize, data));
230 }
231
232 Status
233 SetDownLevelRasterizationLimit(UINT metafileRasterizationLimitDpi)
234 {
235 return SetStatus(
236 DllExports::GdipSetMetafileDownLevelRasterizationLimit(GetNativeMetafile(), metafileRasterizationLimitDpi));
237 }
238
239 protected:
240 GpMetafile *
241 GetNativeMetafile() const
242 {
243 return static_cast<GpMetafile *>(nativeImage);
244 }
245 };
246
247 #endif /* _GDIPLUSMETAFILE_H */