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