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