gdiplus: Incorporate GDI frame into metafile auto-frame before scaling.
Signed-off-by: Shawn M. Chapla <schapla@codeweavers.com> Signed-off-by: Esme Povirk <esme@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
14bf19ec5e
commit
03e9de4920
|
@ -1652,20 +1652,24 @@ GpStatus METAFILE_GraphicsDeleted(GpMetafile* metafile)
|
||||||
BYTE* buffer;
|
BYTE* buffer;
|
||||||
UINT buffer_size;
|
UINT buffer_size;
|
||||||
|
|
||||||
|
gdi_bounds_rc = header.u.EmfHeader.rclBounds;
|
||||||
|
if (gdi_bounds_rc.right > gdi_bounds_rc.left &&
|
||||||
|
gdi_bounds_rc.bottom > gdi_bounds_rc.top)
|
||||||
|
{
|
||||||
|
GpPointF *af_min = &metafile->auto_frame_min;
|
||||||
|
GpPointF *af_max = &metafile->auto_frame_max;
|
||||||
|
|
||||||
|
af_min->X = fmin(af_min->X, gdi_bounds_rc.left);
|
||||||
|
af_min->Y = fmin(af_min->Y, gdi_bounds_rc.top);
|
||||||
|
af_max->X = fmax(af_max->X, gdi_bounds_rc.right);
|
||||||
|
af_max->Y = fmax(af_max->Y, gdi_bounds_rc.bottom);
|
||||||
|
}
|
||||||
|
|
||||||
bounds_rc.left = floorf(metafile->auto_frame_min.X * x_scale);
|
bounds_rc.left = floorf(metafile->auto_frame_min.X * x_scale);
|
||||||
bounds_rc.top = floorf(metafile->auto_frame_min.Y * y_scale);
|
bounds_rc.top = floorf(metafile->auto_frame_min.Y * y_scale);
|
||||||
bounds_rc.right = ceilf(metafile->auto_frame_max.X * x_scale);
|
bounds_rc.right = ceilf(metafile->auto_frame_max.X * x_scale);
|
||||||
bounds_rc.bottom = ceilf(metafile->auto_frame_max.Y * y_scale);
|
bounds_rc.bottom = ceilf(metafile->auto_frame_max.Y * y_scale);
|
||||||
|
|
||||||
gdi_bounds_rc = header.u.EmfHeader.rclBounds;
|
|
||||||
if (gdi_bounds_rc.right > gdi_bounds_rc.left && gdi_bounds_rc.bottom > gdi_bounds_rc.top)
|
|
||||||
{
|
|
||||||
bounds_rc.left = min(bounds_rc.left, gdi_bounds_rc.left);
|
|
||||||
bounds_rc.top = min(bounds_rc.top, gdi_bounds_rc.top);
|
|
||||||
bounds_rc.right = max(bounds_rc.right, gdi_bounds_rc.right);
|
|
||||||
bounds_rc.bottom = max(bounds_rc.bottom, gdi_bounds_rc.bottom);
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer_size = GetEnhMetaFileBits(metafile->hemf, 0, NULL);
|
buffer_size = GetEnhMetaFileBits(metafile->hemf, 0, NULL);
|
||||||
buffer = heap_alloc(buffer_size);
|
buffer = heap_alloc(buffer_size);
|
||||||
if (buffer)
|
if (buffer)
|
||||||
|
|
|
@ -1424,11 +1424,11 @@ static void test_nullframerect(void) {
|
||||||
stat = GdipGetImageBounds((GpImage*)metafile, &bounds, &unit);
|
stat = GdipGetImageBounds((GpImage*)metafile, &bounds, &unit);
|
||||||
expect(Ok, stat);
|
expect(Ok, stat);
|
||||||
expect(UnitPixel, unit);
|
expect(UnitPixel, unit);
|
||||||
todo_wine expectf_(20.0, bounds.X, 0.05);
|
expectf_(20.0, bounds.X, 0.05);
|
||||||
todo_wine expectf_(25.0, bounds.Y, 0.05);
|
expectf_(25.0, bounds.Y, 0.05);
|
||||||
todo_wine expectf_(55.0, bounds.Width, 1.00);
|
expectf_(55.0, bounds.Width, 1.00);
|
||||||
todo_wine expectf_(55.0, bounds.Width, 0.05);
|
todo_wine expectf_(55.0, bounds.Width, 0.05);
|
||||||
todo_wine expectf_(85.0, bounds.Height, 0.05);
|
expectf_(85.0, bounds.Height, 0.05);
|
||||||
|
|
||||||
stat = GdipDisposeImage((GpImage*)metafile);
|
stat = GdipDisposeImage((GpImage*)metafile);
|
||||||
expect(Ok, stat);
|
expect(Ok, stat);
|
||||||
|
|
Loading…
Reference in New Issue