Shawn M. Chapla : gdiplus: Add FillRegion record deserialization.
Alexandre Julliard
julliard at winehq.org
Wed Jul 22 16:34:29 CDT 2020
Module: wine
Branch: master
Commit: 8191ed86ca592adbce8e52963a52cfccddfcd8bd
URL: https://source.winehq.org/git/wine.git/?a=commit;h=8191ed86ca592adbce8e52963a52cfccddfcd8bd
Author: Shawn M. Chapla <schapla at codeweavers.com>
Date: Mon Jul 20 22:45:18 2020 -0400
gdiplus: Add FillRegion record deserialization.
Signed-off-by: Shawn M. Chapla <schapla at codeweavers.com>
Signed-off-by: Esme Povirk <esme at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/gdiplus/metafile.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index d6bcbb5c12..ed4e8a8be4 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -563,6 +563,16 @@ typedef struct EmfPlusDrawDriverString
BYTE VariableData[1];
} EmfPlusDrawDriverString;
+typedef struct EmfPlusFillRegion
+{
+ EmfPlusRecordHeader Header;
+ union
+ {
+ DWORD BrushId;
+ EmfPlusARGB Color;
+ } data;
+} EmfPlusFillRegion;
+
static void metafile_free_object_table_entry(GpMetafile *metafile, BYTE id)
{
struct emfplus_object *object = &metafile->objtable[id];
@@ -3438,6 +3448,42 @@ GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile *metafile,
return stat;
}
+ case EmfPlusRecordTypeFillRegion:
+ {
+ EmfPlusFillRegion * const fill = (EmfPlusFillRegion*)header;
+ GpSolidFill *solidfill = NULL;
+ GpBrush *brush;
+ BYTE region = flags & 0xff;
+
+ if (dataSize != sizeof(EmfPlusFillRegion) - sizeof(EmfPlusRecordHeader))
+ return InvalidParameter;
+
+ if (region >= EmfPlusObjectTableSize ||
+ real_metafile->objtable[region].type != ObjectTypeRegion)
+ return InvalidParameter;
+
+ if (flags & 0x8000)
+ {
+ stat = GdipCreateSolidFill(fill->data.Color, &solidfill);
+ if (stat != Ok)
+ return stat;
+ brush = (GpBrush*)solidfill;
+ }
+ else
+ {
+ if (fill->data.BrushId >= EmfPlusObjectTableSize ||
+ real_metafile->objtable[fill->data.BrushId].type != ObjectTypeBrush)
+ return InvalidParameter;
+
+ brush = real_metafile->objtable[fill->data.BrushId].u.brush;
+ }
+
+ stat = GdipFillRegion(real_metafile->playback_graphics, brush,
+ real_metafile->objtable[region].u.region);
+ GdipDeleteBrush((GpBrush*)solidfill);
+
+ return stat;
+ }
default:
FIXME("Not implemented for record type %x\n", recordType);
return NotImplemented;
More information about the wine-cvs
mailing list