1 | /*
|
---|
2 | * gdiplusmetaheader.h
|
---|
3 | *
|
---|
4 | * GDI+ metafile header structure
|
---|
5 | *
|
---|
6 | * This file is part of the w32api package.
|
---|
7 | *
|
---|
8 | * Contributors:
|
---|
9 | * Created by Markus Koenig <markus@stber-koenig.de>
|
---|
10 | *
|
---|
11 | * THIS SOFTWARE IS NOT COPYRIGHTED
|
---|
12 | *
|
---|
13 | * This source code is offered for use in the public domain. You may
|
---|
14 | * use, modify or distribute it freely.
|
---|
15 | *
|
---|
16 | * This code is distributed in the hope that it will be useful but
|
---|
17 | * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
---|
18 | * DISCLAIMED. This includes but is not limited to warranties of
|
---|
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
---|
20 | *
|
---|
21 | */
|
---|
22 |
|
---|
23 | #ifndef __GDIPLUS_METAHEADER_H
|
---|
24 | #define __GDIPLUS_METAHEADER_H
|
---|
25 | #if __GNUC__ >=3
|
---|
26 | #pragma GCC system_header
|
---|
27 | #endif
|
---|
28 |
|
---|
29 |
|
---|
30 | /*
|
---|
31 | * FIXME: is 1 the correct value for GDIP_EMFPLUSFLAGS_DISPLAY? This number
|
---|
32 | * has been determined by calling Metafile::GetMetafileHeader() on a EMF+
|
---|
33 | * metafile which was recorded on a display device context (SampleMetafile.emf).
|
---|
34 | */
|
---|
35 | #ifdef __cplusplus
|
---|
36 | const UINT GDIP_EMFPLUSFLAGS_DISPLAY = 1;
|
---|
37 | #else
|
---|
38 | #define GDIP_EMFPLUSFLAGS_DISPLAY ((UINT) 1)
|
---|
39 | #endif
|
---|
40 |
|
---|
41 | typedef struct tagENHMETAHEADER3 {
|
---|
42 | DWORD iType;
|
---|
43 | DWORD nSize;
|
---|
44 | RECTL rclBounds;
|
---|
45 | RECTL rclFrame;
|
---|
46 | DWORD dSignature;
|
---|
47 | DWORD nVersion;
|
---|
48 | DWORD nBytes;
|
---|
49 | DWORD nRecords;
|
---|
50 | WORD nHandles;
|
---|
51 | WORD sReserved;
|
---|
52 | DWORD nDescription;
|
---|
53 | DWORD offDescription;
|
---|
54 | DWORD nPalEntries;
|
---|
55 | SIZEL szlDevice;
|
---|
56 | SIZEL szlMillimeters;
|
---|
57 | } ENHMETAHEADER3,*LPENHMETAHEADER3;
|
---|
58 |
|
---|
59 | typedef struct PWMFRect16 {
|
---|
60 | INT16 Left;
|
---|
61 | INT16 Top;
|
---|
62 | INT16 Right;
|
---|
63 | INT16 Bottom;
|
---|
64 | } PWMFRect16;
|
---|
65 |
|
---|
66 | typedef struct WmfPlaceableFileHeader {
|
---|
67 | UINT32 Key;
|
---|
68 | INT16 Hmf;
|
---|
69 | PWMFRect16 BoundingBox;
|
---|
70 | INT16 Inch;
|
---|
71 | UINT32 Reserved;
|
---|
72 | INT16 Checksum;
|
---|
73 | } WmfPlaceableFileHeader;
|
---|
74 |
|
---|
75 | typedef struct MetafileHeader {
|
---|
76 | MetafileType Type;
|
---|
77 | UINT Size;
|
---|
78 | UINT Version;
|
---|
79 | UINT EmfPlusFlags;
|
---|
80 | REAL DpiX;
|
---|
81 | REAL DpiY;
|
---|
82 | INT X;
|
---|
83 | INT Y;
|
---|
84 | INT Width;
|
---|
85 | INT Height;
|
---|
86 | __extension__ union {
|
---|
87 | METAHEADER WmfHeader;
|
---|
88 | ENHMETAHEADER3 EmfHeader;
|
---|
89 | };
|
---|
90 | INT EmfPlusHeaderSize;
|
---|
91 | INT LogicalDpiX;
|
---|
92 | INT LogicalDpiY;
|
---|
93 |
|
---|
94 | #ifdef __cplusplus
|
---|
95 | public:
|
---|
96 | void GetBounds(Rect *rect) const
|
---|
97 | {
|
---|
98 | if (rect)
|
---|
99 | {
|
---|
100 | rect->X = X;
|
---|
101 | rect->Y = Y;
|
---|
102 | rect->Width = Width;
|
---|
103 | rect->Height = Height;
|
---|
104 | }
|
---|
105 | }
|
---|
106 | REAL GetDpiX() const
|
---|
107 | {
|
---|
108 | return DpiX;
|
---|
109 | }
|
---|
110 | REAL GetDpiY() const
|
---|
111 | {
|
---|
112 | return DpiY;
|
---|
113 | }
|
---|
114 | const ENHMETAHEADER3* GetEmfHeader() const
|
---|
115 | {
|
---|
116 | if (Type == MetafileTypeEmf
|
---|
117 | || Type == MetafileTypeEmfPlusOnly
|
---|
118 | || Type == MetafileTypeEmfPlusDual)
|
---|
119 | {
|
---|
120 | return &EmfHeader;
|
---|
121 | }
|
---|
122 | else
|
---|
123 | {
|
---|
124 | return NULL;
|
---|
125 | }
|
---|
126 | }
|
---|
127 | UINT GetEmfPlusFlags() const
|
---|
128 | {
|
---|
129 | return EmfPlusFlags;
|
---|
130 | }
|
---|
131 | UINT GetMetafileSize() const
|
---|
132 | {
|
---|
133 | return Size;
|
---|
134 | }
|
---|
135 | MetafileType GetType() const
|
---|
136 | {
|
---|
137 | return Type;
|
---|
138 | }
|
---|
139 | UINT GetVersion() const
|
---|
140 | {
|
---|
141 | return Version;
|
---|
142 | }
|
---|
143 | const METAHEADER* GetWmfHeader() const
|
---|
144 | {
|
---|
145 | if (Type == MetafileTypeWmf || Type == MetafileTypeWmfPlaceable)
|
---|
146 | {
|
---|
147 | return &WmfHeader;
|
---|
148 | }
|
---|
149 | else
|
---|
150 | {
|
---|
151 | return NULL;
|
---|
152 | }
|
---|
153 | }
|
---|
154 | BOOL IsDisplay() const
|
---|
155 | {
|
---|
156 | return EmfPlusFlags == GDIP_EMFPLUSFLAGS_DISPLAY;
|
---|
157 | }
|
---|
158 | BOOL IsEmf() const
|
---|
159 | {
|
---|
160 | return Type == MetafileTypeEmf;
|
---|
161 | }
|
---|
162 | BOOL IsEmfOrEmfPlus() const
|
---|
163 | {
|
---|
164 | return Type == MetafileTypeEmf
|
---|
165 | || Type == MetafileTypeEmfPlusOnly
|
---|
166 | || Type == MetafileTypeEmfPlusDual;
|
---|
167 | }
|
---|
168 | BOOL IsEmfPlus() const
|
---|
169 | {
|
---|
170 | return Type == MetafileTypeEmfPlusOnly
|
---|
171 | || Type == MetafileTypeEmfPlusDual;
|
---|
172 | }
|
---|
173 | BOOL IsEmfPlusDual() const
|
---|
174 | {
|
---|
175 | return Type == MetafileTypeEmfPlusDual;
|
---|
176 | }
|
---|
177 | BOOL IsEmfPlusOnly() const
|
---|
178 | {
|
---|
179 | return Type == MetafileTypeEmfPlusOnly;
|
---|
180 | }
|
---|
181 | BOOL IsWmf() const
|
---|
182 | {
|
---|
183 | return Type == MetafileTypeWmf
|
---|
184 | || Type == MetafileTypeWmfPlaceable;
|
---|
185 | }
|
---|
186 | BOOL IsWmfPlaceable() const
|
---|
187 | {
|
---|
188 | return Type == MetafileTypeWmfPlaceable;
|
---|
189 | }
|
---|
190 | #endif
|
---|
191 | } MetafileHeader;
|
---|
192 |
|
---|
193 | #endif /* __GDIPLUS_METAHEADER_H */
|
---|