reactos/sdk/include/psdk/gdiplusmetaheader.h

219 lines
3.9 KiB
C
Raw Normal View History

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