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