Jacek Caban : gdi32: Use NtGdiGetDeviceCaps for GetDeviceCaps implementation.

Alexandre Julliard julliard at winehq.org
Fri Jul 30 14:21:08 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jul 30 13:03:15 2021 +0200

gdi32: Use NtGdiGetDeviceCaps for GetDeviceCaps implementation.

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          |  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 );
 }
 




More information about the wine-cvs mailing list