Module: wine Branch: master Commit: c129d13cbd49417078878573bd5f34a0f8f7410e URL: https://source.winehq.org/git/wine.git/?a=commit;h=c129d13cbd49417078878573b...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Jul 30 13:03:15 2021 +0200
gdi32: Use NtGdiGetDeviceCaps for GetDeviceCaps implementation.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdi32/dc.c | 4 ++-- dlls/gdi32/gdi_private.h | 1 + dlls/gdi32/gdidc.c | 10 ++++++++++ dlls/gdi32/mfdrv/init.c | 8 +++++--- dlls/gdi32/tests/dc.c | 5 +++++ 5 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index a51fac027d7..1faf83b3201 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -799,9 +799,9 @@ HDC WINAPI ResetDCW( HDC hdc, const DEVMODEW *devmode )
/*********************************************************************** - * GetDeviceCaps (GDI32.@) + * NtGdiGetDeviceCaps (win32u.@) */ -INT WINAPI GetDeviceCaps( HDC hdc, INT cap ) +INT WINAPI NtGdiGetDeviceCaps( HDC hdc, INT cap ) { DC *dc; INT ret = 0; diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 197ee8942c5..68d692fbab3 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -53,6 +53,7 @@ extern BOOL METADC_ExtTextOut( HDC hdc, INT x, INT y, UINT flags, const RECT *re const WCHAR *str, UINT count, const INT *dx ) DECLSPEC_HIDDEN; extern BOOL METADC_FillRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN; extern BOOL METADC_FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush, INT x, INT y ) DECLSPEC_HIDDEN; +extern INT METADC_GetDeviceCaps( HDC hdc, INT cap ); extern BOOL METADC_InvertRgn( HDC hdc, HRGN hrgn ) DECLSPEC_HIDDEN; extern BOOL METADC_LineTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL METADC_MoveTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c index 6dd5940d45a..5dcc3be6baf 100644 --- a/dlls/gdi32/gdidc.c +++ b/dlls/gdi32/gdidc.c @@ -125,6 +125,16 @@ INT WINAPI SaveDC( HDC hdc ) return NtGdiSaveDC( hdc ); }
+/*********************************************************************** + * GetDeviceCaps (GDI32.@) + */ +INT WINAPI GetDeviceCaps( HDC hdc, INT cap ) +{ + if (is_meta_dc( hdc )) return METADC_GetDeviceCaps( hdc, cap ); + if (!get_dc_attr( hdc )) return FALSE; + return NtGdiGetDeviceCaps( hdc, cap ); +} + /*********************************************************************** * GetTextAlign (GDI32.@) */ diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c index 91be4c1ef6c..73b3ce7365b 100644 --- a/dlls/gdi32/mfdrv/init.c +++ b/dlls/gdi32/mfdrv/init.c @@ -78,12 +78,14 @@ static UINT CDECL MFDRV_SetBoundsRect( PHYSDEV dev, RECT *rect, UINT flags )
/****************************************************************** - * MFDRV_GetDeviceCaps + * METADC_GetDeviceCaps * *A very simple implementation that returns DT_METAFILE */ -static INT CDECL MFDRV_GetDeviceCaps(PHYSDEV dev, INT cap) +INT METADC_GetDeviceCaps( HDC hdc, INT cap ) { + if (!get_metadc_ptr( hdc )) return 0; + switch(cap) { case TECHNOLOGY: @@ -137,7 +139,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs = NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharWidth */ NULL, /* pGetCharWidthInfo */ - MFDRV_GetDeviceCaps, /* pGetDeviceCaps */ + NULL, /* pGetDeviceCaps */ NULL, /* pGetDeviceGammaRamp */ NULL, /* pGetFontData */ NULL, /* pGetFontRealizationInfo */ diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c index bdc8186bf76..2e005f23f3c 100644 --- a/dlls/gdi32/tests/dc.c +++ b/dlls/gdi32/tests/dc.c @@ -89,6 +89,11 @@ static void test_dc_values(void) attr = GetBkColor(ULongToHandle(0xdeadbeef)); ok(attr == CLR_INVALID, "attr = %x\n", attr);
+ SetLastError(0xdeadbeef); + attr = GetDeviceCaps(ULongToHandle(0xdeadbeef), TECHNOLOGY); + ok(!attr, "GetDeviceCaps rets %d\n", attr); + ok(GetLastError() == ERROR_INVALID_HANDLE, "GetLastError() = %u\n", GetLastError()); + DeleteDC( hdc ); }