Module: wine Branch: master Commit: e91d12454a6e709e9e5ded4369ae69f9c3db7455 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e91d12454a6e709e9e5ded4369...
Author: Evan Stade estade@gmail.com Date: Tue Jul 31 19:15:29 2007 -0700
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 deletions(-)
diff --git a/dlls/gdiplus/customlinecap.c b/dlls/gdiplus/customlinecap.c index aadea5f..eb851c9 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 80a4b9c..041d6fe 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 8502e4c..dc7633c 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 c378981..46b3357 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 b378143..7c36780 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 a9e1d3f..b978c26 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 2d3c229..9d81051 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 e4c5ba0..31b17f5 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 2b4adf6..e59ab09 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 <pshpack2.h>
typedef struct @@ -41,4 +60,108 @@ typedef struct
#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 */