| /* | |
| * Copyright (C) 2007 Google (Evan Stade) | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | |
| */ | |
| #ifndef _GDIPLUSMETAHEADER_H | |
| #define _GDIPLUSMETAHEADER_H | |
| typedef struct | |
| { | |
| 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; | |
| #include <pshpack2.h> | |
| typedef struct | |
| { | |
| INT16 Left; | |
| INT16 Top; | |
| INT16 Right; | |
| INT16 Bottom; | |
| } PWMFRect16; | |
| typedef struct | |
| { | |
| UINT32 Key; | |
| INT16 Hmf; | |
| PWMFRect16 BoundingBox; | |
| INT16 Inch; | |
| UINT32 Reserved; | |
| INT16 Checksum; | |
| } WmfPlaceableFileHeader; | |
| #include <poppack.h> | |
| #define GDIP_EMFPLUSFLAGS_DISPLAY 0x00000001 | |
| #ifdef __cplusplus | |
| class MetafileHeader | |
| { | |
| public: | |
| MetafileType Type; | |
| UINT Size; | |
| UINT Version; | |
| UINT EmfPlusFlags; | |
| REAL DpiX; | |
| REAL DpiY; | |
| INT X; | |
| INT Y; | |
| INT Width; | |
| INT Height; | |
| union | |
| { | |
| METAHEADER WmfHeader; | |
| ENHMETAHEADER3 EmfHeader; | |
| }; | |
| INT EmfPlusHeaderSize; | |
| INT LogicalDpiX; | |
| INT LogicalDpiY; | |
| public: | |
| MetafileType GetType() const { return Type; } | |
| UINT GetMetafileSize() const { return Size; } | |
| UINT GetVersion() const { return Version; } | |
| UINT GetEmfPlusFlags() const { return EmfPlusFlags; } | |
| REAL GetDpiX() const { return DpiX; } | |
| REAL GetDpiY() const { return DpiY; } | |
| VOID GetBounds (OUT Rect *r) const | |
| { | |
| r->X = X; | |
| r->Y = Y; | |
| r->Width = Width; | |
| r->Height = Height; | |
| } | |
| BOOL IsWmf() const | |
| { | |
| return ((Type == MetafileTypeWmf) || (Type == MetafileTypeWmfPlaceable)); | |
| } | |
| BOOL IsWmfPlaceable() const { return (Type == MetafileTypeWmfPlaceable); } | |
| BOOL IsEmf() const { return (Type == MetafileTypeEmf); } | |
| BOOL IsEmfOrEmfPlus() const { return (Type >= MetafileTypeEmf); } | |
| BOOL IsEmfPlus() const { return (Type >= MetafileTypeEmfPlusOnly); } | |
| BOOL IsEmfPlusDual() const { return (Type == MetafileTypeEmfPlusDual); } | |
| BOOL IsEmfPlusOnly() const { return (Type == MetafileTypeEmfPlusOnly); } | |
| BOOL IsDisplay() const | |
| { | |
| return IsEmfPlus() && ((EmfPlusFlags & GDIP_EMFPLUSFLAGS_DISPLAY) != 0); | |
| } | |
| const METAHEADER * GetWmfHeader() const | |
| { | |
| return IsWmf() ? &WmfHeader : NULL; | |
| } | |
| const ENHMETAHEADER3 * GetEmfHeader() const | |
| { | |
| return IsEmfOrEmfPlus() ? &EmfHeader : NULL; | |
| } | |
| }; | |
| #else /* end of c++ typedefs */ | |
| typedef struct MetafileHeader | |
| { | |
| MetafileType Type; | |
| UINT Size; | |
| UINT Version; | |
| UINT EmfPlusFlags; | |
| REAL DpiX; | |
| REAL DpiY; | |
| INT X; | |
| INT Y; | |
| INT Width; | |
| INT Height; | |
| union | |
| { | |
| METAHEADER WmfHeader; | |
| ENHMETAHEADER3 EmfHeader; | |
| } DUMMYUNIONNAME; | |
| INT EmfPlusHeaderSize; | |
| INT LogicalDpiX; | |
| INT LogicalDpiY; | |
| } MetafileHeader; | |
| #endif /* end of c typedefs */ | |
| #endif /* _GDIPLUSMETAHEADER_H */ |