Rémi Bernon : winemac.drv: Introduce new display_mode_to_devmode helper.

Alexandre Julliard julliard at winehq.org
Wed Jul 27 16:17:07 CDT 2022


Module: wine
Branch: master
Commit: 237778d7f6974a36184888bf8bbcfe10cd9fe5d1
URL:    https://gitlab.winehq.org/wine/wine/-/commit/237778d7f6974a36184888bf8bbcfe10cd9fe5d1

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Sat Jul  9 01:24:09 2022 +0200

winemac.drv: Introduce new display_mode_to_devmode helper.

---

 dlls/winemac.drv/display.c | 136 ++++++++++++++++++++++++---------------------
 1 file changed, 73 insertions(+), 63 deletions(-)

diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c
index a217a3fc422..d2f221fdbd1 100644
--- a/dlls/winemac.drv/display.c
+++ b/dlls/winemac.drv/display.c
@@ -61,6 +61,78 @@ static pthread_mutex_t modes_mutex = PTHREAD_MUTEX_INITIALIZER;
 static BOOL inited_original_display_mode;
 
 
+static int display_mode_bits_per_pixel(CGDisplayModeRef display_mode)
+{
+    CFStringRef pixel_encoding;
+    int bits_per_pixel = 0;
+
+    pixel_encoding = CGDisplayModeCopyPixelEncoding(display_mode);
+    if (pixel_encoding)
+    {
+        if (CFEqual(pixel_encoding, CFSTR(kIO32BitFloatPixels)))
+            bits_per_pixel = 128;
+        else if (CFEqual(pixel_encoding, CFSTR(kIO16BitFloatPixels)))
+            bits_per_pixel = 64;
+        else if (CFEqual(pixel_encoding, CFSTR(kIO64BitDirectPixels)))
+            bits_per_pixel = 64;
+        else if (CFEqual(pixel_encoding, CFSTR(kIO30BitDirectPixels)))
+            bits_per_pixel = 30;
+        else if (CFEqual(pixel_encoding, CFSTR(IO32BitDirectPixels)))
+            bits_per_pixel = 32;
+        else if (CFEqual(pixel_encoding, CFSTR(IO16BitDirectPixels)))
+            bits_per_pixel = 16;
+        else if (CFEqual(pixel_encoding, CFSTR(IO8BitIndexedPixels)))
+            bits_per_pixel = 8;
+        else if (CFEqual(pixel_encoding, CFSTR(IO4BitIndexedPixels)))
+            bits_per_pixel = 4;
+        else if (CFEqual(pixel_encoding, CFSTR(IO2BitIndexedPixels)))
+            bits_per_pixel = 2;
+        else if (CFEqual(pixel_encoding, CFSTR(IO1BitIndexedPixels)))
+            bits_per_pixel = 1;
+
+        CFRelease(pixel_encoding);
+    }
+
+    return bits_per_pixel;
+}
+
+
+static void display_mode_to_devmode(CGDirectDisplayID display_id, CGDisplayModeRef display_mode, DEVMODEW *devmode)
+{
+    uint32_t io_flags;
+    double rotation;
+
+    rotation = CGDisplayRotation(display_id);
+    devmode->dmDisplayOrientation = ((int)((rotation / 90) + 0.5)) % 4;
+    devmode->dmFields |= DM_DISPLAYORIENTATION;
+
+    io_flags = CGDisplayModeGetIOFlags(display_mode);
+    if (io_flags & kDisplayModeStretchedFlag)
+        devmode->dmDisplayFixedOutput = DMDFO_STRETCH;
+    else
+        devmode->dmDisplayFixedOutput = DMDFO_CENTER;
+    devmode->dmFields |= DM_DISPLAYFIXEDOUTPUT;
+
+    devmode->dmBitsPerPel = display_mode_bits_per_pixel(display_mode);
+    if (devmode->dmBitsPerPel)
+        devmode->dmFields |= DM_BITSPERPEL;
+
+    devmode->dmPelsWidth = CGDisplayModeGetWidth(display_mode);
+    devmode->dmPelsHeight = CGDisplayModeGetHeight(display_mode);
+    devmode->dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT;
+
+    devmode->dmDisplayFlags = 0;
+    if (io_flags & kDisplayModeInterlacedFlag)
+        devmode->dmDisplayFlags |= DM_INTERLACED;
+    devmode->dmFields |= DM_DISPLAYFLAGS;
+
+    devmode->dmDisplayFrequency = CGDisplayModeGetRefreshRate(display_mode);
+    if (!devmode->dmDisplayFrequency)
+        devmode->dmDisplayFrequency = 60;
+    devmode->dmFields |= DM_DISPLAYFREQUENCY;
+}
+
+
 static BOOL set_setting_value(HKEY hkey, const char *name, DWORD val)
 {
     WCHAR nameW[128];
@@ -321,42 +393,6 @@ static BOOL display_mode_matches_descriptor(CGDisplayModeRef mode, const struct
 }
 
 
-static int display_mode_bits_per_pixel(CGDisplayModeRef display_mode)
-{
-    CFStringRef pixel_encoding;
-    int bits_per_pixel = 0;
-
-    pixel_encoding = CGDisplayModeCopyPixelEncoding(display_mode);
-    if (pixel_encoding)
-    {
-        if (CFEqual(pixel_encoding, CFSTR(kIO32BitFloatPixels)))
-            bits_per_pixel = 128;
-        else if (CFEqual(pixel_encoding, CFSTR(kIO16BitFloatPixels)))
-            bits_per_pixel = 64;
-        else if (CFEqual(pixel_encoding, CFSTR(kIO64BitDirectPixels)))
-            bits_per_pixel = 64;
-        else if (CFEqual(pixel_encoding, CFSTR(kIO30BitDirectPixels)))
-            bits_per_pixel = 30;
-        else if (CFEqual(pixel_encoding, CFSTR(IO32BitDirectPixels)))
-            bits_per_pixel = 32;
-        else if (CFEqual(pixel_encoding, CFSTR(IO16BitDirectPixels)))
-            bits_per_pixel = 16;
-        else if (CFEqual(pixel_encoding, CFSTR(IO8BitIndexedPixels)))
-            bits_per_pixel = 8;
-        else if (CFEqual(pixel_encoding, CFSTR(IO4BitIndexedPixels)))
-            bits_per_pixel = 4;
-        else if (CFEqual(pixel_encoding, CFSTR(IO2BitIndexedPixels)))
-            bits_per_pixel = 2;
-        else if (CFEqual(pixel_encoding, CFSTR(IO1BitIndexedPixels)))
-            bits_per_pixel = 1;
-
-        CFRelease(pixel_encoding);
-    }
-
-    return bits_per_pixel;
-}
-
-
 static int get_default_bpp(void)
 {
     int ret;
@@ -893,8 +929,6 @@ BOOL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, DEVMODEW *devmode
     CGDisplayModeRef display_mode;
     int display_mode_bpp;
     BOOL synthesized = FALSE;
-    double rotation;
-    uint32_t io_flags;
 
     TRACE("%s, %u, %p + %hu, %08x\n", debugstr_w(devname), mode, devmode, devmode->dmSize, flags);
 
@@ -1004,23 +1038,10 @@ BOOL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, DEVMODEW *devmode
     devmode->dmPosition.y = 0;
     devmode->dmFields |= DM_POSITION;
 
-    rotation = CGDisplayRotation(displays[0].displayID);
-    devmode->dmDisplayOrientation = ((int)((rotation / 90) + 0.5)) % 4;
-    devmode->dmFields |= DM_DISPLAYORIENTATION;
-
-    io_flags = CGDisplayModeGetIOFlags(display_mode);
-    if (io_flags & kDisplayModeStretchedFlag)
-        devmode->dmDisplayFixedOutput = DMDFO_STRETCH;
-    else
-        devmode->dmDisplayFixedOutput = DMDFO_CENTER;
-    devmode->dmFields |= DM_DISPLAYFIXEDOUTPUT;
-
+    display_mode_to_devmode(displays[0].displayID, display_mode, devmode);
     devmode->dmBitsPerPel = display_mode_bpp;
     if (devmode->dmBitsPerPel)
         devmode->dmFields |= DM_BITSPERPEL;
-
-    devmode->dmPelsWidth = CGDisplayModeGetWidth(display_mode);
-    devmode->dmPelsHeight = CGDisplayModeGetHeight(display_mode);
     if (retina_enabled)
     {
         struct display_mode_descriptor* desc = create_original_display_mode_descriptor(displays[0].displayID);
@@ -1031,17 +1052,6 @@ BOOL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, DEVMODEW *devmode
         }
         free_display_mode_descriptor(desc);
     }
-    devmode->dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT;
-
-    devmode->dmDisplayFlags = 0;
-    if (io_flags & kDisplayModeInterlacedFlag)
-        devmode->dmDisplayFlags |= DM_INTERLACED;
-    devmode->dmFields |= DM_DISPLAYFLAGS;
-
-    devmode->dmDisplayFrequency = CGDisplayModeGetRefreshRate(display_mode);
-    if (!devmode->dmDisplayFrequency)
-        devmode->dmDisplayFrequency = 60;
-    devmode->dmFields |= DM_DISPLAYFREQUENCY;
 
     CFRelease(display_mode);
     macdrv_free_displays(displays);




More information about the wine-cvs mailing list