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