| /* | |
| * gdiplusmetaheader.h | |
| * | |
| * GDI+ metafile header structure | |
| * | |
| * This file is part of the w32api package. | |
| * | |
| * Contributors: | |
| * Created by Markus Koenig <markus@stber-koenig.de> | |
| * | |
| * THIS SOFTWARE IS NOT COPYRIGHTED | |
| * | |
| * This source code is offered for use in the public domain. You may | |
| * use, modify or distribute it freely. | |
| * | |
| * This code is distributed in the hope that it will be useful but | |
| * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY | |
| * DISCLAIMED. This includes but is not limited to warranties of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| * | |
| */ | |
| #ifndef __GDIPLUS_METAHEADER_H | |
| #define __GDIPLUS_METAHEADER_H | |
| #if __GNUC__ >=3 | |
| #pragma GCC system_header | |
| #endif | |
| /* | |
| * FIXME: is 1 the correct value for GDIP_EMFPLUSFLAGS_DISPLAY? This number | |
| * has been determined by calling Metafile::GetMetafileHeader() on a EMF+ | |
| * metafile which was recorded on a display device context (SampleMetafile.emf). | |
| */ | |
| #ifdef __cplusplus | |
| const UINT GDIP_EMFPLUSFLAGS_DISPLAY = 1; | |
| #else | |
| #define GDIP_EMFPLUSFLAGS_DISPLAY ((UINT) 1) | |
| #endif | |
| typedef struct tagENHMETAHEADER3 { | |
| DWORD iType; | |
| DWORD nSize; | |
| RECTL rclBounds; | |
| RECTL rclFrame; | |
| DWORD dSignature; | |
| DWORD nVersion; | |
| DWORD nBytes; | |
| DWORD nRecords; | |
| WORD nHandles; | |
| WORD sReserved; | |
| DWORD nDescription; | |
| DWORD offDescription; | |
| DWORD nPalEntries; | |
| SIZEL szlDevice; | |
| SIZEL szlMillimeters; | |
| } ENHMETAHEADER3,*LPENHMETAHEADER3; | |
| typedef struct PWMFRect16 { | |
| INT16 Left; | |
| INT16 Top; | |
| INT16 Right; | |
| INT16 Bottom; | |
| } PWMFRect16; | |
| typedef struct WmfPlaceableFileHeader { | |
| UINT32 Key; | |
| INT16 Hmf; | |
| PWMFRect16 BoundingBox; | |
| INT16 Inch; | |
| UINT32 Reserved; | |
| INT16 Checksum; | |
| } WmfPlaceableFileHeader; | |
| typedef struct MetafileHeader { | |
| MetafileType Type; | |
| UINT Size; | |
| UINT Version; | |
| UINT EmfPlusFlags; | |
| REAL DpiX; | |
| REAL DpiY; | |
| INT X; | |
| INT Y; | |
| INT Width; | |
| INT Height; | |
| __extension__ union { | |
| METAHEADER WmfHeader; | |
| ENHMETAHEADER3 EmfHeader; | |
| }; | |
| INT EmfPlusHeaderSize; | |
| INT LogicalDpiX; | |
| INT LogicalDpiY; | |
| #ifdef __cplusplus | |
| public: | |
| void GetBounds(Rect *rect) const | |
| { | |
| if (rect) | |
| { | |
| rect->X = X; | |
| rect->Y = Y; | |
| rect->Width = Width; | |
| rect->Height = Height; | |
| } | |
| } | |
| REAL GetDpiX() const | |
| { | |
| return DpiX; | |
| } | |
| REAL GetDpiY() const | |
| { | |
| return DpiY; | |
| } | |
| const ENHMETAHEADER3* GetEmfHeader() const | |
| { | |
| if (Type == MetafileTypeEmf | |
| || Type == MetafileTypeEmfPlusOnly | |
| || Type == MetafileTypeEmfPlusDual) | |
| { | |
| return &EmfHeader; | |
| } | |
| else | |
| { | |
| return NULL; | |
| } | |
| } | |
| UINT GetEmfPlusFlags() const | |
| { | |
| return EmfPlusFlags; | |
| } | |
| UINT GetMetafileSize() const | |
| { | |
| return Size; | |
| } | |
| MetafileType GetType() const | |
| { | |
| return Type; | |
| } | |
| UINT GetVersion() const | |
| { | |
| return Version; | |
| } | |
| const METAHEADER* GetWmfHeader() const | |
| { | |
| if (Type == MetafileTypeWmf || Type == MetafileTypeWmfPlaceable) | |
| { | |
| return &WmfHeader; | |
| } | |
| else | |
| { | |
| return NULL; | |
| } | |
| } | |
| BOOL IsDisplay() const | |
| { | |
| return EmfPlusFlags == GDIP_EMFPLUSFLAGS_DISPLAY; | |
| } | |
| BOOL IsEmf() const | |
| { | |
| return Type == MetafileTypeEmf; | |
| } | |
| BOOL IsEmfOrEmfPlus() const | |
| { | |
| return Type == MetafileTypeEmf | |
| || Type == MetafileTypeEmfPlusOnly | |
| || Type == MetafileTypeEmfPlusDual; | |
| } | |
| BOOL IsEmfPlus() const | |
| { | |
| return Type == MetafileTypeEmfPlusOnly | |
| || Type == MetafileTypeEmfPlusDual; | |
| } | |
| BOOL IsEmfPlusDual() const | |
| { | |
| return Type == MetafileTypeEmfPlusDual; | |
| } | |
| BOOL IsEmfPlusOnly() const | |
| { | |
| return Type == MetafileTypeEmfPlusOnly; | |
| } | |
| BOOL IsWmf() const | |
| { | |
| return Type == MetafileTypeWmf | |
| || Type == MetafileTypeWmfPlaceable; | |
| } | |
| BOOL IsWmfPlaceable() const | |
| { | |
| return Type == MetafileTypeWmfPlaceable; | |
| } | |
| #endif | |
| } MetafileHeader; | |
| #endif /* __GDIPLUS_METAHEADER_H */ |