[PATCH v2 09/11] gdi32: Where possible directly access the DC instead of using GetCurrentObject().

Huw Davies huw at codeweavers.com
Fri Jul 29 09:09:34 CDT 2016


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/gdi32/dc.c               | 6 +++---
 dlls/gdi32/driver.c           | 4 ++--
 dlls/gdi32/enhmfdrv/objects.c | 6 ++++--
 dlls/gdi32/font.c             | 2 +-
 dlls/gdi32/palette.c          | 3 ++-
 5 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 3b6c2ea..92a98df 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -354,8 +354,8 @@ void DC_UpdateXforms( DC *dc )
     if (memcmp(&oldworld2vport, &dc->xformWorld2Vport, sizeof(oldworld2vport)) &&
         !GdiIsMetaFileDC(dc->hSelf))
     {
-        SelectObject(dc->hSelf, GetCurrentObject(dc->hSelf, OBJ_FONT));
-        SelectObject(dc->hSelf, GetCurrentObject(dc->hSelf, OBJ_PEN));
+        SelectObject(dc->hSelf, dc->hFont);
+        SelectObject(dc->hSelf, dc->hPen);
     }
 }
 
@@ -1038,7 +1038,7 @@ INT WINAPI SetGraphicsMode( HDC hdc, INT mode )
         dc->GraphicsMode = mode;
     }
     /* font metrics depend on the graphics mode */
-    if (ret != mode) SelectObject(dc->hSelf, GetCurrentObject(dc->hSelf, OBJ_FONT));
+    if (ret != mode) SelectObject(dc->hSelf, dc->hFont);
     release_dc_ptr( dc );
     return ret;
 }
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index d052e04..18e109e 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -390,9 +390,9 @@ static INT nulldrv_GetTextFace( PHYSDEV dev, INT size, LPWSTR name )
 {
     INT ret = 0;
     LOGFONTW font;
-    HFONT hfont = GetCurrentObject( dev->hdc, OBJ_FONT );
+    DC *dc = get_nulldrv_dc( dev );
 
-    if (GetObjectW( hfont, sizeof(font), &font ))
+    if (GetObjectW( dc->hFont, sizeof(font), &font ))
     {
         ret = strlenW( font.lfFaceName ) + 1;
         if (name)
diff --git a/dlls/gdi32/enhmfdrv/objects.c b/dlls/gdi32/enhmfdrv/objects.c
index a8f6fb5..9bf79e4 100644
--- a/dlls/gdi32/enhmfdrv/objects.c
+++ b/dlls/gdi32/enhmfdrv/objects.c
@@ -463,10 +463,11 @@ found:
 COLORREF EMFDRV_SetDCBrushColor( PHYSDEV dev, COLORREF color )
 {
     EMFDRV_PDEVICE *physDev = get_emf_physdev( dev );
+    DC *dc = get_physdev_dc( dev );
     EMRSELECTOBJECT emr;
     DWORD index;
 
-    if (GetCurrentObject( dev->hdc, OBJ_BRUSH ) != GetStockObject( DC_BRUSH )) return color;
+    if (dc->hBrush != GetStockObject( DC_BRUSH )) return color;
 
     if (physDev->dc_brush) DeleteObject( physDev->dc_brush );
     if (!(physDev->dc_brush = CreateSolidBrush( color ))) return CLR_INVALID;
@@ -484,11 +485,12 @@ COLORREF EMFDRV_SetDCBrushColor( PHYSDEV dev, COLORREF color )
 COLORREF EMFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color )
 {
     EMFDRV_PDEVICE *physDev = get_emf_physdev( dev );
+    DC *dc = get_physdev_dc( dev );
     EMRSELECTOBJECT emr;
     DWORD index;
     LOGPEN logpen = { PS_SOLID, { 0, 0 }, color };
 
-    if (GetCurrentObject( dev->hdc, OBJ_PEN ) != GetStockObject( DC_PEN )) return color;
+    if (dc->hPen != GetStockObject( DC_PEN )) return color;
 
     if (physDev->dc_pen) DeleteObject( physDev->dc_pen );
     if (!(physDev->dc_pen = CreatePenIndirect( &logpen ))) return CLR_INVALID;
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index a2b4170..f903972 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -2233,7 +2233,7 @@ BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags,
     }
 
     GetTextMetricsW(hdc, &tm);
-    GetObjectW(GetCurrentObject(hdc, OBJ_FONT), sizeof(lf), &lf);
+    GetObjectW(dc->hFont, sizeof(lf), &lf);
 
     if(!(tm.tmPitchAndFamily & TMPF_VECTOR)) /* Non-scalable fonts shouldn't be rotated */
         lf.lfEscapement = 0;
diff --git a/dlls/gdi32/palette.c b/dlls/gdi32/palette.c
index be84b71..a8135d5 100644
--- a/dlls/gdi32/palette.c
+++ b/dlls/gdi32/palette.c
@@ -503,6 +503,7 @@ UINT WINAPI GetNearestPaletteIndex(
 COLORREF nulldrv_GetNearestColor( PHYSDEV dev, COLORREF color )
 {
     unsigned char spec_type;
+    DC *dc = get_nulldrv_dc( dev );
 
     if (!(GetDeviceCaps( dev->hdc, RASTERCAPS ) & RC_PALETTE)) return color;
 
@@ -512,7 +513,7 @@ COLORREF nulldrv_GetNearestColor( PHYSDEV dev, COLORREF color )
         /* we need logical palette for PALETTERGB and PALETTEINDEX colorrefs */
         UINT index;
         PALETTEENTRY entry;
-        HPALETTE hpal = GetCurrentObject( dev->hdc, OBJ_PAL );
+        HPALETTE hpal = dc->hPalette;
 
         if (!hpal) hpal = GetStockObject( DEFAULT_PALETTE );
         if (spec_type == 2) /* PALETTERGB */
-- 
2.7.4




More information about the wine-patches mailing list