Module: wine Branch: master Commit: e79c4caf143c9e143bae61f4de0659caf7b6a53c URL: http://source.winehq.org/git/wine.git/?a=commit;h=e79c4caf143c9e143bae61f4de...
Author: Piotr Caban piotr@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@codeweavers.com Signed-off-by: Vincent Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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},