Zhiyi Zhang : gdi32: Return correct color depth for display DCs in GetDeviceCaps().

Alexandre Julliard julliard at winehq.org
Mon Jun 7 16:30:37 CDT 2021


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

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Mon May 31 16:12:44 2021 +0800

gdi32: Return correct color depth for display DCs in GetDeviceCaps().

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=29184
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/driver.c         | 19 ++++++++++++++++++-
 dlls/user32/tests/monitor.c |  1 -
 dlls/winex11.drv/init.c     |  2 --
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index a2ebd018bca..2042701dd45 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -460,7 +460,24 @@ static INT CDECL nulldrv_GetDeviceCaps( PHYSDEV dev, INT cap )
 
         return pGetSystemMetrics ? pGetSystemMetrics( SM_CYSCREEN ) : 480;
     }
-    case BITSPIXEL:       return 32;
+    case BITSPIXEL:
+    {
+        DEVMODEW devmode;
+        WCHAR *display;
+        DC *dc;
+
+        if (GetDeviceCaps( dev->hdc, TECHNOLOGY ) == DT_RASDISPLAY && pEnumDisplaySettingsW)
+        {
+            dc = get_nulldrv_dc( dev );
+            display = dc->display[0] ? dc->display : NULL;
+            memset( &devmode, 0, sizeof(devmode) );
+            devmode.dmSize = sizeof(devmode);
+            if (pEnumDisplaySettingsW( display, ENUM_CURRENT_SETTINGS, &devmode )
+                && devmode.dmFields & DM_BITSPERPEL && devmode.dmBitsPerPel)
+                return devmode.dmBitsPerPel;
+        }
+        return 32;
+    }
     case PLANES:          return 1;
     case NUMBRUSHES:      return -1;
     case NUMPENS:         return -1;
diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c
index ab03837f5e6..654f77ed617 100644
--- a/dlls/user32/tests/monitor.c
+++ b/dlls/user32/tests/monitor.c
@@ -2068,7 +2068,6 @@ static void _check_display_dc(INT line, HDC hdc, const DEVMODEA *dm, BOOL allow_
             dm->dmDisplayFrequency, value);
 
     value = GetDeviceCaps(hdc, BITSPIXEL);
-    todo_wine_if(dm->dmBitsPerPel != 32)
     ok_(__FILE__, line)(value == dm->dmBitsPerPel, "Expected BITSPIXEL %d, got %d.\n",
             dm->dmBitsPerPel, value);
 
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c
index d070c0f1171..ff3d5317697 100644
--- a/dlls/winex11.drv/init.c
+++ b/dlls/winex11.drv/init.c
@@ -162,8 +162,6 @@ static INT CDECL X11DRV_GetDeviceCaps( PHYSDEV dev, INT cap )
 {
     switch(cap)
     {
-    case BITSPIXEL:
-        return screen_bpp;
     case SIZEPALETTE:
         return palette_size;
     default:




More information about the wine-cvs mailing list