From e91d12454a6e709e9e5ded4369ae69f9c3db7455 Mon Sep 17 00:00:00 2001 From: Evan Stade Date: Tue, 31 Jul 2007 19:15:29 -0700 Subject: [PATCH] gdiplus: Added GdipGetMetafileHeaderFromMetafile stub. --- dlls/gdiplus/customlinecap.c | 1 + dlls/gdiplus/gdiplus.c | 2 + dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/image.c | 14 ++++ dlls/gdiplus/imageattributes.c | 1 + dlls/gdiplus/pathiterator.c | 1 + include/gdiplusenums.h | 11 +++ include/gdiplusflat.h | 1 + include/gdiplusmetaheader.h | 123 +++++++++++++++++++++++++++++++++ 9 files changed, 155 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/customlinecap.c b/dlls/gdiplus/customlinecap.c index aadea5fc2f4..eb851c9b907 100644 --- a/dlls/gdiplus/customlinecap.c +++ b/dlls/gdiplus/customlinecap.c @@ -20,6 +20,7 @@ #include "windef.h" #include "winbase.h" +#include "wingdi.h" #include "gdiplus.h" #include "gdiplus_private.h" diff --git a/dlls/gdiplus/gdiplus.c b/dlls/gdiplus/gdiplus.c index 80a4b9c4127..041d6feb33f 100644 --- a/dlls/gdiplus/gdiplus.c +++ b/dlls/gdiplus/gdiplus.c @@ -23,6 +23,8 @@ #include "winbase.h" #include "winerror.h" #include "wine/debug.h" +#include "wingdi.h" + #include "gdiplus.h" #include "gdiplus_private.h" diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 8502e4c7224..dc7633c69ae 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -317,7 +317,7 @@ @ stub GdipGetMetafileDownLevelRasterizationLimit @ stub GdipGetMetafileHeaderFromEmf @ stub GdipGetMetafileHeaderFromFile -@ stub GdipGetMetafileHeaderFromMetafile +@ stdcall GdipGetMetafileHeaderFromMetafile(ptr ptr) @ stub GdipGetMetafileHeaderFromStream @ stub GdipGetMetafileHeaderFromWmf @ stub GdipGetNearestColor diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index c37898124df..46b33578de0 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -134,6 +134,20 @@ GpStatus WINGDIPAPI GdipGetImageWidth(GpImage *image, UINT *width) return NotImplemented; } +GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile * metafile, + MetafileHeader * header) +{ + static int calls; + + if(!metafile || !header) + return InvalidParameter; + + if(!(calls++)) + FIXME("not implemented\n"); + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage *image, GDIPCONST GUID* dimensionID, UINT* count) { diff --git a/dlls/gdiplus/imageattributes.c b/dlls/gdiplus/imageattributes.c index b378143ee92..7c367809217 100644 --- a/dlls/gdiplus/imageattributes.c +++ b/dlls/gdiplus/imageattributes.c @@ -17,6 +17,7 @@ */ #include "windef.h" +#include "wingdi.h" #include "gdiplus.h" #include "gdiplus_private.h" diff --git a/dlls/gdiplus/pathiterator.c b/dlls/gdiplus/pathiterator.c index a9e1d3fe4d0..b978c26833b 100644 --- a/dlls/gdiplus/pathiterator.c +++ b/dlls/gdiplus/pathiterator.c @@ -20,6 +20,7 @@ #include "windef.h" #include "winbase.h" +#include "wingdi.h" #include "gdiplus.h" #include "gdiplus_private.h" diff --git a/include/gdiplusenums.h b/include/gdiplusenums.h index 2d3c22988c3..9d81051ac72 100644 --- a/include/gdiplusenums.h +++ b/include/gdiplusenums.h @@ -173,6 +173,16 @@ enum WrapMode WrapModeClamp }; +enum MetafileType +{ + MetafileTypeInvalid, + MetafileTypeWmf, + MetafileTypeWmfPlaceable, + MetafileTypeEmf, + MetafileTypeEmfPlusOnly, + MetafileTypeEmfPlusDual +}; + #ifndef __cplusplus typedef enum Unit Unit; @@ -191,6 +201,7 @@ typedef enum DashStyle DashStyle; typedef enum MatrixOrder MatrixOrder; typedef enum ImageType ImageType; typedef enum WrapMode WrapMode; +typedef enum MetafileType MetafileType; #endif /* end of c typedefs */ diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index e4c5ba0d36a..31b17f58264 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -142,6 +142,7 @@ GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*); GpStatus WINGDIPAPI GdipGetImageType(GpImage*,ImageType*); GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*); GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*); +GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*); GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*); GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**); diff --git a/include/gdiplusmetaheader.h b/include/gdiplusmetaheader.h index 2b4adf6b785..e59ab09c8e4 100644 --- a/include/gdiplusmetaheader.h +++ b/include/gdiplusmetaheader.h @@ -19,6 +19,25 @@ #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 typedef struct @@ -41,4 +60,108 @@ typedef struct #include +#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 */