Jacek Caban : gdi32: Store EMF bounds in DC_ATTR.
Alexandre Julliard
julliard at winehq.org
Mon Aug 23 16:24:14 CDT 2021
Module: wine
Branch: master
Commit: c0e7df8b42bc278a600b59f4c24efb9e453b1d13
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c0e7df8b42bc278a600b59f4c24efb9e453b1d13
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Aug 23 13:50:39 2021 +0200
gdi32: Store EMF bounds in DC_ATTR.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/gdi32/enhmfdrv/enhmetafiledrv.h | 1 +
dlls/gdi32/enhmfdrv/init.c | 9 ++++++---
include/ntgdi.h | 1 +
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
index 6613d0b5489..334bd41e357 100644
--- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
+++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
@@ -35,6 +35,7 @@ typedef struct
{
struct gdi_physdev dev;
ENHMETAHEADER *emh; /* Pointer to enhanced metafile header */
+ DC_ATTR *dc_attr;
UINT handles_size, cur_handles;
HGDIOBJ *handles;
HANDLE hFile; /* Handle for disk based MetaFile */
diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c
index c47ddcbd41b..026583c40b1 100644
--- a/dlls/gdi32/enhmfdrv/init.c
+++ b/dlls/gdi32/enhmfdrv/init.c
@@ -193,7 +193,7 @@ BOOL EMFDRV_WriteRecord( PHYSDEV dev, EMR *emr )
void EMFDRV_UpdateBBox( PHYSDEV dev, RECTL *rect )
{
EMFDRV_PDEVICE *physDev = get_emf_physdev( dev );
- RECTL *bounds = &physDev->emh->rclBounds;
+ RECTL *bounds = &physDev->dc_attr->emf_bounds;
RECTL vportRect = *rect;
LPtoDP( dev->hdc, (LPPOINT)&vportRect, 2 );
@@ -362,6 +362,7 @@ HDC WINAPI CreateEnhMetaFileW(
DeleteDC( ret );
return 0;
}
+ emf->dc_attr = dc_attr;
emf->handles = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
HANDLE_LIST_INC * sizeof(emf->handles[0]) );
@@ -375,8 +376,8 @@ HDC WINAPI CreateEnhMetaFileW(
emf->emh->iType = EMR_HEADER;
emf->emh->nSize = size;
- emf->emh->rclBounds.left = emf->emh->rclBounds.top = 0;
- emf->emh->rclBounds.right = emf->emh->rclBounds.bottom = -1;
+ dc_attr->emf_bounds.left = dc_attr->emf_bounds.top = 0;
+ dc_attr->emf_bounds.right = dc_attr->emf_bounds.bottom = -1;
if (rect)
{
@@ -473,6 +474,8 @@ HENHMETAFILE WINAPI CloseEnhMetaFile(HDC hdc) /* [in] metafile DC */
emr.nSizeLast = emr.emr.nSize;
EMFDRV_WriteRecord( &physDev->dev, &emr.emr );
+ physDev->emh->rclBounds = dc->attr->emf_bounds;
+
/* Update rclFrame if not initialized in CreateEnhMetaFile */
if(physDev->emh->rclFrame.left > physDev->emh->rclFrame.right) {
physDev->emh->rclFrame.left = physDev->emh->rclBounds.left *
diff --git a/include/ntgdi.h b/include/ntgdi.h
index 14808593501..cec0d3d10f1 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -157,6 +157,7 @@ typedef struct DC_ATTR
SIZE virtual_res;
SIZE virtual_size;
UINT font_code_page;
+ RECTL emf_bounds;
void *emf;
} DC_ATTR;
More information about the wine-cvs
mailing list