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