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