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: GetBoundsMetafileHeader96 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 } GetDpiXMetafileHeader106 REAL GetDpiX() const 107 { 108 return DpiX; 109 } GetDpiYMetafileHeader110 REAL GetDpiY() const 111 { 112 return DpiY; 113 } GetEmfHeaderMetafileHeader114 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 } GetEmfPlusFlagsMetafileHeader127 UINT GetEmfPlusFlags() const 128 { 129 return EmfPlusFlags; 130 } GetMetafileSizeMetafileHeader131 UINT GetMetafileSize() const 132 { 133 return Size; 134 } GetTypeMetafileHeader135 MetafileType GetType() const 136 { 137 return Type; 138 } GetVersionMetafileHeader139 UINT GetVersion() const 140 { 141 return Version; 142 } GetWmfHeaderMetafileHeader143 const METAHEADER* GetWmfHeader() const 144 { 145 if (Type == MetafileTypeWmf || Type == MetafileTypeWmfPlaceable) 146 { 147 return &WmfHeader; 148 } 149 else 150 { 151 return NULL; 152 } 153 } IsDisplayMetafileHeader154 BOOL IsDisplay() const 155 { 156 return EmfPlusFlags == GDIP_EMFPLUSFLAGS_DISPLAY; 157 } IsEmfMetafileHeader158 BOOL IsEmf() const 159 { 160 return Type == MetafileTypeEmf; 161 } IsEmfOrEmfPlusMetafileHeader162 BOOL IsEmfOrEmfPlus() const 163 { 164 return Type == MetafileTypeEmf 165 || Type == MetafileTypeEmfPlusOnly 166 || Type == MetafileTypeEmfPlusDual; 167 } IsEmfPlusMetafileHeader168 BOOL IsEmfPlus() const 169 { 170 return Type == MetafileTypeEmfPlusOnly 171 || Type == MetafileTypeEmfPlusDual; 172 } IsEmfPlusDualMetafileHeader173 BOOL IsEmfPlusDual() const 174 { 175 return Type == MetafileTypeEmfPlusDual; 176 } IsEmfPlusOnlyMetafileHeader177 BOOL IsEmfPlusOnly() const 178 { 179 return Type == MetafileTypeEmfPlusOnly; 180 } IsWmfMetafileHeader181 BOOL IsWmf() const 182 { 183 return Type == MetafileTypeWmf 184 || Type == MetafileTypeWmfPlaceable; 185 } IsWmfPlaceableMetafileHeader186 BOOL IsWmfPlaceable() const 187 { 188 return Type == MetafileTypeWmfPlaceable; 189 } 190 #endif 191 } MetafileHeader; 192 193 #endif /* __GDIPLUS_METAHEADER_H */ 194