[PATCH v2 5/6] gdi32: Use internal get_stock_object in ntgdi functions.
Huw Davies
huw at codeweavers.com
Fri Sep 3 07:59:51 CDT 2021
From: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
dlls/gdi32/bitblt.c | 2 +-
dlls/gdi32/bitmap.c | 2 +-
dlls/gdi32/dc.c | 20 ++++++++++----------
dlls/gdi32/dibdrv/objects.c | 8 ++++----
dlls/gdi32/font.c | 2 +-
dlls/gdi32/gdiobj.c | 23 +++++++++++++++++++++++
dlls/gdi32/ntgdi_private.h | 1 +
dlls/gdi32/painting.c | 2 +-
dlls/gdi32/palette.c | 8 ++++----
dlls/gdi32/pen.c | 2 +-
10 files changed, 47 insertions(+), 23 deletions(-)
diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c
index e6a846c3d74..ec117199a86 100644
--- a/dlls/gdi32/bitblt.c
+++ b/dlls/gdi32/bitblt.c
@@ -785,7 +785,7 @@ BOOL WINAPI MaskBlt(HDC hdcDest, INT nXDest, INT nYDest,
return BitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, FRGND_ROP3(dwRop));
hbrMask = CreatePatternBrush(hbmMask);
- hbrDst = NtGdiSelectBrush(hdcDest, GetStockObject(NULL_BRUSH));
+ hbrDst = NtGdiSelectBrush( hdcDest, get_stock_object(NULL_BRUSH) );
/* make bitmap */
hDC1 = NtGdiCreateCompatibleDC( hdcDest );
diff --git a/dlls/gdi32/bitmap.c b/dlls/gdi32/bitmap.c
index 1ce0e940235..cc9b106de0b 100644
--- a/dlls/gdi32/bitmap.c
+++ b/dlls/gdi32/bitmap.c
@@ -387,7 +387,7 @@ HGDIOBJ WINAPI NtGdiSelectBitmap( HDC hdc, HGDIOBJ handle )
goto done;
}
- if (handle != GetStockObject(DEFAULT_BITMAP) && GDI_get_ref_count( handle ))
+ if (handle != get_stock_object( DEFAULT_BITMAP ) && GDI_get_ref_count( handle ))
{
WARN( "Bitmap already selected in another DC\n" );
GDI_ReleaseObj( handle );
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 739dc53d31d..42217681b17 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -133,10 +133,10 @@ DC *alloc_dc_ptr( DWORD magic )
dc->physDev = &dc->nulldrv;
dc->thread = GetCurrentThreadId();
dc->refcount = 1;
- dc->hPen = GDI_inc_ref_count( GetStockObject( BLACK_PEN ));
- dc->hBrush = GDI_inc_ref_count( GetStockObject( WHITE_BRUSH ));
- dc->hFont = GDI_inc_ref_count( GetStockObject( SYSTEM_FONT ));
- dc->hPalette = GetStockObject( DEFAULT_PALETTE );
+ dc->hPen = GDI_inc_ref_count( get_stock_object( BLACK_PEN ));
+ dc->hBrush = GDI_inc_ref_count( get_stock_object( WHITE_BRUSH ));
+ dc->hFont = GDI_inc_ref_count( get_stock_object( SYSTEM_FONT ));
+ dc->hPalette = get_stock_object( DEFAULT_PALETTE );
set_initial_dc_state( dc );
@@ -395,11 +395,11 @@ static BOOL reset_dc_state( HDC hdc )
set_initial_dc_state( dc );
set_bk_color( dc, RGB( 255, 255, 255 ));
set_text_color( dc, RGB( 0, 0, 0 ));
- NtGdiSelectBrush( hdc, GetStockObject( WHITE_BRUSH ));
- NtGdiSelectFont( hdc, GetStockObject( SYSTEM_FONT ));
- NtGdiSelectPen( hdc, GetStockObject( BLACK_PEN ));
+ NtGdiSelectBrush( hdc, get_stock_object( WHITE_BRUSH ));
+ NtGdiSelectFont( hdc, get_stock_object( SYSTEM_FONT ));
+ NtGdiSelectPen( hdc, get_stock_object( BLACK_PEN ));
NtGdiSetVirtualResolution( hdc, 0, 0, 0, 0 );
- GDISelectPalette( hdc, GetStockObject( DEFAULT_PALETTE ), FALSE );
+ GDISelectPalette( hdc, get_stock_object( DEFAULT_PALETTE ), FALSE );
NtGdiSetBoundsRect( hdc, NULL, DCB_DISABLE );
NtGdiAbortPath( hdc );
@@ -659,7 +659,7 @@ HDC WINAPI CreateDCW( LPCWSTR driver, LPCWSTR device, LPCWSTR output,
if (!(dc = alloc_dc_ptr( NTGDI_OBJ_DC ))) return 0;
hdc = dc->hSelf;
- dc->hBitmap = GDI_inc_ref_count( GetStockObject( DEFAULT_BITMAP ));
+ dc->hBitmap = GDI_inc_ref_count( get_stock_object( DEFAULT_BITMAP ));
TRACE("(driver=%s, device=%s, output=%s): returning %p\n",
debugstr_w(driver), debugstr_w(device), debugstr_w(output), dc->hSelf );
@@ -727,7 +727,7 @@ HDC WINAPI NtGdiCreateCompatibleDC( HDC hdc )
TRACE("(%p): returning %p\n", hdc, dc->hSelf );
- dc->hBitmap = GDI_inc_ref_count( GetStockObject( DEFAULT_BITMAP ));
+ dc->hBitmap = GDI_inc_ref_count( get_stock_object( DEFAULT_BITMAP ));
dc->attr->vis_rect.left = 0;
dc->attr->vis_rect.top = 0;
dc->attr->vis_rect.right = 1;
diff --git a/dlls/gdi32/dibdrv/objects.c b/dlls/gdi32/dibdrv/objects.c
index 4e24de0b3aa..452b2705e51 100644
--- a/dlls/gdi32/dibdrv/objects.c
+++ b/dlls/gdi32/dibdrv/objects.c
@@ -1770,7 +1770,7 @@ COLORREF CDECL dibdrv_SetDCPenColor( PHYSDEV dev, COLORREF color )
dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
DC *dc = get_physdev_dc( dev );
- if (dc->hPen == GetStockObject( DC_PEN ))
+ if (dc->hPen == get_stock_object( DC_PEN ))
pdev->pen_brush.colorref = color;
return color;
@@ -2136,7 +2136,7 @@ HBRUSH CDECL dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush, const struct brush_
GetObjectW( hbrush, sizeof(logbrush), &logbrush );
- if (hbrush == GetStockObject( DC_BRUSH ))
+ if (hbrush == get_stock_object( DC_BRUSH ))
logbrush.lbColor = dc->attr->brush_color;
select_brush( pdev, &pdev->brush, &logbrush, pattern, TRUE );
@@ -2188,7 +2188,7 @@ HPEN CDECL dibdrv_SelectPen( PHYSDEV dev, HPEN hpen, const struct brush_pattern
pdev->pen_endcap = logpen.lopnStyle & PS_ENDCAP_MASK;
pdev->pen_width = get_pen_device_width( dc, logpen.lopnWidth.x );
- if (hpen == GetStockObject( DC_PEN ))
+ if (hpen == get_stock_object( DC_PEN ))
logbrush.lbColor = dc->attr->pen_color;
set_dash_pattern( &pdev->pen_pattern, 0, NULL );
@@ -2256,7 +2256,7 @@ COLORREF CDECL dibdrv_SetDCBrushColor( PHYSDEV dev, COLORREF color )
dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
DC *dc = get_physdev_dc( dev );
- if (dc->hBrush == GetStockObject( DC_BRUSH ))
+ if (dc->hBrush == get_stock_object( DC_BRUSH ))
{
LOGBRUSH logbrush = { BS_SOLID, color, 0 };
select_brush( pdev, &pdev->brush, &logbrush, NULL, TRUE );
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 1bbab661c95..792ba803257 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -5289,7 +5289,7 @@ done:
UINT size = NtGdiGetOutlineTextMetricsInternalW( hdc, 0, NULL, 0 );
OUTLINETEXTMETRICW* otm = NULL;
POINT pts[5];
- HPEN hpen = NtGdiSelectPen(hdc, GetStockObject(NULL_PEN));
+ HPEN hpen = NtGdiSelectPen( hdc, get_stock_object(NULL_PEN) );
HBRUSH hbrush = CreateSolidBrush( dc->attr->text_color );
hbrush = NtGdiSelectBrush(hdc, hbrush);
diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c
index 50c337cd6c4..c12ff98c058 100644
--- a/dlls/gdi32/gdiobj.c
+++ b/dlls/gdi32/gdiobj.c
@@ -610,6 +610,29 @@ static void set_gdi_shared(void)
NtCurrentTeb()->Peb->GdiSharedHandleTable = &gdi_shared;
}
+HGDIOBJ get_stock_object( INT obj )
+{
+ assert( obj >= 0 && obj <= STOCK_LAST + 1 && obj != 9 );
+
+ switch (obj)
+ {
+ case OEM_FIXED_FONT:
+ if (get_system_dpi() != 96) obj = 9;
+ break;
+ case SYSTEM_FONT:
+ if (get_system_dpi() != 96) obj = STOCK_LAST + 2;
+ break;
+ case SYSTEM_FIXED_FONT:
+ if (get_system_dpi() != 96) obj = STOCK_LAST + 3;
+ break;
+ case DEFAULT_GUI_FONT:
+ if (get_system_dpi() != 96) obj = STOCK_LAST + 4;
+ break;
+ }
+
+ return entry_to_handle( handle_entry( ULongToHandle( obj + FIRST_GDI_HANDLE )));
+}
+
static void init_stock_objects(void)
{
const struct DefaultFontInfo *deffonts;
diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h
index 73870fcd2f8..ec3db21a2bd 100644
--- a/dlls/gdi32/ntgdi_private.h
+++ b/dlls/gdi32/ntgdi_private.h
@@ -403,6 +403,7 @@ extern HGDIOBJ GDI_inc_ref_count( HGDIOBJ handle ) DECLSPEC_HIDDEN;
extern BOOL GDI_dec_ref_count( HGDIOBJ handle ) DECLSPEC_HIDDEN;
extern DWORD get_dpi(void) DECLSPEC_HIDDEN;
extern DWORD get_system_dpi(void) DECLSPEC_HIDDEN;
+extern HGDIOBJ get_stock_object( INT obj ) DECLSPEC_HIDDEN;
/* mapping.c */
extern BOOL dp_to_lp( DC *dc, POINT *points, INT count ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/painting.c b/dlls/gdi32/painting.c
index 1ab977595f8..acb3a95f30f 100644
--- a/dlls/gdi32/painting.c
+++ b/dlls/gdi32/painting.c
@@ -100,7 +100,7 @@ BOOL CDECL nulldrv_FrameRgn( PHYSDEV dev, HRGN rgn, HBRUSH brush, INT width, INT
BOOL CDECL nulldrv_InvertRgn( PHYSDEV dev, HRGN rgn )
{
INT prev_rop = SetROP2( dev->hdc, R2_NOT );
- BOOL ret = NtGdiFillRgn( dev->hdc, rgn, GetStockObject(BLACK_BRUSH) );
+ BOOL ret = NtGdiFillRgn( dev->hdc, rgn, get_stock_object(BLACK_BRUSH) );
SetROP2( dev->hdc, prev_rop );
return ret;
}
diff --git a/dlls/gdi32/palette.c b/dlls/gdi32/palette.c
index 0451adbdf80..a14ba9aeb08 100644
--- a/dlls/gdi32/palette.c
+++ b/dlls/gdi32/palette.c
@@ -202,7 +202,7 @@ static UINT set_palette_entries( HPALETTE hpalette, UINT start, UINT count,
TRACE("hpal=%p,start=%i,count=%i\n",hpalette,start,count );
hpalette = get_full_gdi_handle( hpalette );
- if (hpalette == GetStockObject(DEFAULT_PALETTE)) return 0;
+ if (hpalette == get_stock_object(DEFAULT_PALETTE)) return 0;
palPtr = GDI_GetObjPtr( hpalette, NTGDI_OBJ_PAL );
if (!palPtr) return 0;
@@ -255,7 +255,7 @@ static BOOL animate_palette( HPALETTE hPal, UINT StartIndex, UINT NumEntries,
TRACE("%p (%i - %i)\n", hPal, StartIndex,StartIndex+NumEntries);
hPal = get_full_gdi_handle( hPal );
- if( hPal != GetStockObject(DEFAULT_PALETTE) )
+ if( hPal != get_stock_object(DEFAULT_PALETTE) )
{
PALETTEOBJ * palPtr;
UINT pal_entries;
@@ -412,7 +412,7 @@ COLORREF CDECL nulldrv_GetNearestColor( PHYSDEV dev, COLORREF color )
PALETTEENTRY entry;
HPALETTE hpal = dc->hPalette;
- if (!hpal) hpal = GetStockObject( DEFAULT_PALETTE );
+ if (!hpal) hpal = get_stock_object( DEFAULT_PALETTE );
if (spec_type == 2) /* PALETTERGB */
index = NtGdiGetNearestPaletteIndex( hpal, color );
else /* PALETTEINDEX */
@@ -549,7 +549,7 @@ UINT WINAPI GDIRealizePalette( HDC hdc )
TRACE("%p...\n", hdc );
- if( dc->hPalette == GetStockObject( DEFAULT_PALETTE ))
+ if( dc->hPalette == get_stock_object( DEFAULT_PALETTE ))
{
PHYSDEV physdev = GET_DC_PHYSDEV( dc, pRealizeDefaultPalette );
realized = physdev->funcs->pRealizeDefaultPalette( physdev );
diff --git a/dlls/gdi32/pen.c b/dlls/gdi32/pen.c
index f79eaca4185..fa8b138229e 100644
--- a/dlls/gdi32/pen.c
+++ b/dlls/gdi32/pen.c
@@ -92,7 +92,7 @@ HPEN create_pen( INT style, INT width, COLORREF color )
HPEN WINAPI NtGdiCreatePen( INT style, INT width, COLORREF color, HBRUSH brush )
{
if (brush) FIXME( "brush not supported\n" );
- if (style == PS_NULL) return GetStockObject( NULL_PEN );
+ if (style == PS_NULL) return get_stock_object( NULL_PEN );
return create_pen( style, width, color );
}
--
2.23.0
More information about the wine-devel
mailing list