Jacek Caban : gdi32: Store text color in DC_ATTR.

Alexandre Julliard julliard at winehq.org
Wed Jul 28 15:37:41 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Jul 28 11:40:07 2021 +0200

gdi32: Store text color 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/bitblt.c          |  2 +-
 dlls/gdi32/dc.c              | 29 ++++++-----------------------
 dlls/gdi32/dib.c             |  2 +-
 dlls/gdi32/dibdrv/graphics.c |  4 ++--
 dlls/gdi32/dibdrv/objects.c  |  2 +-
 dlls/gdi32/font.c            |  4 ++--
 dlls/gdi32/gdidc.c           |  9 +++++++++
 dlls/gdi32/ntgdi_private.h   |  1 -
 include/ntgdi.h              |  1 +
 9 files changed, 23 insertions(+), 31 deletions(-)

diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c
index b58419f1c78..39b28cba6df 100644
--- a/dlls/gdi32/bitblt.c
+++ b/dlls/gdi32/bitblt.c
@@ -262,7 +262,7 @@ static RGBQUAD get_dc_rgb_color( DC *dc, int color_table_size, COLORREF color )
 void get_mono_dc_colors( DC *dc, int color_table_size, BITMAPINFO *info, int count )
 {
     info->bmiColors[count - 1] = get_dc_rgb_color( dc, color_table_size, dc->attr->background_color );
-    if (count > 1) info->bmiColors[0] = get_dc_rgb_color( dc, color_table_size, dc->textColor );
+    if (count > 1) info->bmiColors[0] = get_dc_rgb_color( dc, color_table_size, dc->attr->text_color );
     info->bmiHeader.biClrUsed = count;
 }
 
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 3725bd1abf6..71d27c03e4f 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -90,7 +90,7 @@ static void set_initial_dc_state( DC *dc )
     dc->attr->background_color = RGB( 255, 255, 255 );
     dc->dcBrushColor        = RGB( 255, 255, 255 );
     dc->dcPenColor          = RGB( 0, 0, 0 );
-    dc->textColor           = RGB( 0, 0, 0 );
+    dc->attr->text_color    = RGB( 0, 0, 0 );
     dc->brush_org.x         = 0;
     dc->brush_org.y         = 0;
     dc->mapperFlags         = 0;
@@ -275,7 +275,7 @@ void DC_InitDC( DC* dc )
 {
     PHYSDEV physdev = GET_DC_PHYSDEV( dc, pRealizeDefaultPalette );
     physdev->funcs->pRealizeDefaultPalette( physdev );
-    SetTextColor( dc->hSelf, dc->textColor );
+    SetTextColor( dc->hSelf, dc->attr->text_color );
     SetBkColor( dc->hSelf, dc->attr->background_color );
     NtGdiSelectPen( dc->hSelf, dc->hPen );
     NtGdiSelectBrush( dc->hSelf, dc->hBrush );
@@ -401,7 +401,6 @@ INT CDECL nulldrv_SaveDC( PHYSDEV dev )
     newdc->polyFillMode     = dc->polyFillMode;
     newdc->stretchBltMode   = dc->stretchBltMode;
     newdc->relAbsMode       = dc->relAbsMode;
-    newdc->textColor        = dc->textColor;
     newdc->dcBrushColor     = dc->dcBrushColor;
     newdc->dcPenColor       = dc->dcPenColor;
     newdc->brush_org        = dc->brush_org;
@@ -475,7 +474,7 @@ BOOL CDECL nulldrv_RestoreDC( PHYSDEV dev, INT level )
     dc->relAbsMode       = dcs->relAbsMode;
     dc->attr->background_mode  = dcs->attr->background_mode;
     dc->attr->background_color = dcs->attr->background_color;
-    dc->textColor        = dcs->textColor;
+    dc->attr->text_color       = dcs->attr->text_color;
     dc->dcBrushColor     = dcs->dcBrushColor;
     dc->dcPenColor       = dcs->dcPenColor;
     dc->brush_org        = dcs->brush_org;
@@ -527,7 +526,7 @@ BOOL CDECL nulldrv_RestoreDC( PHYSDEV dev, INT level )
     NtGdiSelectFont( dev->hdc, dcs->hFont );
     NtGdiSelectPen( dev->hdc, dcs->hPen );
     SetBkColor( dev->hdc, dcs->attr->background_color);
-    SetTextColor( dev->hdc, dcs->textColor);
+    SetTextColor( dev->hdc, dcs->attr->text_color);
     GDISelectPalette( dev->hdc, dcs->hPalette, FALSE );
 
     dc->saved_dc  = dcs->saved_dc;
@@ -929,22 +928,6 @@ COLORREF WINAPI SetBkColor( HDC hdc, COLORREF color )
 }
 
 
-/***********************************************************************
- *		GetTextColor (GDI32.@)
- */
-COLORREF WINAPI GetTextColor( HDC hdc )
-{
-    COLORREF ret = 0;
-    DC * dc = get_dc_ptr( hdc );
-    if (dc)
-    {
-        ret = dc->textColor;
-        release_dc_ptr( dc );
-    }
-    return ret;
-}
-
-
 /***********************************************************************
  *           SetTextColor    (GDI32.@)
  */
@@ -958,8 +941,8 @@ COLORREF WINAPI SetTextColor( HDC hdc, COLORREF color )
     if (dc)
     {
         PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetTextColor );
-        ret = dc->textColor;
-        dc->textColor = physdev->funcs->pSetTextColor( physdev, color );
+        ret = dc->attr->text_color;
+        dc->attr->text_color = physdev->funcs->pSetTextColor( physdev, color );
         release_dc_ptr( dc );
     }
     return ret;
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c
index 4c65b271661..22237b207a5 100644
--- a/dlls/gdi32/dib.c
+++ b/dlls/gdi32/dib.c
@@ -937,7 +937,7 @@ UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries, const RGBQUA
 
         if (result)  /* update colors of selected objects */
         {
-            SetTextColor( hdc, dc->textColor );
+            SetTextColor( hdc, dc->attr->text_color );
             SetBkColor( hdc, dc->attr->background_color );
             NtGdiSelectPen( hdc, dc->hPen );
             NtGdiSelectBrush( hdc, dc->hBrush );
diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c
index 402b1b10323..3eb9c5184a4 100644
--- a/dlls/gdi32/dibdrv/graphics.c
+++ b/dlls/gdi32/dibdrv/graphics.c
@@ -674,7 +674,7 @@ static inline void get_text_bkgnd_masks( DC *dc, const dib_info *dib, rop_mask *
         mask->xor = get_pixel_color( dc, dib, bg, FALSE );
     else
     {
-        COLORREF fg = dc->textColor;
+        COLORREF fg = dc->attr->text_color;
         mask->xor = get_pixel_color( dc, dib, fg, TRUE );
         if (fg != bg) mask->xor = ~mask->xor;
     }
@@ -823,7 +823,7 @@ static void render_string( DC *dc, dib_info *dib, struct cached_font *font, INT
     glyph_dib.bits.is_copy = FALSE;
     glyph_dib.bits.free    = NULL;
 
-    text_color = get_pixel_color( dc, dib, dc->textColor, TRUE );
+    text_color = get_pixel_color( dc, dib, dc->attr->text_color, TRUE );
 
     if (glyph_dib.bit_count == 32)
         intensity.gamma_ramp = dc->font_gamma_ramp;
diff --git a/dlls/gdi32/dibdrv/objects.c b/dlls/gdi32/dibdrv/objects.c
index e34e78550eb..3a0ea7465a6 100644
--- a/dlls/gdi32/dibdrv/objects.c
+++ b/dlls/gdi32/dibdrv/objects.c
@@ -1981,7 +1981,7 @@ static BOOL select_pattern_brush( dibdrv_physdev *pdev, dib_brush *brush, BOOL *
         BOOL got_pixel;
         COLORREF color;
 
-        color = make_rgb_colorref( dc, &pdev->dib, dc->textColor, &got_pixel, &pixel );
+        color = make_rgb_colorref( dc, &pdev->dib, dc->attr->text_color, &got_pixel, &pixel );
         color_table[0].rgbRed      = GetRValue( color );
         color_table[0].rgbGreen    = GetGValue( color );
         color_table[0].rgbBlue     = GetBValue( color );
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index e9595caa503..6e4a52fec02 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -5783,7 +5783,7 @@ BOOL CDECL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT
         }
     }
 
-    pen = CreatePen( PS_SOLID, 1, dc->textColor );
+    pen = CreatePen( PS_SOLID, 1, dc->attr->text_color );
     orig = NtGdiSelectPen( dev->hdc, pen );
 
     for (i = 0; i < count; i++)
@@ -6238,7 +6238,7 @@ done:
         OUTLINETEXTMETRICW* otm = NULL;
         POINT pts[5];
         HPEN hpen = NtGdiSelectPen(hdc, GetStockObject(NULL_PEN));
-        HBRUSH hbrush = CreateSolidBrush(dc->textColor);
+        HBRUSH hbrush = CreateSolidBrush( dc->attr->text_color );
 
         hbrush = NtGdiSelectBrush(hdc, hbrush);
 
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index d16d6c8d94a..3a4e6e48899 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -74,6 +74,15 @@ COLORREF WINAPI GetBkColor( HDC hdc )
     return dc_attr ? dc_attr->background_color : CLR_INVALID;
 }
 
+/***********************************************************************
+ *		GetTextColor (GDI32.@)
+ */
+COLORREF WINAPI GetTextColor( HDC hdc )
+{
+    DC_ATTR *dc_attr = get_dc_attr( hdc );
+    return dc_attr ? dc_attr->text_color : 0;
+}
+
 /***********************************************************************
  *		GetBkMode (GDI32.@)
  */
diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h
index 65a06db61e5..110fc622d03 100644
--- a/dlls/gdi32/ntgdi_private.h
+++ b/dlls/gdi32/ntgdi_private.h
@@ -119,7 +119,6 @@ typedef struct tagDC
     WORD          polyFillMode;
     WORD          stretchBltMode;
     WORD          relAbsMode;
-    COLORREF      textColor;
     COLORREF      dcBrushColor;
     COLORREF      dcPenColor;
     POINT         brush_org;
diff --git a/include/ntgdi.h b/include/ntgdi.h
index cb238b6eda1..c1221d7995b 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -100,6 +100,7 @@ typedef struct DC_ATTR
 {
     LONG      disabled;            /* disabled flag, controled by DCHF_(DISABLE|ENABLE)DC */
     COLORREF  background_color;
+    COLORREF  text_color;
     POINT     cur_pos;
     INT       graphics_mode;
     DWORD     layout;




More information about the wine-cvs mailing list