2007-07-25 02:19:15 +02:00
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
|
2007-08-01 04:15:29 +02:00
|
|
|
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;
|
|
|
|
|
2007-07-25 02:19:15 +02:00
|
|
|
#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>
|
|
|
|
|
2007-08-01 04:15:29 +02:00
|
|
|
#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 */
|
|
|
|
|
2007-07-25 02:19:15 +02:00
|
|
|
#endif /* _GDIPLUSMETAHEADER_H */
|