Piotr Caban : gdiplus: Add support for creating image object containing metafile.
Alexandre Julliard
julliard at winehq.org
Mon Jul 17 15:37:20 CDT 2017
Module: wine
Branch: master
Commit: 8498aa3dfab65aac046abe7d1446b0298498c0b5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8498aa3dfab65aac046abe7d1446b0298498c0b5
Author: Piotr Caban <piotr at codeweavers.com>
Date: Sat Jul 15 17:29:58 2017 +0200
gdiplus: Add support for creating image object containing metafile.
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 | 38 +++++++++++++++++++++++++++++++++++---
1 file changed, 35 insertions(+), 3 deletions(-)
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index a1db09b..cff5197 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -2482,6 +2482,10 @@ static GpStatus METAFILE_FillEmfPlusBitmap(EmfPlusBitmap *record, IStream *strea
static GpStatus METAFILE_AddImageObject(GpMetafile *metafile, GpImage *image, DWORD *id)
{
+ EmfPlusObject *object_record;
+ GpStatus stat;
+ DWORD size;
+
*id = -1;
if (metafile->metafile_type != MetafileTypeEmfPlusOnly && metafile->metafile_type != MetafileTypeEmfPlusDual)
@@ -2489,10 +2493,8 @@ static GpStatus METAFILE_AddImageObject(GpMetafile *metafile, GpImage *image, DW
if (image->type == ImageTypeBitmap)
{
- EmfPlusObject *object_record;
IStream *stream;
- DWORD size, aligned_size;
- GpStatus stat;
+ DWORD aligned_size;
stat = METAFILE_CreateCompressedImageStream(image, &stream, &size);
if (stat != Ok) return stat;
@@ -2519,6 +2521,36 @@ static GpStatus METAFILE_AddImageObject(GpMetafile *metafile, GpImage *image, DW
if (stat != Ok) METAFILE_RemoveLastRecord(metafile, &object_record->Header);
return stat;
}
+ else if (image->type == ImageTypeMetafile)
+ {
+ HENHMETAFILE hemf = ((GpMetafile*)image)->hemf;
+ EmfPlusMetafile *metafile_record;
+
+ if (!hemf) return InvalidParameter;
+
+ size = GetEnhMetaFileBits(hemf, 0, NULL);
+ if (!size) return GenericError;
+
+ stat = METAFILE_AllocateRecord(metafile,
+ FIELD_OFFSET(EmfPlusObject, ObjectData.image.ImageData.metafile.MetafileData[size]),
+ (void**)&object_record);
+ if (stat != Ok) return stat;
+
+ *id = METAFILE_AddObjectId(metafile);
+ object_record->Header.Type = EmfPlusRecordTypeObject;
+ object_record->Header.Flags = *id | ObjectTypeImage << 8;
+ object_record->ObjectData.image.Version = 0xDBC01002;
+ object_record->ObjectData.image.Type = ImageDataTypeMetafile;
+ metafile_record = &object_record->ObjectData.image.ImageData.metafile;
+ metafile_record->Type = ((GpMetafile*)image)->metafile_type;
+ metafile_record->MetafileDataSize = size;
+ if (GetEnhMetaFileBits(hemf, size, metafile_record->MetafileData) != size)
+ {
+ METAFILE_RemoveLastRecord(metafile, &object_record->Header);
+ return GenericError;
+ }
+ return Ok;
+ }
else
{
FIXME("not supported image type (%d)\n", image->type);
More information about the wine-cvs
mailing list