Module: wine Branch: master Commit: 6931e629cd0624daaa0a103307cd7390c1c95a63 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6931e629cd0624daaa0a103307...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Nov 3 09:49:11 2017 +0300
gdiplus/metafile: Implement EmfPlusRecordTypeDrawPie playback.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Vincent Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdiplus/metafile.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c index 9beb3a3..c5c72e2 100644 --- a/dlls/gdiplus/metafile.c +++ b/dlls/gdiplus/metafile.c @@ -432,6 +432,18 @@ typedef struct EmfPlusDrawPath DWORD PenId; } EmfPlusDrawPath;
+typedef struct EmfPlusDrawPie +{ + EmfPlusRecordHeader Header; + float StartAngle; + float SweepAngle; + union + { + EmfPlusRect rect; + EmfPlusRectF rectF; + } RectData; +} EmfPlusDrawPie; + typedef struct EmfPlusFillPath { EmfPlusRecordHeader Header; @@ -2862,6 +2874,27 @@ GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile *metafile, return GdipDrawPath(real_metafile->playback_graphics, real_metafile->objtable[draw->PenId].u.pen, real_metafile->objtable[path].u.path); } + case EmfPlusRecordTypeDrawPie: + { + EmfPlusDrawPie *draw = (EmfPlusDrawPie *)header; + BYTE pen = flags & 0xff; + + if (pen >= EmfPlusObjectTableSize || real_metafile->objtable[pen].type != ObjectTypePen) + return InvalidParameter; + + if (dataSize != FIELD_OFFSET(EmfPlusDrawPie, RectData) - sizeof(EmfPlusRecordHeader) + + (flags & 0x4000 ? sizeof(EmfPlusRect) : sizeof(EmfPlusRectF))) + return InvalidParameter; + + if (flags & 0x4000) /* C */ + return GdipDrawPieI(real_metafile->playback_graphics, real_metafile->objtable[pen].u.pen, + draw->RectData.rect.X, draw->RectData.rect.Y, draw->RectData.rect.Width, + draw->RectData.rect.Height, draw->StartAngle, draw->SweepAngle); + else + return GdipDrawPie(real_metafile->playback_graphics, real_metafile->objtable[pen].u.pen, + draw->RectData.rectF.X, draw->RectData.rectF.Y, draw->RectData.rectF.Width, + draw->RectData.rectF.Height, draw->StartAngle, draw->SweepAngle); + } default: FIXME("Not implemented for record type %x\n", recordType); return NotImplemented;