Piotr Caban : gdiplus: Add partial support for GdipDrawPath on metafiles.
Alexandre Julliard
julliard at winehq.org
Thu Jul 13 14:41:34 CDT 2017
Module: wine
Branch: master
Commit: e79c4caf143c9e143bae61f4de0659caf7b6a53c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e79c4caf143c9e143bae61f4de0659caf7b6a53c
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Jul 13 11:53:55 2017 +0200
gdiplus: Add partial support for GdipDrawPath on metafiles.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/gdiplus/metafile.c | 21 ++++++++++++++++++++-
dlls/gdiplus/tests/metafile.c | 2 +-
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index 7767e39..3d6214d 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -345,6 +345,12 @@ typedef struct EmfPlusDrawImagePoints
} PointData[3];
} EmfPlusDrawImagePoints;
+typedef struct EmfPlusDrawPath
+{
+ EmfPlusRecordHeader Header;
+ DWORD PenId;
+} EmfPlusDrawPath;
+
static DWORD METAFILE_AddObjectId(GpMetafile *metafile)
{
return (metafile->next_object_id++) % 64;
@@ -2654,6 +2660,7 @@ static GpStatus METAFILE_AddPathObject(GpMetafile *metafile, GpPath *path, DWORD
GpStatus stat;
DWORD i, size;
+ *id = -1;
if (metafile->metafile_type != MetafileTypeEmfPlusOnly && metafile->metafile_type != MetafileTypeEmfPlusDual)
return Ok;
@@ -2722,6 +2729,7 @@ static GpStatus METAFILE_AddPenObject(GpMetafile *metafile, GpPen *pen, DWORD *i
GpStatus stat;
BOOL result;
+ *id = -1;
if (metafile->metafile_type != MetafileTypeEmfPlusOnly && metafile->metafile_type != MetafileTypeEmfPlusDual)
return Ok;
@@ -2881,11 +2889,16 @@ static GpStatus METAFILE_AddPenObject(GpMetafile *metafile, GpPen *pen, DWORD *i
GpStatus METAFILE_DrawPath(GpMetafile *metafile, GpPen *pen, GpPath *path)
{
+ EmfPlusDrawPath *draw_path_record;
DWORD path_id;
DWORD pen_id;
GpStatus stat;
- FIXME("stub!\n");
+ if (metafile->metafile_type == MetafileTypeEmf)
+ {
+ FIXME("stub!\n");
+ return NotImplemented;
+ }
stat = METAFILE_AddPenObject(metafile, pen, &pen_id);
if (stat != Ok) return stat;
@@ -2893,6 +2906,12 @@ GpStatus METAFILE_DrawPath(GpMetafile *metafile, GpPen *pen, GpPath *path)
stat = METAFILE_AddPathObject(metafile, path, &path_id);
if (stat != Ok) return stat;
+ stat = METAFILE_AllocateRecord(metafile, sizeof(EmfPlusDrawPath), (void**)&draw_path_record);
+ if (stat != Ok) return stat;
+ draw_path_record->Header.Type = EmfPlusRecordTypeDrawPath;
+ draw_path_record->Header.Flags = path_id;
+ draw_path_record->PenId = pen_id;
+
METAFILE_WriteRecords(metafile);
return NotImplemented;
}
diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c
index 7dd5234..fe14e29 100644
--- a/dlls/gdiplus/tests/metafile.c
+++ b/dlls/gdiplus/tests/metafile.c
@@ -2488,7 +2488,7 @@ static const emfplus_record draw_path_records[] = {
{0, EmfPlusRecordTypeHeader},
{0, EmfPlusRecordTypeObject},
{0, EmfPlusRecordTypeObject},
- {1, EmfPlusRecordTypeDrawPath},
+ {0, EmfPlusRecordTypeDrawPath},
{1, EMR_SAVEDC},
{1, EMR_SETICMMODE},
{1, EMR_BITBLT},
More information about the wine-cvs
mailing list