gdiplus: Move metafile functions to metafile.c.
This commit is contained in:
parent
6f498c4946
commit
2d487e22d6
|
@ -61,7 +61,6 @@ extern GpStatus METAFILE_FillRectangles(GpMetafile* metafile, GpBrush* brush,
|
||||||
GDIPCONST GpRectF* rects, INT count) DECLSPEC_HIDDEN;
|
GDIPCONST GpRectF* rects, INT count) DECLSPEC_HIDDEN;
|
||||||
extern GpStatus METAFILE_SetPageTransform(GpMetafile* metafile, GpUnit unit, REAL scale) DECLSPEC_HIDDEN;
|
extern GpStatus METAFILE_SetPageTransform(GpMetafile* metafile, GpUnit unit, REAL scale) DECLSPEC_HIDDEN;
|
||||||
extern GpStatus METAFILE_GraphicsDeleted(GpMetafile* metafile) DECLSPEC_HIDDEN;
|
extern GpStatus METAFILE_GraphicsDeleted(GpMetafile* metafile) DECLSPEC_HIDDEN;
|
||||||
extern MetafileType METAFILE_GetEmfType(HENHMETAFILE hemf) DECLSPEC_HIDDEN;
|
|
||||||
|
|
||||||
extern void calc_curve_bezier(const GpPointF *pts, REAL tension, REAL *x1,
|
extern void calc_curve_bezier(const GpPointF *pts, REAL tension, REAL *x1,
|
||||||
REAL *y1, REAL *x2, REAL *y2) DECLSPEC_HIDDEN;
|
REAL *y1, REAL *x2, REAL *y2) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -2247,120 +2247,6 @@ GpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND hwnd, GpGraphics **graphics)
|
||||||
return GdipCreateFromHWND(hwnd, graphics);
|
return GdipCreateFromHWND(hwnd, graphics);
|
||||||
}
|
}
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE hemf, BOOL delete,
|
|
||||||
GpMetafile **metafile)
|
|
||||||
{
|
|
||||||
ENHMETAHEADER header;
|
|
||||||
MetafileType metafile_type;
|
|
||||||
|
|
||||||
TRACE("(%p,%i,%p)\n", hemf, delete, metafile);
|
|
||||||
|
|
||||||
if(!hemf || !metafile)
|
|
||||||
return InvalidParameter;
|
|
||||||
|
|
||||||
if (GetEnhMetaFileHeader(hemf, sizeof(header), &header) == 0)
|
|
||||||
return GenericError;
|
|
||||||
|
|
||||||
metafile_type = METAFILE_GetEmfType(hemf);
|
|
||||||
|
|
||||||
if (metafile_type == MetafileTypeInvalid)
|
|
||||||
return GenericError;
|
|
||||||
|
|
||||||
*metafile = GdipAlloc(sizeof(GpMetafile));
|
|
||||||
if (!*metafile)
|
|
||||||
return OutOfMemory;
|
|
||||||
|
|
||||||
(*metafile)->image.type = ImageTypeMetafile;
|
|
||||||
(*metafile)->image.format = ImageFormatEMF;
|
|
||||||
(*metafile)->image.frame_count = 1;
|
|
||||||
(*metafile)->image.xres = (REAL)header.szlDevice.cx;
|
|
||||||
(*metafile)->image.yres = (REAL)header.szlDevice.cy;
|
|
||||||
(*metafile)->bounds.X = (REAL)header.rclBounds.left;
|
|
||||||
(*metafile)->bounds.Y = (REAL)header.rclBounds.top;
|
|
||||||
(*metafile)->bounds.Width = (REAL)(header.rclBounds.right - header.rclBounds.left);
|
|
||||||
(*metafile)->bounds.Height = (REAL)(header.rclBounds.bottom - header.rclBounds.top);
|
|
||||||
(*metafile)->unit = UnitPixel;
|
|
||||||
(*metafile)->metafile_type = metafile_type;
|
|
||||||
(*metafile)->hemf = hemf;
|
|
||||||
(*metafile)->preserve_hemf = !delete;
|
|
||||||
|
|
||||||
TRACE("<-- %p\n", *metafile);
|
|
||||||
|
|
||||||
return Ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
|
|
||||||
GDIPCONST WmfPlaceableFileHeader * placeable, GpMetafile **metafile)
|
|
||||||
{
|
|
||||||
UINT read;
|
|
||||||
BYTE *copy;
|
|
||||||
HENHMETAFILE hemf;
|
|
||||||
GpStatus retval = Ok;
|
|
||||||
|
|
||||||
TRACE("(%p, %d, %p, %p)\n", hwmf, delete, placeable, metafile);
|
|
||||||
|
|
||||||
if(!hwmf || !metafile || !placeable)
|
|
||||||
return InvalidParameter;
|
|
||||||
|
|
||||||
*metafile = NULL;
|
|
||||||
read = GetMetaFileBitsEx(hwmf, 0, NULL);
|
|
||||||
if(!read)
|
|
||||||
return GenericError;
|
|
||||||
copy = GdipAlloc(read);
|
|
||||||
GetMetaFileBitsEx(hwmf, read, copy);
|
|
||||||
|
|
||||||
hemf = SetWinMetaFileBits(read, copy, NULL, NULL);
|
|
||||||
GdipFree(copy);
|
|
||||||
|
|
||||||
/* FIXME: We should store and use hwmf instead of converting to hemf */
|
|
||||||
retval = GdipCreateMetafileFromEmf(hemf, TRUE, metafile);
|
|
||||||
|
|
||||||
if (retval == Ok)
|
|
||||||
{
|
|
||||||
(*metafile)->image.xres = (REAL)placeable->Inch;
|
|
||||||
(*metafile)->image.yres = (REAL)placeable->Inch;
|
|
||||||
(*metafile)->bounds.X = ((REAL)placeable->BoundingBox.Left) / ((REAL)placeable->Inch);
|
|
||||||
(*metafile)->bounds.Y = ((REAL)placeable->BoundingBox.Top) / ((REAL)placeable->Inch);
|
|
||||||
(*metafile)->bounds.Width = (REAL)(placeable->BoundingBox.Right -
|
|
||||||
placeable->BoundingBox.Left);
|
|
||||||
(*metafile)->bounds.Height = (REAL)(placeable->BoundingBox.Bottom -
|
|
||||||
placeable->BoundingBox.Top);
|
|
||||||
(*metafile)->metafile_type = MetafileTypeWmfPlaceable;
|
|
||||||
(*metafile)->image.format = ImageFormatWMF;
|
|
||||||
|
|
||||||
if (delete) DeleteMetaFile(hwmf);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
DeleteEnhMetaFile(hemf);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR *file,
|
|
||||||
GDIPCONST WmfPlaceableFileHeader * placeable, GpMetafile **metafile)
|
|
||||||
{
|
|
||||||
HMETAFILE hmf = GetMetaFileW(file);
|
|
||||||
|
|
||||||
TRACE("(%s, %p, %p)\n", debugstr_w(file), placeable, metafile);
|
|
||||||
|
|
||||||
if(!hmf) return InvalidParameter;
|
|
||||||
|
|
||||||
return GdipCreateMetafileFromWmf(hmf, TRUE, placeable, metafile);
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR *file,
|
|
||||||
GpMetafile **metafile)
|
|
||||||
{
|
|
||||||
FIXME("(%p, %p): stub\n", file, metafile);
|
|
||||||
return NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipCreateMetafileFromStream(IStream *stream,
|
|
||||||
GpMetafile **metafile)
|
|
||||||
{
|
|
||||||
FIXME("(%p, %p): stub\n", stream, metafile);
|
|
||||||
return NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR * filename,
|
GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR * filename,
|
||||||
UINT access, IStream **stream)
|
UINT access, IStream **stream)
|
||||||
{
|
{
|
||||||
|
@ -5581,19 +5467,6 @@ GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics *graphics, GpRegion *region,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile *metafile,
|
|
||||||
UINT limitDpi)
|
|
||||||
{
|
|
||||||
static int calls;
|
|
||||||
|
|
||||||
TRACE("(%p,%u)\n", metafile, limitDpi);
|
|
||||||
|
|
||||||
if(!(calls++))
|
|
||||||
FIXME("not implemented\n");
|
|
||||||
|
|
||||||
return NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics *graphics,GpPen *pen,GDIPCONST GpPointF *points,
|
GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics *graphics,GpPen *pen,GDIPCONST GpPointF *points,
|
||||||
INT count)
|
INT count)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1514,27 +1514,6 @@ GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap* bitmap,
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics* ref,
|
|
||||||
GpMetafile* metafile, BOOL* succ, EmfType emfType,
|
|
||||||
const WCHAR* description, GpMetafile** out_metafile)
|
|
||||||
{
|
|
||||||
static int calls;
|
|
||||||
|
|
||||||
TRACE("(%p,%p,%p,%u,%s,%p)\n", ref, metafile, succ, emfType,
|
|
||||||
debugstr_w(description), out_metafile);
|
|
||||||
|
|
||||||
if(!ref || !metafile || !out_metafile)
|
|
||||||
return InvalidParameter;
|
|
||||||
|
|
||||||
*succ = FALSE;
|
|
||||||
*out_metafile = NULL;
|
|
||||||
|
|
||||||
if(!(calls++))
|
|
||||||
FIXME("not implemented\n");
|
|
||||||
|
|
||||||
return NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT width, INT height,
|
GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT width, INT height,
|
||||||
GpGraphics* target, GpBitmap** bitmap)
|
GpGraphics* target, GpBitmap** bitmap)
|
||||||
{
|
{
|
||||||
|
@ -2025,13 +2004,6 @@ GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics *graphics,
|
||||||
return GdipDrawImage(graphics, cachedbmp->image, (REAL)x, (REAL)y);
|
return GdipDrawImage(graphics, cachedbmp->image, (REAL)x, (REAL)y);
|
||||||
}
|
}
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipEmfToWmfBits(HENHMETAFILE hemf, UINT cbData16,
|
|
||||||
LPBYTE pData16, INT iMapMode, INT eFlags)
|
|
||||||
{
|
|
||||||
FIXME("(%p, %d, %p, %d, %d): stub\n", hemf, cbData16, pData16, iMapMode, eFlags);
|
|
||||||
return NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Internal utility function: Replace the image data of dst with that of src,
|
/* Internal utility function: Replace the image data of dst with that of src,
|
||||||
* and free src. */
|
* and free src. */
|
||||||
static void move_bitmap(GpBitmap *dst, GpBitmap *src, BOOL clobber_palette)
|
static void move_bitmap(GpBitmap *dst, GpBitmap *src, BOOL clobber_palette)
|
||||||
|
@ -2376,76 +2348,6 @@ GpStatus WINGDIPAPI GdipGetImageWidth(GpImage *image, UINT *width)
|
||||||
return Ok;
|
return Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile * metafile,
|
|
||||||
MetafileHeader * header)
|
|
||||||
{
|
|
||||||
static int calls;
|
|
||||||
|
|
||||||
TRACE("(%p, %p)\n", metafile, header);
|
|
||||||
|
|
||||||
if(!metafile || !header)
|
|
||||||
return InvalidParameter;
|
|
||||||
|
|
||||||
if(!(calls++))
|
|
||||||
FIXME("not implemented\n");
|
|
||||||
|
|
||||||
memset(header, 0, sizeof(MetafileHeader));
|
|
||||||
|
|
||||||
return Ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE hEmf,
|
|
||||||
MetafileHeader *header)
|
|
||||||
{
|
|
||||||
static int calls;
|
|
||||||
|
|
||||||
if(!hEmf || !header)
|
|
||||||
return InvalidParameter;
|
|
||||||
|
|
||||||
if(!(calls++))
|
|
||||||
FIXME("not implemented\n");
|
|
||||||
|
|
||||||
memset(header, 0, sizeof(MetafileHeader));
|
|
||||||
|
|
||||||
return Ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR *filename,
|
|
||||||
MetafileHeader *header)
|
|
||||||
{
|
|
||||||
static int calls;
|
|
||||||
|
|
||||||
TRACE("(%s,%p)\n", debugstr_w(filename), header);
|
|
||||||
|
|
||||||
if(!filename || !header)
|
|
||||||
return InvalidParameter;
|
|
||||||
|
|
||||||
if(!(calls++))
|
|
||||||
FIXME("not implemented\n");
|
|
||||||
|
|
||||||
memset(header, 0, sizeof(MetafileHeader));
|
|
||||||
|
|
||||||
return Ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream *stream,
|
|
||||||
MetafileHeader *header)
|
|
||||||
{
|
|
||||||
static int calls;
|
|
||||||
|
|
||||||
TRACE("(%p,%p)\n", stream, header);
|
|
||||||
|
|
||||||
if(!stream || !header)
|
|
||||||
return InvalidParameter;
|
|
||||||
|
|
||||||
if(!(calls++))
|
|
||||||
FIXME("not implemented\n");
|
|
||||||
|
|
||||||
memset(header, 0, sizeof(MetafileHeader));
|
|
||||||
|
|
||||||
return Ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage *image, UINT *num)
|
GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage *image, UINT *num)
|
||||||
{
|
{
|
||||||
TRACE("(%p, %p)\n", image, num);
|
TRACE("(%p, %p)\n", image, num);
|
||||||
|
@ -4748,27 +4650,6 @@ GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum control, void *param)
|
||||||
return Ok;
|
return Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR* fileName,
|
|
||||||
HDC hdc, EmfType type, GDIPCONST GpRectF *pFrameRect,
|
|
||||||
MetafileFrameUnit frameUnit, GDIPCONST WCHAR *desc,
|
|
||||||
GpMetafile **metafile)
|
|
||||||
{
|
|
||||||
FIXME("%s %p %d %p %d %s %p stub!\n", debugstr_w(fileName), hdc, type, pFrameRect,
|
|
||||||
frameUnit, debugstr_w(desc), metafile);
|
|
||||||
|
|
||||||
return NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR* fileName, HDC hdc, EmfType type,
|
|
||||||
GDIPCONST GpRect *pFrameRect, MetafileFrameUnit frameUnit,
|
|
||||||
GDIPCONST WCHAR *desc, GpMetafile **metafile)
|
|
||||||
{
|
|
||||||
FIXME("%s %p %d %p %d %s %p stub!\n", debugstr_w(fileName), hdc, type, pFrameRect,
|
|
||||||
frameUnit, debugstr_w(desc), metafile);
|
|
||||||
|
|
||||||
return NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipImageForceValidation(GpImage *image)
|
GpStatus WINGDIPAPI GdipImageForceValidation(GpImage *image)
|
||||||
{
|
{
|
||||||
TRACE("%p\n", image);
|
TRACE("%p\n", image);
|
||||||
|
@ -4942,16 +4823,3 @@ GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage *image, RotateFlipType type)
|
||||||
|
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* GdipConvertToEmfPlusToFile [GDIPLUS.@]
|
|
||||||
*/
|
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics* refGraphics,
|
|
||||||
GpMetafile* metafile, BOOL* conversionSuccess,
|
|
||||||
const WCHAR* filename, EmfType emfType,
|
|
||||||
const WCHAR* description, GpMetafile** out_metafile)
|
|
||||||
{
|
|
||||||
FIXME("stub: %p, %p, %p, %p, %u, %p, %p\n", refGraphics, metafile, conversionSuccess, filename, emfType, description, out_metafile);
|
|
||||||
return NotImplemented;
|
|
||||||
}
|
|
||||||
|
|
|
@ -920,3 +920,262 @@ MetafileType METAFILE_GetEmfType(HENHMETAFILE hemf)
|
||||||
EnumEnhMetaFile(NULL, hemf, get_metafile_type_proc, &result, NULL);
|
EnumEnhMetaFile(NULL, hemf, get_metafile_type_proc, &result, NULL);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile * metafile,
|
||||||
|
MetafileHeader * header)
|
||||||
|
{
|
||||||
|
static int calls;
|
||||||
|
|
||||||
|
TRACE("(%p, %p)\n", metafile, header);
|
||||||
|
|
||||||
|
if(!metafile || !header)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
if(!(calls++))
|
||||||
|
FIXME("not implemented\n");
|
||||||
|
|
||||||
|
memset(header, 0, sizeof(MetafileHeader));
|
||||||
|
|
||||||
|
return Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE hEmf,
|
||||||
|
MetafileHeader *header)
|
||||||
|
{
|
||||||
|
static int calls;
|
||||||
|
|
||||||
|
if(!hEmf || !header)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
if(!(calls++))
|
||||||
|
FIXME("not implemented\n");
|
||||||
|
|
||||||
|
memset(header, 0, sizeof(MetafileHeader));
|
||||||
|
|
||||||
|
return Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR *filename,
|
||||||
|
MetafileHeader *header)
|
||||||
|
{
|
||||||
|
static int calls;
|
||||||
|
|
||||||
|
TRACE("(%s,%p)\n", debugstr_w(filename), header);
|
||||||
|
|
||||||
|
if(!filename || !header)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
if(!(calls++))
|
||||||
|
FIXME("not implemented\n");
|
||||||
|
|
||||||
|
memset(header, 0, sizeof(MetafileHeader));
|
||||||
|
|
||||||
|
return Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream *stream,
|
||||||
|
MetafileHeader *header)
|
||||||
|
{
|
||||||
|
static int calls;
|
||||||
|
|
||||||
|
TRACE("(%p,%p)\n", stream, header);
|
||||||
|
|
||||||
|
if(!stream || !header)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
if(!(calls++))
|
||||||
|
FIXME("not implemented\n");
|
||||||
|
|
||||||
|
memset(header, 0, sizeof(MetafileHeader));
|
||||||
|
|
||||||
|
return Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE hemf, BOOL delete,
|
||||||
|
GpMetafile **metafile)
|
||||||
|
{
|
||||||
|
ENHMETAHEADER header;
|
||||||
|
MetafileType metafile_type;
|
||||||
|
|
||||||
|
TRACE("(%p,%i,%p)\n", hemf, delete, metafile);
|
||||||
|
|
||||||
|
if(!hemf || !metafile)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
if (GetEnhMetaFileHeader(hemf, sizeof(header), &header) == 0)
|
||||||
|
return GenericError;
|
||||||
|
|
||||||
|
metafile_type = METAFILE_GetEmfType(hemf);
|
||||||
|
|
||||||
|
if (metafile_type == MetafileTypeInvalid)
|
||||||
|
return GenericError;
|
||||||
|
|
||||||
|
*metafile = GdipAlloc(sizeof(GpMetafile));
|
||||||
|
if (!*metafile)
|
||||||
|
return OutOfMemory;
|
||||||
|
|
||||||
|
(*metafile)->image.type = ImageTypeMetafile;
|
||||||
|
(*metafile)->image.format = ImageFormatEMF;
|
||||||
|
(*metafile)->image.frame_count = 1;
|
||||||
|
(*metafile)->image.xres = (REAL)header.szlDevice.cx;
|
||||||
|
(*metafile)->image.yres = (REAL)header.szlDevice.cy;
|
||||||
|
(*metafile)->bounds.X = (REAL)header.rclBounds.left;
|
||||||
|
(*metafile)->bounds.Y = (REAL)header.rclBounds.top;
|
||||||
|
(*metafile)->bounds.Width = (REAL)(header.rclBounds.right - header.rclBounds.left);
|
||||||
|
(*metafile)->bounds.Height = (REAL)(header.rclBounds.bottom - header.rclBounds.top);
|
||||||
|
(*metafile)->unit = UnitPixel;
|
||||||
|
(*metafile)->metafile_type = metafile_type;
|
||||||
|
(*metafile)->hemf = hemf;
|
||||||
|
(*metafile)->preserve_hemf = !delete;
|
||||||
|
|
||||||
|
TRACE("<-- %p\n", *metafile);
|
||||||
|
|
||||||
|
return Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
|
||||||
|
GDIPCONST WmfPlaceableFileHeader * placeable, GpMetafile **metafile)
|
||||||
|
{
|
||||||
|
UINT read;
|
||||||
|
BYTE *copy;
|
||||||
|
HENHMETAFILE hemf;
|
||||||
|
GpStatus retval = Ok;
|
||||||
|
|
||||||
|
TRACE("(%p, %d, %p, %p)\n", hwmf, delete, placeable, metafile);
|
||||||
|
|
||||||
|
if(!hwmf || !metafile || !placeable)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
*metafile = NULL;
|
||||||
|
read = GetMetaFileBitsEx(hwmf, 0, NULL);
|
||||||
|
if(!read)
|
||||||
|
return GenericError;
|
||||||
|
copy = GdipAlloc(read);
|
||||||
|
GetMetaFileBitsEx(hwmf, read, copy);
|
||||||
|
|
||||||
|
hemf = SetWinMetaFileBits(read, copy, NULL, NULL);
|
||||||
|
GdipFree(copy);
|
||||||
|
|
||||||
|
/* FIXME: We should store and use hwmf instead of converting to hemf */
|
||||||
|
retval = GdipCreateMetafileFromEmf(hemf, TRUE, metafile);
|
||||||
|
|
||||||
|
if (retval == Ok)
|
||||||
|
{
|
||||||
|
(*metafile)->image.xres = (REAL)placeable->Inch;
|
||||||
|
(*metafile)->image.yres = (REAL)placeable->Inch;
|
||||||
|
(*metafile)->bounds.X = ((REAL)placeable->BoundingBox.Left) / ((REAL)placeable->Inch);
|
||||||
|
(*metafile)->bounds.Y = ((REAL)placeable->BoundingBox.Top) / ((REAL)placeable->Inch);
|
||||||
|
(*metafile)->bounds.Width = (REAL)(placeable->BoundingBox.Right -
|
||||||
|
placeable->BoundingBox.Left);
|
||||||
|
(*metafile)->bounds.Height = (REAL)(placeable->BoundingBox.Bottom -
|
||||||
|
placeable->BoundingBox.Top);
|
||||||
|
(*metafile)->metafile_type = MetafileTypeWmfPlaceable;
|
||||||
|
(*metafile)->image.format = ImageFormatWMF;
|
||||||
|
|
||||||
|
if (delete) DeleteMetaFile(hwmf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DeleteEnhMetaFile(hemf);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR *file,
|
||||||
|
GDIPCONST WmfPlaceableFileHeader * placeable, GpMetafile **metafile)
|
||||||
|
{
|
||||||
|
HMETAFILE hmf = GetMetaFileW(file);
|
||||||
|
|
||||||
|
TRACE("(%s, %p, %p)\n", debugstr_w(file), placeable, metafile);
|
||||||
|
|
||||||
|
if(!hmf) return InvalidParameter;
|
||||||
|
|
||||||
|
return GdipCreateMetafileFromWmf(hmf, TRUE, placeable, metafile);
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR *file,
|
||||||
|
GpMetafile **metafile)
|
||||||
|
{
|
||||||
|
FIXME("(%p, %p): stub\n", file, metafile);
|
||||||
|
return NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipCreateMetafileFromStream(IStream *stream,
|
||||||
|
GpMetafile **metafile)
|
||||||
|
{
|
||||||
|
FIXME("(%p, %p): stub\n", stream, metafile);
|
||||||
|
return NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile *metafile,
|
||||||
|
UINT limitDpi)
|
||||||
|
{
|
||||||
|
static int calls;
|
||||||
|
|
||||||
|
TRACE("(%p,%u)\n", metafile, limitDpi);
|
||||||
|
|
||||||
|
if(!(calls++))
|
||||||
|
FIXME("not implemented\n");
|
||||||
|
|
||||||
|
return NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics* ref,
|
||||||
|
GpMetafile* metafile, BOOL* succ, EmfType emfType,
|
||||||
|
const WCHAR* description, GpMetafile** out_metafile)
|
||||||
|
{
|
||||||
|
static int calls;
|
||||||
|
|
||||||
|
TRACE("(%p,%p,%p,%u,%s,%p)\n", ref, metafile, succ, emfType,
|
||||||
|
debugstr_w(description), out_metafile);
|
||||||
|
|
||||||
|
if(!ref || !metafile || !out_metafile)
|
||||||
|
return InvalidParameter;
|
||||||
|
|
||||||
|
*succ = FALSE;
|
||||||
|
*out_metafile = NULL;
|
||||||
|
|
||||||
|
if(!(calls++))
|
||||||
|
FIXME("not implemented\n");
|
||||||
|
|
||||||
|
return NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipEmfToWmfBits(HENHMETAFILE hemf, UINT cbData16,
|
||||||
|
LPBYTE pData16, INT iMapMode, INT eFlags)
|
||||||
|
{
|
||||||
|
FIXME("(%p, %d, %p, %d, %d): stub\n", hemf, cbData16, pData16, iMapMode, eFlags);
|
||||||
|
return NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR* fileName,
|
||||||
|
HDC hdc, EmfType type, GDIPCONST GpRectF *pFrameRect,
|
||||||
|
MetafileFrameUnit frameUnit, GDIPCONST WCHAR *desc,
|
||||||
|
GpMetafile **metafile)
|
||||||
|
{
|
||||||
|
FIXME("%s %p %d %p %d %s %p stub!\n", debugstr_w(fileName), hdc, type, pFrameRect,
|
||||||
|
frameUnit, debugstr_w(desc), metafile);
|
||||||
|
|
||||||
|
return NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR* fileName, HDC hdc, EmfType type,
|
||||||
|
GDIPCONST GpRect *pFrameRect, MetafileFrameUnit frameUnit,
|
||||||
|
GDIPCONST WCHAR *desc, GpMetafile **metafile)
|
||||||
|
{
|
||||||
|
FIXME("%s %p %d %p %d %s %p stub!\n", debugstr_w(fileName), hdc, type, pFrameRect,
|
||||||
|
frameUnit, debugstr_w(desc), metafile);
|
||||||
|
|
||||||
|
return NotImplemented;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* GdipConvertToEmfPlusToFile [GDIPLUS.@]
|
||||||
|
*/
|
||||||
|
|
||||||
|
GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics* refGraphics,
|
||||||
|
GpMetafile* metafile, BOOL* conversionSuccess,
|
||||||
|
const WCHAR* filename, EmfType emfType,
|
||||||
|
const WCHAR* description, GpMetafile** out_metafile)
|
||||||
|
{
|
||||||
|
FIXME("stub: %p, %p, %p, %p, %u, %p, %p\n", refGraphics, metafile, conversionSuccess, filename, emfType, description, out_metafile);
|
||||||
|
return NotImplemented;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue