Nikolay Sivov : gdiplus/metafile: Implement playback for EmfPlusRecordTypeFillPie.
Alexandre Julliard
julliard at winehq.org
Fri Nov 3 18:05:39 CDT 2017
Module: wine
Branch: master
Commit: 9c47baa3fcf132203eb87832cfe92cf48270ece1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9c47baa3fcf132203eb87832cfe92cf48270ece1
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri Nov 3 09:49:14 2017 +0300
gdiplus/metafile: Implement playback for EmfPlusRecordTypeFillPie.
Signed-off-by: Nikolay Sivov <nsivov 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 | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index 051f33e..3a9c8a8 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -476,6 +476,19 @@ typedef struct EmfPlusFillEllipse
} RectData;
} EmfPlusFillEllipse;
+typedef struct EmfPlusFillPie
+{
+ EmfPlusRecordHeader Header;
+ DWORD BrushId;
+ float StartAngle;
+ float SweepAngle;
+ union
+ {
+ EmfPlusRect rect;
+ EmfPlusRectF rectF;
+ } RectData;
+} EmfPlusFillPie;
+
typedef struct EmfPlusFont
{
DWORD Version;
@@ -2917,6 +2930,47 @@ GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile *metafile,
GdipDeleteBrush((GpBrush *)solidfill);
return stat;
}
+ case EmfPlusRecordTypeFillPie:
+ {
+ EmfPlusFillPie *fill = (EmfPlusFillPie *)header;
+ GpSolidFill *solidfill = NULL;
+ GpBrush *brush;
+
+ if (dataSize <= FIELD_OFFSET(EmfPlusFillPie, RectData) - sizeof(EmfPlusRecordHeader))
+ return InvalidParameter;
+ dataSize -= FIELD_OFFSET(EmfPlusFillPie, RectData) - sizeof(EmfPlusRecordHeader);
+
+ if (dataSize != (flags & 0x4000 ? sizeof(EmfPlusRect) : sizeof(EmfPlusRectF)))
+ return InvalidParameter;
+
+ if (flags & 0x8000) /* S */
+ {
+ stat = GdipCreateSolidFill(fill->BrushId, (GpSolidFill **)&solidfill);
+ if (stat != Ok)
+ return stat;
+ brush = (GpBrush *)solidfill;
+ }
+ else
+ {
+ if (fill->BrushId >= EmfPlusObjectTableSize ||
+ real_metafile->objtable[fill->BrushId].type != ObjectTypeBrush)
+ return InvalidParameter;
+
+ brush = real_metafile->objtable[fill->BrushId].u.brush;
+ }
+
+ if (flags & 0x4000) /* C */
+ stat = GdipFillPieI(real_metafile->playback_graphics, brush, fill->RectData.rect.X,
+ fill->RectData.rect.Y, fill->RectData.rect.Width, fill->RectData.rect.Height,
+ fill->StartAngle, fill->SweepAngle);
+ else
+ stat = GdipFillPie(real_metafile->playback_graphics, brush, fill->RectData.rectF.X,
+ fill->RectData.rectF.Y, fill->RectData.rectF.Width, fill->RectData.rectF.Height,
+ fill->StartAngle, fill->SweepAngle);
+
+ GdipDeleteBrush((GpBrush *)solidfill);
+ return stat;
+ }
case EmfPlusRecordTypeDrawPath:
{
EmfPlusDrawPath *draw = (EmfPlusDrawPath *)header;
More information about the wine-cvs
mailing list