af062818b47340eef15700d2f0211576ba3506eevboxsync/*
af062818b47340eef15700d2f0211576ba3506eevboxsync * Copyright (C) 2007 Google (Evan Stade)
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is free software; you can redistribute it and/or
af062818b47340eef15700d2f0211576ba3506eevboxsync * modify it under the terms of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License as published by the Free Software Foundation; either
af062818b47340eef15700d2f0211576ba3506eevboxsync * version 2.1 of the License, or (at your option) any later version.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is distributed in the hope that it will be useful,
af062818b47340eef15700d2f0211576ba3506eevboxsync * but WITHOUT ANY WARRANTY; without even the implied warranty of
af062818b47340eef15700d2f0211576ba3506eevboxsync * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync * Lesser General Public License for more details.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * You should have received a copy of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License along with this library; if not, write to the Free Software
af062818b47340eef15700d2f0211576ba3506eevboxsync * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
af062818b47340eef15700d2f0211576ba3506eevboxsync */
af062818b47340eef15700d2f0211576ba3506eevboxsync
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync/*
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * a choice of LGPL license versions is made available with the language indicating
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * that LGPLv2 or any later version may be used, or where a choice of which version
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * of the LGPL is applied is otherwise unspecified.
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync */
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef _GDIPLUSMETAHEADER_H
af062818b47340eef15700d2f0211576ba3506eevboxsync#define _GDIPLUSMETAHEADER_H
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct
af062818b47340eef15700d2f0211576ba3506eevboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD iType;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD nSize;
af062818b47340eef15700d2f0211576ba3506eevboxsync RECTL rclBounds;
af062818b47340eef15700d2f0211576ba3506eevboxsync RECTL rclFrame;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD dSignature;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD nVersion;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD nBytes;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD nRecords;
af062818b47340eef15700d2f0211576ba3506eevboxsync WORD nHandles;
af062818b47340eef15700d2f0211576ba3506eevboxsync WORD sReserved;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD nDescription;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD offDescription;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD nPalEntries;
af062818b47340eef15700d2f0211576ba3506eevboxsync SIZEL szlDevice;
af062818b47340eef15700d2f0211576ba3506eevboxsync SIZEL szlMillimeters;
af062818b47340eef15700d2f0211576ba3506eevboxsync} ENHMETAHEADER3;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#include <pshpack2.h>
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct
af062818b47340eef15700d2f0211576ba3506eevboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsync INT16 Left;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT16 Top;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT16 Right;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT16 Bottom;
af062818b47340eef15700d2f0211576ba3506eevboxsync} PWMFRect16;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct
af062818b47340eef15700d2f0211576ba3506eevboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT32 Key;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT16 Hmf;
af062818b47340eef15700d2f0211576ba3506eevboxsync PWMFRect16 BoundingBox;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT16 Inch;
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT32 Reserved;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT16 Checksum;
af062818b47340eef15700d2f0211576ba3506eevboxsync} WmfPlaceableFileHeader;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#include <poppack.h>
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define GDIP_EMFPLUSFLAGS_DISPLAY 0x00000001
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifdef __cplusplus
af062818b47340eef15700d2f0211576ba3506eevboxsyncclass MetafileHeader
af062818b47340eef15700d2f0211576ba3506eevboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsyncpublic:
af062818b47340eef15700d2f0211576ba3506eevboxsync MetafileType Type;
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT Size;
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT Version;
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT EmfPlusFlags;
af062818b47340eef15700d2f0211576ba3506eevboxsync REAL DpiX;
af062818b47340eef15700d2f0211576ba3506eevboxsync REAL DpiY;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT X;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT Y;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT Width;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT Height;
af062818b47340eef15700d2f0211576ba3506eevboxsync union
af062818b47340eef15700d2f0211576ba3506eevboxsync {
af062818b47340eef15700d2f0211576ba3506eevboxsync METAHEADER WmfHeader;
af062818b47340eef15700d2f0211576ba3506eevboxsync ENHMETAHEADER3 EmfHeader;
af062818b47340eef15700d2f0211576ba3506eevboxsync };
af062818b47340eef15700d2f0211576ba3506eevboxsync INT EmfPlusHeaderSize;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT LogicalDpiX;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT LogicalDpiY;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncpublic:
af062818b47340eef15700d2f0211576ba3506eevboxsync MetafileType GetType() const { return Type; }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT GetMetafileSize() const { return Size; }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT GetVersion() const { return Version; }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT GetEmfPlusFlags() const { return EmfPlusFlags; }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync REAL GetDpiX() const { return DpiX; }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync REAL GetDpiY() const { return DpiY; }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync VOID GetBounds (OUT Rect *r) const
af062818b47340eef15700d2f0211576ba3506eevboxsync {
af062818b47340eef15700d2f0211576ba3506eevboxsync r->X = X;
af062818b47340eef15700d2f0211576ba3506eevboxsync r->Y = Y;
af062818b47340eef15700d2f0211576ba3506eevboxsync r->Width = Width;
af062818b47340eef15700d2f0211576ba3506eevboxsync r->Height = Height;
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync BOOL IsWmf() const
af062818b47340eef15700d2f0211576ba3506eevboxsync {
af062818b47340eef15700d2f0211576ba3506eevboxsync return ((Type == MetafileTypeWmf) || (Type == MetafileTypeWmfPlaceable));
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync BOOL IsWmfPlaceable() const { return (Type == MetafileTypeWmfPlaceable); }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync BOOL IsEmf() const { return (Type == MetafileTypeEmf); }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync BOOL IsEmfOrEmfPlus() const { return (Type >= MetafileTypeEmf); }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync BOOL IsEmfPlus() const { return (Type >= MetafileTypeEmfPlusOnly); }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync BOOL IsEmfPlusDual() const { return (Type == MetafileTypeEmfPlusDual); }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync BOOL IsEmfPlusOnly() const { return (Type == MetafileTypeEmfPlusOnly); }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync BOOL IsDisplay() const
af062818b47340eef15700d2f0211576ba3506eevboxsync {
af062818b47340eef15700d2f0211576ba3506eevboxsync return IsEmfPlus() && ((EmfPlusFlags & GDIP_EMFPLUSFLAGS_DISPLAY) != 0);
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync const METAHEADER * GetWmfHeader() const
af062818b47340eef15700d2f0211576ba3506eevboxsync {
af062818b47340eef15700d2f0211576ba3506eevboxsync return IsWmf() ? &WmfHeader : NULL;
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync const ENHMETAHEADER3 * GetEmfHeader() const
af062818b47340eef15700d2f0211576ba3506eevboxsync {
af062818b47340eef15700d2f0211576ba3506eevboxsync return IsEmfOrEmfPlus() ? &EmfHeader : NULL;
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync};
af062818b47340eef15700d2f0211576ba3506eevboxsync#else /* end of c++ typedefs */
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct MetafileHeader
af062818b47340eef15700d2f0211576ba3506eevboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsync MetafileType Type;
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT Size;
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT Version;
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT EmfPlusFlags;
af062818b47340eef15700d2f0211576ba3506eevboxsync REAL DpiX;
af062818b47340eef15700d2f0211576ba3506eevboxsync REAL DpiY;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT X;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT Y;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT Width;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT Height;
af062818b47340eef15700d2f0211576ba3506eevboxsync union
af062818b47340eef15700d2f0211576ba3506eevboxsync {
af062818b47340eef15700d2f0211576ba3506eevboxsync METAHEADER WmfHeader;
af062818b47340eef15700d2f0211576ba3506eevboxsync ENHMETAHEADER3 EmfHeader;
af062818b47340eef15700d2f0211576ba3506eevboxsync } DUMMYUNIONNAME;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT EmfPlusHeaderSize;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT LogicalDpiX;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT LogicalDpiY;
af062818b47340eef15700d2f0211576ba3506eevboxsync} MetafileHeader;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* end of c typedefs */
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* _GDIPLUSMETAHEADER_H */