Evan Stade : gdiplus: Added GdipGetMetafileHeaderFromMetafile stub.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Aug 1 05:16:51 CDT 2007
Module: wine
Branch: master
Commit: e91d12454a6e709e9e5ded4369ae69f9c3db7455
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e91d12454a6e709e9e5ded4369ae69f9c3db7455
Author: Evan Stade <estade at 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 */
More information about the wine-cvs
mailing list