| /* |
| * 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 */ |