Jacek Caban : gdi32: Move background mode to DC_ATTR.

Alexandre Julliard julliard at winehq.org
Tue Jul 27 15:51:01 CDT 2021


Module: wine
Branch: master
Commit: 4a32a875373cd54ec11925ea904c5a709b2dc431
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4a32a875373cd54ec11925ea904c5a709b2dc431

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jul 26 23:29:51 2021 +0200

gdi32: Move background mode to 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/dc.c             | 31 +++++--------------------------
 dlls/gdi32/dibdrv/objects.c |  6 +++---
 dlls/gdi32/font.c           |  4 ++--
 dlls/gdi32/gdidc.c          |  9 +++++++++
 dlls/gdi32/ntgdi_private.h  |  1 -
 include/ntgdi.h             |  1 +
 6 files changed, 20 insertions(+), 32 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 6ec4a0d1884..0f1daa2125b 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -86,7 +86,7 @@ static void set_initial_dc_state( DC *dc )
     dc->polyFillMode        = ALTERNATE;
     dc->stretchBltMode      = BLACKONWHITE;
     dc->relAbsMode          = ABSOLUTE;
-    dc->backgroundMode      = OPAQUE;
+    dc->attr->background_mode = OPAQUE;
     dc->backgroundColor     = RGB( 255, 255, 255 );
     dc->dcBrushColor        = RGB( 255, 255, 255 );
     dc->dcPenColor          = RGB( 0, 0, 0 );
@@ -392,6 +392,7 @@ INT CDECL nulldrv_SaveDC( PHYSDEV dev )
         HeapFree( GetProcessHeap(), 0, newdc );
         return 0;
     }
+    *newdc->attr            = *dc->attr;
     newdc->layout           = dc->layout;
     newdc->hPen             = dc->hPen;
     newdc->hBrush           = dc->hBrush;
@@ -402,20 +403,16 @@ INT CDECL nulldrv_SaveDC( PHYSDEV dev )
     newdc->polyFillMode     = dc->polyFillMode;
     newdc->stretchBltMode   = dc->stretchBltMode;
     newdc->relAbsMode       = dc->relAbsMode;
-    newdc->backgroundMode   = dc->backgroundMode;
     newdc->backgroundColor  = dc->backgroundColor;
     newdc->textColor        = dc->textColor;
     newdc->dcBrushColor     = dc->dcBrushColor;
     newdc->dcPenColor       = dc->dcPenColor;
     newdc->brush_org        = dc->brush_org;
     newdc->mapperFlags      = dc->mapperFlags;
-    newdc->attr->text_align = dc->attr->text_align;
     newdc->charExtra        = dc->charExtra;
     newdc->breakExtra       = dc->breakExtra;
     newdc->breakRem         = dc->breakRem;
     newdc->MapMode          = dc->MapMode;
-    newdc->attr->graphics_mode = dc->attr->graphics_mode;
-    newdc->attr->cur_pos    = dc->attr->cur_pos;
     newdc->ArcDirection     = dc->ArcDirection;
     newdc->xformWorld2Wnd   = dc->xformWorld2Wnd;
     newdc->xformWorld2Vport = dc->xformWorld2Vport;
@@ -479,7 +476,7 @@ BOOL CDECL nulldrv_RestoreDC( PHYSDEV dev, INT level )
     dc->polyFillMode     = dcs->polyFillMode;
     dc->stretchBltMode   = dcs->stretchBltMode;
     dc->relAbsMode       = dcs->relAbsMode;
-    dc->backgroundMode   = dcs->backgroundMode;
+    dc->attr->background_mode = dcs->attr->background_mode;
     dc->backgroundColor  = dcs->backgroundColor;
     dc->textColor        = dcs->textColor;
     dc->dcBrushColor     = dcs->dcBrushColor;
@@ -1558,24 +1555,6 @@ INT WINAPI GetRelAbs( HDC hdc, DWORD dwIgnore )
 }
 
 
-
-
-/***********************************************************************
- *		GetBkMode (GDI32.@)
- */
-INT WINAPI GetBkMode( HDC hdc )
-{
-    INT ret = 0;
-    DC * dc = get_dc_ptr( hdc );
-    if (dc)
-    {
-        ret = dc->backgroundMode;
-        release_dc_ptr( dc );
-    }
-    return ret;
-}
-
-
 /***********************************************************************
  *		SetBkMode (GDI32.@)
  */
@@ -1595,8 +1574,8 @@ INT WINAPI SetBkMode( HDC hdc, INT mode )
         mode = physdev->funcs->pSetBkMode( physdev, mode );
         if (mode)
         {
-            ret = dc->backgroundMode;
-            dc->backgroundMode = mode;
+            ret = dc->attr->background_mode;
+            dc->attr->background_mode = mode;
         }
         release_dc_ptr( dc );
     }
diff --git a/dlls/gdi32/dibdrv/objects.c b/dlls/gdi32/dibdrv/objects.c
index aa920396463..504e3bc2438 100644
--- a/dlls/gdi32/dibdrv/objects.c
+++ b/dlls/gdi32/dibdrv/objects.c
@@ -1230,7 +1230,7 @@ static BOOL dashed_pen_lines(dibdrv_physdev *pdev, int num, POINT *pts, BOOL clo
     else
     {
         get_color_masks( dc, &pdev->dib, dc->ROPmode, pdev->pen_brush.colorref,
-                         pdev->pen_is_ext ? TRANSPARENT : dc->backgroundMode,
+                         pdev->pen_is_ext ? TRANSPARENT : dc->attr->background_mode,
                          &pdev->dash_masks[1], &pdev->dash_masks[0] );
 
         for (i = 0; i < num - 1; i++)
@@ -1891,12 +1891,12 @@ static BOOL create_hatch_brush_bits(dibdrv_physdev *pdev, dib_brush *brush, BOOL
 
     if (!init_hatch_brush( pdev, brush )) return FALSE;
 
-    get_color_masks( dc, &pdev->dib, brush->rop, brush->colorref, dc->backgroundMode,
+    get_color_masks( dc, &pdev->dib, brush->rop, brush->colorref, dc->attr->background_mode,
                      &fg_mask, &bg_mask );
 
     if (brush->colorref & (1 << 24))  /* PALETTEINDEX */
         *needs_reselect = TRUE;
-    if (dc->backgroundMode != TRANSPARENT && (dc->backgroundColor & (1 << 24)))
+    if (dc->attr->background_mode != TRANSPARENT && (dc->backgroundColor & (1 << 24)))
         *needs_reselect = TRUE;
 
     brush->dib.funcs->create_rop_masks( &brush->dib, hatches[brush->hatch],
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 6ebdae869f8..63f53926b1f 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -5998,7 +5998,7 @@ BOOL WINAPI NtGdiExtTextOutW( HDC hdc, INT x, INT y, UINT flags, const RECT *lpr
 
     TRACE("%p, %d, %d, %08x, %s, %s, %d, %p)\n", hdc, x, y, flags,
           wine_dbgstr_rect(lprect), debugstr_wn(str, count), count, lpDx);
-    TRACE("align = %x bkmode = %x mapmode = %x\n", align, dc->backgroundMode, dc->MapMode);
+    TRACE("align = %x bkmode = %x mapmode = %x\n", align, dc->attr->background_mode, dc->MapMode);
 
     if(align & TA_UPDATECP)
     {
@@ -6202,7 +6202,7 @@ BOOL WINAPI NtGdiExtTextOutW( HDC hdc, INT x, INT y, UINT flags, const RECT *lpr
         break;
     }
 
-    if (dc->backgroundMode != TRANSPARENT)
+    if (dc->attr->background_mode != TRANSPARENT)
     {
         if(!((flags & ETO_CLIPPED) && (flags & ETO_OPAQUE)))
         {
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index cf53d52277d..b6ae60b45fd 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -65,6 +65,15 @@ UINT WINAPI SetTextAlign( HDC hdc, UINT align )
     return ret;
 }
 
+/***********************************************************************
+ *		GetBkMode (GDI32.@)
+ */
+INT WINAPI GetBkMode( HDC hdc )
+{
+    DC_ATTR *dc_attr = get_dc_attr( hdc );
+    return dc_attr ? dc_attr->background_mode : 0;
+}
+
 /***********************************************************************
  *		GetCurrentPositionEx (GDI32.@)
  */
diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h
index dc36789fdec..674c5085a7f 100644
--- a/dlls/gdi32/ntgdi_private.h
+++ b/dlls/gdi32/ntgdi_private.h
@@ -122,7 +122,6 @@ typedef struct tagDC
     WORD          polyFillMode;
     WORD          stretchBltMode;
     WORD          relAbsMode;
-    WORD          backgroundMode;
     COLORREF      backgroundColor;
     COLORREF      textColor;
     COLORREF      dcBrushColor;
diff --git a/include/ntgdi.h b/include/ntgdi.h
index a85fec66723..f71c993e67c 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -101,6 +101,7 @@ typedef struct DC_ATTR
     POINT     cur_pos;
     INT       graphics_mode;
     WORD      text_align;
+    WORD      background_mode;
     void     *emf;
 } DC_ATTR;
 




More information about the wine-cvs mailing list