From 71c6f4826990f6887d3b246fb3d991d20b243b49 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard <julliard@winehq.org> Date: Mon, 4 Apr 2011 12:27:09 +0200 Subject: [PATCH] gdi32: Use the hdc from the generic physdev structure in enhanced metafiles. --- dlls/gdi32/enhmfdrv/dc.c | 8 +++--- dlls/gdi32/enhmfdrv/enhmetafiledrv.h | 1 - dlls/gdi32/enhmfdrv/graphics.c | 38 ++++++++++++---------------- dlls/gdi32/enhmfdrv/init.c | 15 +++++------ dlls/gdi32/enhmfdrv/objects.c | 16 ++++++------ 5 files changed, 34 insertions(+), 44 deletions(-) diff --git a/dlls/gdi32/enhmfdrv/dc.c b/dlls/gdi32/enhmfdrv/dc.c index 76039f4ea99..4b1e31124dd 100644 --- a/dlls/gdi32/enhmfdrv/dc.c +++ b/dlls/gdi32/enhmfdrv/dc.c @@ -42,7 +42,7 @@ BOOL CDECL EMFDRV_RestoreDC( PHYSDEV dev, INT level ) { PHYSDEV next = GET_NEXT_PHYSDEV( dev, pRestoreDC ); EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev; - DC *dc = get_dc_ptr( physDev->hdc ); + DC *dc = get_dc_ptr( dev->hdc ); EMRRESTOREDC emr; BOOL ret; @@ -357,10 +357,9 @@ BOOL CDECL EMFDRV_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) { PHYSDEV next = GET_NEXT_PHYSDEV( dev, pOffsetViewportOrgEx ); EMRSETVIEWPORTORGEX emr; - EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev; POINT prev; - GetViewportOrgEx(physDev->hdc, &prev); + GetViewportOrgEx( dev->hdc, &prev ); emr.emr.iType = EMR_SETVIEWPORTORGEX; emr.emr.nSize = sizeof(emr); @@ -375,10 +374,9 @@ BOOL CDECL EMFDRV_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) { PHYSDEV next = GET_NEXT_PHYSDEV( dev, pOffsetWindowOrgEx ); EMRSETWINDOWORGEX emr; - EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev; POINT prev; - GetWindowOrgEx(physDev->hdc, &prev); + GetWindowOrgEx( dev->hdc, &prev ); emr.emr.iType = EMR_SETWINDOWORGEX; emr.emr.nSize = sizeof(emr); diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h index ee8246313bc..34f09b348a3 100644 --- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h +++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h @@ -33,7 +33,6 @@ typedef struct { struct gdi_physdev dev; - HDC hdc; ENHMETAHEADER *emh; /* Pointer to enhanced metafile header */ UINT handles_size, cur_handles; HGDIOBJ *handles; diff --git a/dlls/gdi32/enhmfdrv/graphics.c b/dlls/gdi32/enhmfdrv/graphics.c index 361a3b0fdb3..93cef82f958 100644 --- a/dlls/gdi32/enhmfdrv/graphics.c +++ b/dlls/gdi32/enhmfdrv/graphics.c @@ -58,7 +58,6 @@ EMFDRV_LineTo( PHYSDEV dev, INT x, INT y ) POINT pt; EMRLINETO emr; RECTL bounds; - EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev; emr.emr.iType = EMR_LINETO; emr.emr.nSize = sizeof(emr); @@ -68,7 +67,7 @@ EMFDRV_LineTo( PHYSDEV dev, INT x, INT y ) if(!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE; - GetCurrentPositionEx(physDev->hdc, &pt); + GetCurrentPositionEx( dev->hdc, &pt ); bounds.left = min(x, pt.x); bounds.top = min(y, pt.y); @@ -93,14 +92,13 @@ EMFDRV_ArcChordPie( PHYSDEV dev, INT left, INT top, INT right, INT bottom, double xinterStart, yinterStart, xinterEnd, yinterEnd; EMRARC emr; RECTL bounds; - EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev; if(left == right || top == bottom) return FALSE; if(left > right) {temp = left; left = right; right = temp;} if(top > bottom) {temp = top; top = bottom; bottom = temp;} - if(GetGraphicsMode(physDev->hdc) == GM_COMPATIBLE) { + if(GetGraphicsMode(dev->hdc) == GM_COMPATIBLE) { right--; bottom--; } @@ -227,7 +225,6 @@ EMFDRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) { EMRELLIPSE emr; INT temp; - EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev; TRACE("%d,%d - %d,%d\n", left, top, right, bottom); @@ -236,7 +233,7 @@ EMFDRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) if(left > right) {temp = left; left = right; right = temp;} if(top > bottom) {temp = top; top = bottom; bottom = temp;} - if(GetGraphicsMode(physDev->hdc) == GM_COMPATIBLE) { + if(GetGraphicsMode( dev->hdc ) == GM_COMPATIBLE) { right--; bottom--; } @@ -260,7 +257,6 @@ EMFDRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom) { EMRRECTANGLE emr; INT temp; - EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev; TRACE("%d,%d - %d,%d\n", left, top, right, bottom); @@ -269,7 +265,7 @@ EMFDRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom) if(left > right) {temp = left; left = right; right = temp;} if(top > bottom) {temp = top; top = bottom; bottom = temp;} - if(GetGraphicsMode(physDev->hdc) == GM_COMPATIBLE) { + if(GetGraphicsMode( dev->hdc ) == GM_COMPATIBLE) { right--; bottom--; } @@ -294,14 +290,13 @@ EMFDRV_RoundRect( PHYSDEV dev, INT left, INT top, INT right, { EMRROUNDRECT emr; INT temp; - EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev; if(left == right || top == bottom) return FALSE; if(left > right) {temp = left; left = right; right = temp;} if(top > bottom) {temp = top; top = bottom; bottom = temp;} - if(GetGraphicsMode(physDev->hdc) == GM_COMPATIBLE) { + if(GetGraphicsMode( dev->hdc ) == GM_COMPATIBLE) { right--; bottom--; } @@ -687,11 +682,10 @@ BOOL CDECL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, EMREXTTEXTOUTW *pemr; DWORD nSize; BOOL ret; - EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE*) dev; int textHeight = 0; int textWidth = 0; - const UINT textAlign = GetTextAlign(physDev->hdc); - const INT graphicsMode = GetGraphicsMode(physDev->hdc); + const UINT textAlign = GetTextAlign( dev->hdc ); + const INT graphicsMode = GetGraphicsMode( dev->hdc ); FLOAT exScale, eyScale; nSize = sizeof(*pemr) + ((count+1) & ~1) * sizeof(WCHAR) + count * sizeof(INT); @@ -702,14 +696,14 @@ BOOL CDECL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, if (graphicsMode == GM_COMPATIBLE) { - const INT horzSize = GetDeviceCaps(physDev->hdc, HORZSIZE); - const INT horzRes = GetDeviceCaps(physDev->hdc, HORZRES); - const INT vertSize = GetDeviceCaps(physDev->hdc, VERTSIZE); - const INT vertRes = GetDeviceCaps(physDev->hdc, VERTRES); + const INT horzSize = GetDeviceCaps( dev->hdc, HORZSIZE ); + const INT horzRes = GetDeviceCaps( dev->hdc, HORZRES ); + const INT vertSize = GetDeviceCaps( dev->hdc, VERTSIZE ); + const INT vertRes = GetDeviceCaps( dev->hdc, VERTRES ); SIZE wndext, vportext; - GetViewportExtEx(physDev->hdc, &vportext); - GetWindowExtEx(physDev->hdc, &wndext); + GetViewportExtEx( dev->hdc, &vportext ); + GetWindowExtEx( dev->hdc, &wndext ); exScale = 100.0 * ((FLOAT)horzSize / (FLOAT)horzRes) / ((FLOAT)wndext.cx / (FLOAT)vportext.cx); eyScale = 100.0 * ((FLOAT)vertSize / (FLOAT)vertRes) / @@ -750,7 +744,7 @@ BOOL CDECL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, for (i = 0; i < count; i++) { textWidth += lpDx[i]; } - if (GetTextExtentPoint32W(physDev->hdc, str, count, &strSize)) + if (GetTextExtentPoint32W( dev->hdc, str, count, &strSize )) textHeight = strSize.cy; } else { @@ -758,7 +752,7 @@ BOOL CDECL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, INT *dx = (INT *)((char*)pemr + pemr->emrtext.offDx); SIZE charSize; for (i = 0; i < count; i++) { - if (GetTextExtentPoint32W(physDev->hdc, str + i, 1, &charSize)) { + if (GetTextExtentPoint32W( dev->hdc, str + i, 1, &charSize )) { dx[i] = charSize.cx; textWidth += charSize.cx; textHeight = max(textHeight, charSize.cy); @@ -793,7 +787,7 @@ BOOL CDECL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, switch (textAlign & (TA_TOP | TA_BOTTOM | TA_BASELINE)) { case TA_BASELINE: { TEXTMETRICW tm; - if (!GetTextMetricsW(physDev->hdc, &tm)) + if (!GetTextMetricsW( dev->hdc, &tm )) tm.tmDescent = 0; /* Play safe here... it's better to have a bounding box */ /* that is too big than too small. */ diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c index 09af117e3ed..839c21f4c08 100644 --- a/dlls/gdi32/enhmfdrv/init.c +++ b/dlls/gdi32/enhmfdrv/init.c @@ -169,7 +169,7 @@ static BOOL CDECL EMFDRV_DeleteDC( PHYSDEV dev ) if (physDev->emh) HeapFree( GetProcessHeap(), 0, physDev->emh ); for(index = 0; index < physDev->handles_size; index++) if(physDev->handles[index]) - GDI_hdc_not_using_object(physDev->handles[index], physDev->hdc); + GDI_hdc_not_using_object(physDev->handles[index], dev->hdc); HeapFree( GetProcessHeap(), 0, physDev->handles ); HeapFree( GetProcessHeap(), 0, physDev ); return TRUE; @@ -223,8 +223,8 @@ void EMFDRV_UpdateBBox( PHYSDEV dev, RECTL *rect ) RECTL *bounds = &physDev->emh->rclBounds; RECTL vportRect = *rect; - LPtoDP(physDev->hdc, (LPPOINT)&vportRect, 2); - + LPtoDP( dev->hdc, (LPPOINT)&vportRect, 2 ); + /* The coordinate systems may be mirrored (LPtoDP handles points, not rectangles) */ if (vportRect.left > vportRect.right) @@ -334,7 +334,6 @@ HDC WINAPI CreateEnhMetaFileW( } push_dc_driver( dc, &physDev->dev, &EMFDRV_Funcs ); - physDev->hdc = dc->hSelf; physDev->handles = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, HANDLE_LIST_INC * sizeof(physDev->handles[0])); physDev->handles_size = HANDLE_LIST_INC; @@ -356,7 +355,7 @@ HDC WINAPI CreateEnhMetaFileW( physDev->numcolors = GetDeviceCaps(hRefDC, NUMCOLORS); physDev->restoring = 0; - SetVirtualResolution(dc->hSelf, 0, 0, 0, 0); + SetVirtualResolution(physDev->dev.hdc, 0, 0, 0, 0); physDev->emh->iType = EMR_HEADER; physDev->emh->nSize = size; @@ -415,8 +414,8 @@ HDC WINAPI CreateEnhMetaFileW( physDev->hFile = hFile; } - TRACE("returning %p\n", dc->hSelf); - ret = dc->hSelf; + TRACE("returning %p\n", physDev->dev.hdc); + ret = physDev->dev.hdc; release_dc_ptr( dc ); if( !hdc ) @@ -446,7 +445,7 @@ HENHMETAFILE WINAPI CloseEnhMetaFile(HDC hdc) /* [in] metafile DC */ } if (dc->refcount != 1) { - FIXME( "not deleting busy DC %p refcount %u\n", dc->hSelf, dc->refcount ); + FIXME( "not deleting busy DC %p refcount %u\n", hdc, dc->refcount ); release_dc_ptr( dc ); return NULL; } diff --git a/dlls/gdi32/enhmfdrv/objects.c b/dlls/gdi32/enhmfdrv/objects.c index 3deeda60189..a8de0314cca 100644 --- a/dlls/gdi32/enhmfdrv/objects.c +++ b/dlls/gdi32/enhmfdrv/objects.c @@ -299,7 +299,7 @@ HBRUSH CDECL EMFDRV_SelectBrush(PHYSDEV dev, HBRUSH hBrush ) goto found; if (!(index = EMFDRV_CreateBrushIndirect(dev, hBrush ))) return 0; - GDI_hdc_using_object(hBrush, physDev->hdc); + GDI_hdc_using_object(hBrush, dev->hdc); found: emr.emr.iType = EMR_SELECTOBJECT; @@ -380,7 +380,7 @@ HFONT CDECL EMFDRV_SelectFont( PHYSDEV dev, HFONT hFont, HANDLE gdiFont ) goto found; if (!(index = EMFDRV_CreateFontIndirect(dev, hFont ))) return HGDI_ERROR; - GDI_hdc_using_object(hFont, physDev->hdc); + GDI_hdc_using_object(hFont, dev->hdc); found: emr.emr.iType = EMR_SELECTOBJECT; @@ -460,7 +460,7 @@ HPEN CDECL EMFDRV_SelectPen(PHYSDEV dev, HPEN hPen ) goto found; if (!(index = EMFDRV_CreatePenIndirect(dev, hPen))) return 0; - GDI_hdc_using_object(hPen, physDev->hdc); + GDI_hdc_using_object(hPen, dev->hdc); found: emr.emr.iType = EMR_SELECTOBJECT; @@ -519,7 +519,7 @@ HPALETTE CDECL EMFDRV_SelectPalette( PHYSDEV dev, HPALETTE hPal, BOOL force ) goto found; if (!(index = EMFDRV_CreatePalette( dev, hPal ))) return 0; - GDI_hdc_using_object( hPal, physDev->hdc ); + GDI_hdc_using_object( hPal, dev->hdc ); found: emr.emr.iType = EMR_SELECTPALETTE; @@ -537,12 +537,12 @@ COLORREF CDECL EMFDRV_SetDCBrushColor( PHYSDEV dev, COLORREF color ) EMRSELECTOBJECT emr; DWORD index; - if (GetCurrentObject( physDev->hdc, OBJ_BRUSH ) != GetStockObject( DC_BRUSH )) return color; + if (GetCurrentObject( dev->hdc, OBJ_BRUSH ) != GetStockObject( DC_BRUSH )) return color; if (physDev->dc_brush) DeleteObject( physDev->dc_brush ); if (!(physDev->dc_brush = CreateSolidBrush( color ))) return CLR_INVALID; if (!(index = EMFDRV_CreateBrushIndirect(dev, physDev->dc_brush ))) return CLR_INVALID; - GDI_hdc_using_object( physDev->dc_brush, physDev->hdc ); + GDI_hdc_using_object( physDev->dc_brush, dev->hdc ); emr.emr.iType = EMR_SELECTOBJECT; emr.emr.nSize = sizeof(emr); emr.ihObject = index; @@ -559,12 +559,12 @@ COLORREF CDECL EMFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color ) DWORD index; LOGPEN logpen = { PS_SOLID, { 0, 0 }, color }; - if (GetCurrentObject( physDev->hdc, OBJ_PEN ) != GetStockObject( DC_PEN )) return color; + if (GetCurrentObject( dev->hdc, OBJ_PEN ) != GetStockObject( DC_PEN )) return color; if (physDev->dc_pen) DeleteObject( physDev->dc_pen ); if (!(physDev->dc_pen = CreatePenIndirect( &logpen ))) return CLR_INVALID; if (!(index = EMFDRV_CreatePenIndirect(dev, physDev->dc_pen))) return CLR_INVALID; - GDI_hdc_using_object( physDev->dc_pen, physDev->hdc ); + GDI_hdc_using_object( physDev->dc_pen, dev->hdc ); emr.emr.iType = EMR_SELECTOBJECT; emr.emr.nSize = sizeof(emr); emr.ihObject = index; -- GitLab