23#define NONAMELESSUNION
28#include "wine/unicode.h"
582 FIXME(
"not implemented for object type %u.\n",
object->type);
587 object->u.object =
NULL;
600 WARN(
"metafile closed while recording\n");
607 IStream_Release(
metafile->record_stream);
626 metafile->comment_data = heap_alloc_zero(data_size);
633 metafile->comment_data_size = data_size;
639 if (size_needed >
metafile->comment_data_size)
641 DWORD data_size = size_needed * 2;
642 BYTE *new_data = heap_alloc_zero(data_size);
649 metafile->comment_data_size = data_size;
672 if (
metafile->comment_data_length > 4)
740 REAL framerect_factor_x, framerect_factor_y;
757 framerect_factor_x = 2540.0 / dpix;
758 framerect_factor_y = 2540.0 / dpiy;
761 framerect_factor_x = framerect_factor_y = 2540.0 / 72.0;
764 framerect_factor_x = framerect_factor_y = 2540.0;
767 framerect_factor_x = framerect_factor_y = 2540.0 / 300.0;
770 framerect_factor_x = framerect_factor_y = 100.0;
773 framerect_factor_x = framerect_factor_y = 1.0;
779 rc.
left = framerect_factor_x * frameRect->X;
780 rc.
top = framerect_factor_y * frameRect->Y;
781 rc.
right = rc.
left + framerect_factor_x * frameRect->Width;
782 rc.
bottom = rc.
top + framerect_factor_y * frameRect->Height;
803 (*metafile)->image.palette =
NULL;
804 (*metafile)->image.xres = dpix;
805 (*metafile)->image.yres = dpiy;
806 (*metafile)->bounds.X = (*metafile)->bounds.Y = 0.0;
807 (*metafile)->bounds.Width = (*metafile)->bounds.Height = 1.0;
809 (*metafile)->metafile_type =
type;
810 (*metafile)->record_dc = record_dc;
811 (*metafile)->comment_data =
NULL;
812 (*metafile)->comment_data_size = 0;
813 (*metafile)->comment_data_length = 0;
814 (*metafile)->hemf =
NULL;
819 (*metafile)->auto_frame =
TRUE;
820 (*metafile)->auto_frame_min.X = 0;
821 (*metafile)->auto_frame_min.Y = 0;
822 (*metafile)->auto_frame_max.X = -1;
823 (*metafile)->auto_frame_max.Y = -1;
845 GpRectF frameRectF, *pFrameRectF;
851 frameRectF.
X = frameRect->X;
852 frameRectF.
Y = frameRect->Y;
853 frameRectF.
Width = frameRect->Width;
854 frameRectF.
Height = frameRect->Height;
855 pFrameRectF = &frameRectF;
877 (*metafile)->record_stream =
stream;
889 if (!
metafile->auto_frame || !num_points)
895 for (
i=0;
i<num_points;
i++)
897 if (
points[
i].X < metafile->auto_frame_min.X)
901 if (
points[
i].Y < metafile->auto_frame_min.Y)
920 metafile->record_graphics->xres = 96.0;
921 metafile->record_graphics->yres = 96.0;
1011 data->BrushData.solid.SolidColor = solid->
color;
1079 integer_rects =
FALSE;
1095 record->BrushID = brushid;
1122 corners[0].
X = rects[
i].X;
1123 corners[0].
Y = rects[
i].Y;
1124 corners[1].
X = rects[
i].X + rects[
i].Width;
1125 corners[1].
Y = rects[
i].Y;
1126 corners[2].
X = rects[
i].X;
1127 corners[2].
Y = rects[
i].Y + rects[
i].Height;
1128 corners[3].
X = rects[
i].X + rects[
i].Width;
1129 corners[3].
Y = rects[
i].Y + rects[
i].Height;
1251 record->Header.Flags = 0;
1390 record->DestRect = *dstrect;
1391 record->SrcRect = *srcrect;
1392 record->StackIndex = StackIndex;
1414 record->Header.Flags = 0;
1415 record->StackIndex = StackIndex;
1437 record->Header.Flags = 0;
1438 record->StackIndex = StackIndex;
1460 record->Header.Flags = 0;
1461 record->StackIndex = StackIndex;
1483 record->Header.Flags = 0;
1484 record->StackIndex = StackIndex;
1522 RECTL bounds_rc, gdi_bounds_rc;
1533 gdi_bounds_rc =
header.u.EmfHeader.rclBounds;
1534 if (gdi_bounds_rc.
right > gdi_bounds_rc.
left && gdi_bounds_rc.
bottom > gdi_bounds_rc.
top)
1546 HENHMETAFILE new_hemf;
1606 IStream_Release(
metafile->record_stream);
1644 XFORM combined,
final;
1747 switch (bitmapdata->
Type)
1776 if (data_size < bitmapdata->
Height * bitmapdata->
Stride)
1802 IWICImagingFactory_Release(
factory);
1811 IWICStream_Release(
stream);
1815 WARN(
"Invalid bitmap type %d.\n", bitmapdata->
Type);
1821 FIXME(
"image type %d not supported.\n",
data->Type);
1842 if (
data->PathPointFlags & 0x800)
1844 FIXME(
"RLE encoded path data is not supported.\n");
1849 if (
data->PathPointFlags & 0x4000)
1857 if (data_size <
size)
1864 (*path)->pathdata.Count =
data->PathPointCount;
1865 (*path)->pathdata.Points =
GdipAlloc(
data->PathPointCount *
sizeof(*(*path)->pathdata.Points));
1866 (*path)->pathdata.Types =
GdipAlloc(
data->PathPointCount *
sizeof(*(*path)->pathdata.Types));
1867 (*path)->datalen = (*path)->pathdata.Count;
1869 if (!(*path)->pathdata.Points || !(*path)->pathdata.Types)
1875 if (
data->PathPointFlags & 0x4000)
1880 (*path)->pathdata.Points[
i].X =
points[
i].X;
1881 (*path)->pathdata.Points[
i].Y =
points[
i].Y;
1918 left = heap_alloc_zero(
sizeof(*
left));
1935 node->elementdata.combine.left =
left;
1936 node->elementdata.combine.right =
right;
1960 const BYTE *path_data;
1961 const UINT *data_size;
1985 FIXME(
"element type %#x is not supported\n", *
type);
2034 if (data_size < header_size)
2050 data->BrushData.hatch.BackColor, (
GpHatch **)brush);
2060 brushflags =
data->BrushData.texture.BrushDataFlags;
2084 UINT position_count = 0;
2090 brushflags =
data->BrushData.lineargradient.BrushDataFlags;
2106 position_count = *(
DWORD *)(record_data +
offset);
2112 if (data_size !=
offset + position_count * (
sizeof(
float) +
sizeof(
EmfPlusARGB)))
2117 if (data_size !=
offset + position_count * 2 *
sizeof(
float))
2121 startpoint.
X =
data->BrushData.lineargradient.RectF.X;
2122 startpoint.
Y =
data->BrushData.lineargradient.RectF.Y;
2123 endpoint.X = startpoint.
X +
data->BrushData.lineargradient.RectF.Width;
2124 endpoint.Y = startpoint.
Y +
data->BrushData.lineargradient.RectF.Height;
2127 data->BrushData.lineargradient.EndColor,
data->BrushData.lineargradient.WrapMode, &gradient);
2137 position_count *
sizeof(
REAL)), (
REAL *)(record_data +
offset), position_count);
2140 (
REAL *)(record_data +
offset), position_count);
2143 FIXME(
"BrushDataIsGammaCorrected is not handled.\n");
2155 FIXME(
"brush type %u is not supported.\n",
data->Type);
2253 void *
object =
NULL;
2289 FIXME(
"PenDataTransform is not supported.\n");
2330 FIXME(
"PenDataDashedLineCap is not supported.\n");
2344 FIXME(
"PenDataDashedLine is not supported.\n");
2350 FIXME(
"PenDataNonCenter is not supported.\n");
2357 FIXME(
"PenDataCompundLine is not supported.\n");
2364 FIXME(
"PenDataCustomStartCap is not supported.\n");
2371 FIXME(
"PenDataCustomEndCap is not supported.\n");
2404 if (!(familyname =
GdipAlloc((
data->Length + 1) *
sizeof(*familyname))))
2407 memcpy(familyname,
data->FamilyName,
data->Length *
sizeof(*familyname));
2408 familyname[
data->Length] = 0;
2424 if (data_size !=
sizeof(*
data))
2431 !!
data->ObjectClamp);
2433 object = attributes;
2439 FIXME(
"not implemented for object type %d.\n",
type);
2472 if (recordType >= 1 && recordType <= 0x7a)
2489 FIXME(
"not implemented for record type %x\n", recordType);
2526 record->iType = recordType;
2532 ERR(
"PlayEnhMetaFileRecord failed\n");
2609 rects = temp_rects = heap_alloc_zero(
sizeof(
GpRectF) *
record->Count);
2614 rects[
i].
X = int_rects[
i].
X;
2615 rects[
i].
Y = int_rects[
i].
Y;
2784 REAL scale_x, scale_y;
2788 cont = heap_alloc_zero(
sizeof(*cont));
2820 scaled_srcrect.
X = scale_x *
record->SrcRect.X;
2821 scaled_srcrect.
Y = scale_y *
record->SrcRect.Y;
2822 scaled_srcrect.
Width = scale_x *
record->SrcRect.Width;
2823 scaled_srcrect.
Height = scale_y *
record->SrcRect.Height;
2842 cont = heap_alloc_zero(
sizeof(*cont));
3017 if (draw->
count != 3)
3020 if ((
flags >> 13) & 1)
3021 FIXME(
"image effects are not supported.\n");
3023 if ((
flags >> 11) & 1)
3033 if ((
flags >> 11) & 1)
3037 for (
i = 1;
i < 3;
i++)
3043 else if ((
flags >> 14) & 1)
3045 for (
i = 0;
i < 3;
i++)
3084 brush = real_metafile->
objtable[
fill->data.BrushId].u.brush;
3104 if (
fill->Count == 0)
3109 else if (
flags & 0x4000)
3132 brush = real_metafile->
objtable[
fill->BrushId].u.brush;
3135 if (
flags & (0x800 | 0x4000))
3142 for (
i = 1;
i <
fill->Count;
i++)
3150 for (
i = 0;
i <
fill->Count;
i++)
3197 brush = real_metafile->
objtable[
fill->BrushId].u.brush;
3202 fill->RectData.rect.Y,
fill->RectData.rect.Width,
fill->RectData.rect.Height);
3205 fill->RectData.rectF.Y,
fill->RectData.rectF.Width,
fill->RectData.rectF.Height);
3236 brush = real_metafile->
objtable[
fill->BrushId].u.brush;
3241 fill->RectData.rect.Y,
fill->RectData.rect.Width,
fill->RectData.rect.Height,
3242 fill->StartAngle,
fill->SweepAngle);
3245 fill->RectData.rectF.Y,
fill->RectData.rectF.Width,
fill->RectData.rectF.Height,
3246 fill->StartAngle,
fill->SweepAngle);
3370 FIXME(
"Not implemented for record type %x\n", recordType);
3393 data->metafile->handle_count = nObj;
3414 pStr,
data->callback_data);
3426 if (lpEMFR->
nSize != 8)
3432 pStr,
data->callback_data);
3446 TRACE(
"(%p,%p,%p,%i,%p,%i,%p,%p,%p)\n", graphics,
metafile,
3447 destPoints,
count, srcRect, srcUnit,
callback, callbackData,
3450 if (!graphics || !
metafile || !destPoints ||
count != 3 || !srcRect)
3464 data.callback_data = callbackData;
3465 data.metafile = real_metafile;
3469 real_metafile->
src_rect = *srcRect;
3717 header->Type = metafile_type;
3725 header->u.EmfHeader = emfheader;
3738 header->EmfPlusFlags = 0;
3739 header->EmfPlusHeaderSize = 0;
3824 (*metafile)->image.format = ImageFormatEMF;
3825 (*metafile)->image.frame_count = 1;
3826 (*metafile)->image.xres =
header.DpiX;
3827 (*metafile)->image.yres =
header.DpiY;
3828 (*metafile)->bounds.X = (
REAL)
header.u.EmfHeader.rclFrame.left / 2540.0 *
header.DpiX;
3829 (*metafile)->bounds.Y = (
REAL)
header.u.EmfHeader.rclFrame.top / 2540.0 *
header.DpiY;
3830 (*metafile)->bounds.Width = (
REAL)(
header.u.EmfHeader.rclFrame.right -
header.u.EmfHeader.rclFrame.left)
3832 (*metafile)->bounds.Height = (
REAL)(
header.u.EmfHeader.rclFrame.bottom -
header.u.EmfHeader.rclFrame.top)
3835 (*metafile)->metafile_type =
header.Type;
3836 (*metafile)->hemf = hemf;
3837 (*metafile)->preserve_hemf = !
delete;
3853 TRACE(
"(%p, %d, %p, %p)\n", hwmf,
delete, placeable,
metafile);
3875 (*metafile)->image.xres = (
REAL)placeable->Inch;
3876 (*metafile)->image.yres = (
REAL)placeable->Inch;
3877 (*metafile)->bounds.X = ((
REAL)placeable->BoundingBox.Left) / ((
REAL)placeable->Inch);
3878 (*metafile)->bounds.Y = ((
REAL)placeable->BoundingBox.Top) / ((
REAL)placeable->Inch);
3879 (*metafile)->bounds.Width = (
REAL)(placeable->BoundingBox.Right -
3880 placeable->BoundingBox.Left);
3881 (*metafile)->bounds.Height = (
REAL)(placeable->BoundingBox.Bottom -
3882 placeable->BoundingBox.Top);
3887 (*metafile)->image.format = ImageFormatWMF;
3970 TRACE(
"(%p,%p,%p,%u,%s,%p)\n",
ref,
metafile, succ, emfType,
3978 *out_metafile =
NULL;
3981 FIXME(
"not implemented\n");
3989 FIXME(
"(%p, %d, %p, %d, %d): stub\n", hemf, cbData16, pData16, iMapMode, eFlags);
4023 FIXME(
"stub: %p, %p, %p, %p, %u, %p, %p\n", refGraphics,
metafile, conversionSuccess,
filename, emfType,
description, out_metafile);
4042 IStream_Release(*
stream);
4046 hr = IStream_Stat(*
stream, &statstg, 1);
4049 IStream_Release(*
stream);
4052 *
size = statstg.cbSize.u.LowPart;
4058 IStream_Release(*
stream);
4098 aligned_size = (
size + 3) & ~3;
4102 (
void**)&object_record);
4108 memset(object_record->ObjectData.image.ImageData.bitmap.BitmapData +
size, 0, aligned_size -
size);
4133 (
void**)&object_record);
4141 metafile_record = &object_record->ObjectData.image.ImageData.metafile;
4153 FIXME(
"not supported image type (%d)\n",
image->type);
4174 (
void**)&object_record);
4196 DWORD image_id, attributes_id;
4203 FIXME(
"MetafileTypeEmf metafiles not supported\n");
4207 FIXME(
"semi-stub\n");
4209 if (!imageAttributes)
4245 FIXME(
"imageAttributes not supported (image type %d)\n",
image->type);
4263 draw_image_record->
count = 3;
4300 (
void**)&object_record);
4312 DWORD i, data_flags, pen_data_size, brush_size;
4334 pen_data_size +=
sizeof(
DWORD);
4339 pen_data_size +=
sizeof(
DWORD);
4344 pen_data_size +=
sizeof(
DWORD);
4349 pen_data_size +=
sizeof(
REAL);
4354 pen_data_size +=
sizeof(
DWORD);
4359 pen_data_size +=
sizeof(
DWORD);
4362 pen_data_size +=
sizeof(
REAL);
4371 pen_data_size +=
sizeof(
DWORD);
4376 FIXME(
"ignoring custom start cup\n");
4380 FIXME(
"ignoring custom end cup\n");
4388 (
void**)&object_record);
4499 draw_path_record->
PenId = pen_id;
4508 DWORD brush_id = -1, path_id;
4534 fill_path_record->
Header.
Flags = 0x8000 | path_id;
_STLP_MOVE_TO_STD_NAMESPACE void fill(_ForwardIter __first, _ForwardIter __last, const _Tp &__val)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
static unsigned int palette_size(DWORD flags)
GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush)
GpStatus WINGDIPAPI GdipCreateHatchBrush(GpHatchStyle hatchstyle, ARGB forecol, ARGB backcol, GpHatch **brush)
GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *texture, GDIPCONST GpMatrix *matrix)
GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF *startpoint, GDIPCONST GpPointF *endpoint, ARGB startcolor, ARGB endcolor, GpWrapMode wrap, GpLineGradient **line)
GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient *brush, GDIPCONST ARGB *blend, GDIPCONST REAL *positions, INT count)
GpStatus WINGDIPAPI GdipSetLineTransform(GpLineGradient *brush, GDIPCONST GpMatrix *matrix)
GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient *brush, GDIPCONST REAL *factors, GDIPCONST REAL *positions, INT count)
GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf)
GpStatus WINGDIPAPI GdipCreateTexture(GpImage *image, GpWrapMode wrapmode, GpTexture **texture)
GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily)
GpStatus WINGDIPAPI GdipDeleteFont(GpFont *font)
GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, GpFontCollection *fontCollection, GpFontFamily **FontFamily)
GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, REAL emSize, INT style, Unit unit, GpFont **font)
GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics *graphics, GpBrush *brush, GDIPCONST GpRectF *rects, INT count)
GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR *filename, UINT access, IStream **stream)
GpStatus WINGDIPAPI GdipDrawEllipseI(GpGraphics *graphics, GpPen *pen, INT x, INT y, INT width, INT height)
GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
GpStatus WINGDIPAPI GdipFillEllipse(GpGraphics *graphics, GpBrush *brush, REAL x, REAL y, REAL width, REAL height)
GpStatus WINGDIPAPI GdipGetClip(GpGraphics *graphics, GpRegion *region)
GpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics *graphics, CompositingMode mode)
GpStatus WINGDIPAPI GdipFillClosedCurve2(GpGraphics *graphics, GpBrush *brush, GDIPCONST GpPointF *points, INT count, REAL tension, GpFillMode fill)
GpStatus WINGDIPAPI GdipDrawPie(GpGraphics *graphics, GpPen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipGetDC(GpGraphics *graphics, HDC *hdc)
GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics *graphics, ARGB color)
GpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics *graphics, GpPen *pen, GDIPCONST GpRectF *rects, INT count)
GpStatus WINGDIPAPI GdipFillPie(GpGraphics *graphics, GpBrush *brush, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics *graphics, TextRenderingHint hint)
GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics *graphics, GpMatrix *matrix)
GpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics *graphics, GpImage *image, INT dstx, INT dsty, INT dstwidth, INT dstheight, INT srcx, INT srcy, INT srcwidth, INT srcheight, GpUnit srcUnit, GDIPCONST GpImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData)
GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics *graphics, GraphicsState *state)
GpStatus WINGDIPAPI GdipDrawPath(GpGraphics *graphics, GpPen *pen, GpPath *path)
GpStatus WINGDIPAPI GdipEndContainer(GpGraphics *graphics, GraphicsContainer state)
GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics *graphics, CompositingQuality quality)
GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics *graphics, InterpolationMode mode)
GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image, GDIPCONST GpPointF *points, INT count, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, GpUnit srcUnit, GDIPCONST GpImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData)
GpStatus WINGDIPAPI GdipDrawEllipse(GpGraphics *graphics, GpPen *pen, REAL x, REAL y, REAL width, REAL height)
GpStatus WINGDIPAPI GdipFillPath(GpGraphics *graphics, GpBrush *brush, GpPath *path)
GpStatus WINGDIPAPI GdipDrawPieI(GpGraphics *graphics, GpPen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics *graphics, HDC hdc)
GpStatus WINGDIPAPI GdipDrawArc(GpGraphics *graphics, GpPen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics *graphics, GpPen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace dst_space, GpCoordinateSpace src_space, GpPointF *points, INT count)
GpStatus WINGDIPAPI GdipFillPieI(GpGraphics *graphics, GpBrush *brush, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics *graphics, GraphicsState state)
GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics *graphics, GpUnit unit)
GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics *graphics, SmoothingMode mode)
GpStatus WINGDIPAPI GdipFillEllipseI(GpGraphics *graphics, GpBrush *brush, INT x, INT y, INT width, INT height)
GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics *graphics, PixelOffsetMode mode)
GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics *graphics)
GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics *graphics, REAL scale)
GpStatus WINGDIPAPI GdipBeginContainer2(GpGraphics *graphics, GraphicsContainer *state)
GpStatus WINGDIPAPI GdipCreatePath(GpFillMode fill, GpPath **path)
GpStatus WINGDIPAPI GdipDeletePath(GpPath *path)
GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath *path, GDIPCONST GpPointF *points, INT count)
GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride, PixelFormat format, BYTE *scan0, GpBitmap **bitmap)
GpStatus WINGDIPAPI GdipSetImagePalette(GpImage *image, GDIPCONST ColorPalette *palette)
GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage *image, GpGraphics **graphics)
GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image)
GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream *stream, GpImage **image)
GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream *stream, GpBitmap **bitmap)
GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix *matrix, REAL scaleX, REAL scaleY, GpMatrixOrder order)
GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix *matrix, GDIPCONST GpMatrix *matrix2, GpMatrixOrder order)
GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix *matrix, REAL offsetX, REAL offsetY, GpMatrixOrder order)
GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *rect, GDIPCONST GpPointF *pt, GpMatrix **matrix)
GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix *matrix, REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy)
GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix *matrix, REAL angle, GpMatrixOrder order)
GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix *matrix, BOOL *result)
GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix *matrix)
GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix **matrix)
GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen *pen, GpLineJoin join)
GpStatus WINGDIPAPI GdipDeletePen(GpPen *pen)
GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, GpPen **pen)
GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen *pen, REAL limit)
GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen *pen, GpDashStyle dash)
GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen *pen, GpLineCap cap)
GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen *pen, GpLineCap cap)
GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen *pen, REAL offset)
GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *region, GpPath *path, CombineMode mode)
GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *region, GpMatrix *matrix)
GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *rect, GpRegion **region)
GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **region)
GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *region1, GpRegion *region2, CombineMode mode)
GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *path, GpRegion **region)
GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region)
GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *region, GpRegion **clone)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
void WINGDIPAPI GdipFree(void *ptr)
GpStatus hresult_to_status(HRESULT res)
const char * debugstr_rectf(const RectF *rc)
const char * debugstr_pointf(const PointF *pt)
void *WINGDIPAPI GdipAlloc(SIZE_T size)
REAL units_to_pixels(REAL units, GpUnit unit, REAL dpi)
DWORD write_path_data(GpPath *path, void *data) DECLSPEC_HIDDEN
static INT gdip_round(REAL x)
#define EmfPlusObjectTableSize
static void init_memory_buffer(struct memory_buffer *mbuf, const BYTE *buffer, INT size)
GpStatus graphics_from_image(GpImage *image, GpGraphics **graphics) DECLSPEC_HIDDEN
@ ObjectTypeImageAttributes
GpStatus get_graphics_transform(GpGraphics *graphics, GpCoordinateSpace dst_space, GpCoordinateSpace src_space, GpMatrix *matrix) DECLSPEC_HIDDEN
static const void * buffer_read(struct memory_buffer *mbuf, INT size)
GpStatus encode_image_png(GpImage *image, IStream *stream, GDIPCONST EncoderParameters *params) DECLSPEC_HIDDEN
#define GP_DEFAULT_PENSTYLE
DWORD write_region_data(const GpRegion *region, void *data) DECLSPEC_HIDDEN
@ EmfPlusRecordTypeDrawPie
@ EmfPlusRecordTypeSetCompositingQuality
@ EmfPlusRecordTypeSetClipRect
@ EmfPlusRecordTypeSetClipPath
@ EmfPlusRecordTypeResetWorldTransform
@ EmfPlusRecordTypeEndContainer
@ EmfPlusRecordTypeRotateWorldTransform
@ EmfPlusRecordTypeTranslateWorldTransform
@ EmfPlusRecordTypeDrawImagePoints
@ EmfPlusRecordTypeRestore
@ EmfPlusRecordTypeFillPath
@ EmfPlusRecordTypeSetPixelOffsetMode
@ EmfPlusRecordTypeDrawArc
@ EmfPlusRecordTypeSetCompositingMode
@ EmfPlusRecordTypeBeginContainer
@ EmfPlusRecordTypeDrawPath
@ EmfPlusRecordTypeObject
@ EmfPlusRecordTypeFillClosedCurve
@ EmfPlusRecordTypeFillPie
@ EmfPlusRecordTypeSetWorldTransform
@ EmfPlusRecordTypeFillRects
@ EmfPlusRecordTypeHeader
@ EmfPlusRecordTypeDrawEllipse
@ EmfPlusRecordTypeFillEllipse
@ EmfPlusRecordTypeSetInterpolationMode
@ EmfPlusRecordTypeEndOfFile
@ EmfPlusRecordTypeDrawRects
@ EmfPlusRecordTypeSetPageTransform
@ EmfPlusRecordTypeSetAntiAliasMode
@ EmfPlusRecordTypeBeginContainerNoParams
@ EmfPlusRecordTypeDrawImage
@ EmfPlusRecordTypeScaleWorldTransform
@ EmfPlusRecordTypeMultiplyWorldTransform
@ EmfPlusRecordTypeSetClipRegion
@ EmfPlusRecordTypeSetTextRenderingHint
@ MetafileTypeEmfPlusOnly
@ MetafileTypeWmfPlaceable
@ MetafileTypeEmfPlusDual
@ BrushTypeLinearGradient
@ MetafileFrameUnitMillimeter
@ MetafileFrameUnitDocument
ImageAbort DrawImageAbort
BOOL(CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType, UINT, UINT, const BYTE *, VOID *)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLuint GLenum GLenum transform
GLenum GLenum GLenum GLenum GLenum scale
GLuint GLdouble GLdouble GLint GLint order
GLsizei const GLfloat * points
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes **imageattr)
GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes *imageattr)
GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes *imageAttr, WrapMode wrap, ARGB argb, BOOL clamp)
#define memcpy(s1, s2, n)
#define comment(fmt, arg1)
static IPrintDialogCallback callback
static const WCHAR desc[]
static const unsigned char metafile[]
static float(__cdecl *square_half_float)(float x
_In_ ULONG _In_ ULONG _In_ ULONG Length
png_const_structrp png_const_inforp int * unit
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
wchar_t const *const size_t const buffer_size
EmfPlusRecordHeader Header
EmfPlusLinearGradientBrushData lineargradient
EmfPlusTextureBrushData texture
EmfPlusSolidBrushData solid
union EmfPlusBrush::@440 BrushData
EmfPlusHatchBrushData hatch
EmfPlusRecordHeader Header
DWORD CompoundLineDataSize
EmfPlusRecordHeader Header
union EmfPlusDrawArc::@445 RectData
EmfPlusRecordHeader Header
EmfPlusRecordHeader Header
union EmfPlusDrawEllipse::@446 RectData
union EmfPlusDrawImagePoints::@444 PointData
EmfPlusPointR7 pointsR[3]
EmfPlusRecordHeader Header
union EmfPlusDrawImage::@443 RectData
EmfPlusRecordHeader Header
EmfPlusRecordHeader Header
EmfPlusRecordHeader Header
union EmfPlusDrawPie::@447 RectData
union EmfPlusDrawRects::@448 RectData
EmfPlusRecordHeader Header
union EmfPlusFillClosedCurve::@450 PointData
EmfPlusPointR7 pointsR[1]
EmfPlusRecordHeader Header
EmfPlusRecordHeader Header
union EmfPlusFillEllipse::@451 RectData
EmfPlusRecordHeader Header
union EmfPlusFillPath::@449 data
union EmfPlusFillPie::@452 RectData
EmfPlusRecordHeader Header
EmfPlusRecordHeader Header
union EmfPlusImage::@441 ImageData
union EmfPlusObject::@442 ObjectData
EmfPlusRecordHeader Header
EmfPlusImageAttributes image_attributes
DWORD RegionNodePathLength
EmfPlusPath RegionNodePath
EmfPlusRecordHeader Header
EmfPlusRecordHeader Header
GpCustomLineCap * customend
GpCustomLineCap * customstart
#define FIELD_OFFSET(t, f)
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
_In_ HFONT _Out_ PUINT Height
BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE)
#define EMR_SETWINDOWEXTEX
UINT WINAPI GetEnhMetaFileBits(_In_ HENHMETAFILE hEMF, _In_ UINT nSize, _Out_writes_bytes_opt_(nSize) LPBYTE lpData)
#define EMR_SETVIEWPORTEXTEX
BOOL WINAPI DeleteEnhMetaFile(_In_opt_ HENHMETAFILE)
#define EMR_EXTSELECTCLIPRGN
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
int WINAPI SetGraphicsMode(_In_ HDC, _In_ int)
HMETAFILE WINAPI GetMetaFileW(_In_ LPCWSTR)
BOOL WINAPI PlayEnhMetaFileRecord(_In_ HDC hdc, _In_reads_(cht) LPHANDLETABLE pht, _In_ CONST ENHMETARECORD *pmr, _In_ UINT cht)
HDC WINAPI CreateEnhMetaFileW(_In_opt_ HDC, _In_opt_ LPCWSTR, _In_opt_ LPCRECT, _In_opt_ LPCWSTR)
HRGN WINAPI ExtCreateRegion(_In_opt_ const XFORM *lpx, _In_ DWORD nCount, _In_reads_bytes_(nCount) const RGNDATA *lpData)
UINT WINAPI GetMetaFileBitsEx(_In_ HMETAFILE hMF, _In_ UINT cbBuffer, _Out_writes_bytes_opt_(cbBuffer) LPVOID lpData)
BOOL WINAPI GdiComment(_In_ HDC hdc, _In_ UINT nSize, _In_reads_bytes_(nSize) const BYTE *lpData)
#define EMR_SETWINDOWORGEX
BOOL WINAPI EnumEnhMetaFile(_In_opt_ HDC, _In_ HENHMETAFILE, _In_ ENHMFENUMPROC, _In_opt_ PVOID, _In_opt_ LPCRECT)
HENHMETAFILE WINAPI CloseEnhMetaFile(_In_ HDC hdc)
HENHMETAFILE WINAPI SetEnhMetaFileBits(_In_ UINT nSize, _In_reads_bytes_(nSize) const BYTE *pb)
#define EMR_SETVIEWPORTORGEX
BOOL WINAPI SetWorldTransform(_In_ HDC, _In_ const XFORM *)
UINT WINAPI GetEnhMetaFileHeader(_In_ HENHMETAFILE hemf, _In_ UINT nSize, _Out_writes_bytes_opt_(nSize) LPENHMETAHEADER lpEnhMetaHeader)
BOOL WINAPI CombineTransform(_Out_ LPXFORM pxformResult, _In_ const XFORM *pxform1, _In_ const XFORM *pxform2)
#define EMR_MODIFYWORLDTRANSFORM
#define EMR_SCALEWINDOWEXTEX
#define EMR_SETWORLDTRANSFORM
int WINAPI ExtSelectClipRgn(_In_ HDC, _In_opt_ HRGN, _In_ int)
#define EMR_SCALEVIEWPORTEXTEX
HENHMETAFILE WINAPI GetEnhMetaFileW(_In_ LPCWSTR)
HENHMETAFILE WINAPI SetWinMetaFileBits(_In_ UINT nSize, _In_reads_bytes_(nSize) const BYTE *lpMeta16Data, _In_opt_ HDC hdcRef, _In_opt_ const METAFILEPICT *lpMFP)
_In_ int _Inout_ LPRECT lprc