[PATCH v2 1/4] winemac.drv: Simplify control flow in copy_display_modes.

Tim Clem tclem at codeweavers.com
Tue Mar 22 13:05:59 CDT 2022


Introduce a helper function to determine if a mode is preferred over
another.

Signed-off-by: Tim Clem <tclem at codeweavers.com>
---
v2: As per Huw's suggestion, pull the logic into its own function.

 dlls/winemac.drv/display.c | 123 ++++++++++++++++++-------------------
 1 file changed, 61 insertions(+), 62 deletions(-)

diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c
index 2ac8f32fa18a..cc3bbc6cffcd 100644
--- a/dlls/winemac.drv/display.c
+++ b/dlls/winemac.drv/display.c
@@ -576,6 +576,65 @@ static CFDictionaryRef create_mode_dict(CGDisplayModeRef display_mode, BOOL is_o
 
     return ret;
 }
+
+
+static BOOL mode_is_preferred(CGDisplayModeRef new_mode, CGDisplayModeRef old_mode,
+                              struct display_mode_descriptor *original_mode_desc)
+{
+    CFStringRef pixel_encoding;
+    size_t width_points, height_points;
+    size_t old_width_pixels, old_height_pixels, new_width_pixels, new_height_pixels;
+    BOOL old_size_same, new_size_same;
+
+    /* If a given mode is the user's default, then always list it in preference to any similar
+       modes that may exist. */
+    if (display_mode_matches_descriptor(new_mode, original_mode_desc))
+        return TRUE;
+
+    pixel_encoding = CGDisplayModeCopyPixelEncoding(new_mode);
+    if (pixel_encoding)
+    {
+        BOOL bpp30 = CFEqual(pixel_encoding, CFSTR(kIO30BitDirectPixels));
+        CFRelease(pixel_encoding);
+        if (bpp30)
+        {
+            /* This is an odd pixel encoding.  It seems it's only returned
+               when using kCGDisplayShowDuplicateLowResolutionModes.  It's
+               32bpp in terms of the actual raster layout, but it's 10
+               bits per component.  I think that no Windows program is
+               likely to need it and they will probably be confused by it.
+               Skip it. */
+            return FALSE;
+        }
+    }
+
+    if (!old_mode)
+        return TRUE;
+
+    /* Prefer the original mode over any similar mode. */
+    if (display_mode_matches_descriptor(old_mode, original_mode_desc))
+        return FALSE;
+
+    /* Otherwise, prefer a mode whose pixel size equals its point size over one which
+       is scaled. */
+    width_points = CGDisplayModeGetWidth(new_mode);
+    height_points = CGDisplayModeGetHeight(new_mode);
+    new_width_pixels = CGDisplayModeGetPixelWidth(new_mode);
+    new_height_pixels = CGDisplayModeGetPixelHeight(new_mode);
+    old_width_pixels = CGDisplayModeGetPixelWidth(old_mode);
+    old_height_pixels = CGDisplayModeGetPixelHeight(old_mode);
+    new_size_same = (new_width_pixels == width_points && new_height_pixels == height_points);
+    old_size_same = (old_width_pixels == width_points && old_height_pixels == height_points);
+
+    if (new_size_same && !old_size_same)
+        return TRUE;
+
+    if (!new_size_same && old_size_same)
+        return FALSE;
+
+    /* Otherwise, prefer the mode with the smaller pixel size. */
+    return new_width_pixels < old_width_pixels && new_height_pixels < old_height_pixels;
+}
 #endif
 
 
@@ -620,72 +679,12 @@ static CFArrayRef copy_display_modes(CGDirectDisplayID display)
         count = CFArrayGetCount(modes);
         for (i = 0; i < count; i++)
         {
-            BOOL better = TRUE;
             CGDisplayModeRef new_mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, i);
             BOOL new_is_original = display_mode_matches_descriptor(new_mode, desc);
             CFDictionaryRef key = create_mode_dict(new_mode, new_is_original);
+            CGDisplayModeRef old_mode = (CGDisplayModeRef)CFDictionaryGetValue(modes_by_size, key);
 
-            /* If a given mode is the user's default, then always list it in preference to any similar
-               modes that may exist. */
-            if (new_is_original)
-                better = TRUE;
-            else
-            {
-                CFStringRef pixel_encoding = CGDisplayModeCopyPixelEncoding(new_mode);
-                CGDisplayModeRef old_mode;
-
-                if (pixel_encoding)
-                {
-                    BOOL bpp30 = CFEqual(pixel_encoding, CFSTR(kIO30BitDirectPixels));
-                    CFRelease(pixel_encoding);
-                    if (bpp30)
-                    {
-                        /* This is an odd pixel encoding.  It seems it's only returned
-                           when using kCGDisplayShowDuplicateLowResolutionModes.  It's
-                           32bpp in terms of the actual raster layout, but it's 10
-                           bits per component.  I think that no Windows program is
-                           likely to need it and they will probably be confused by it.
-                           Skip it. */
-                        CFRelease(key);
-                        continue;
-                    }
-                }
-
-                old_mode = (CGDisplayModeRef)CFDictionaryGetValue(modes_by_size, key);
-                if (old_mode)
-                {
-                    BOOL old_is_original = display_mode_matches_descriptor(old_mode, desc);
-
-                    if (old_is_original)
-                        better = FALSE;
-                    else
-                    {
-                        /* Otherwise, prefer a mode whose pixel size equals its point size over one which
-                           is scaled. */
-                        size_t width_points = CGDisplayModeGetWidth(new_mode);
-                        size_t height_points = CGDisplayModeGetHeight(new_mode);
-                        size_t new_width_pixels = CGDisplayModeGetPixelWidth(new_mode);
-                        size_t new_height_pixels = CGDisplayModeGetPixelHeight(new_mode);
-                        size_t old_width_pixels = CGDisplayModeGetPixelWidth(old_mode);
-                        size_t old_height_pixels = CGDisplayModeGetPixelHeight(old_mode);
-                        BOOL new_size_same = (new_width_pixels == width_points && new_height_pixels == height_points);
-                        BOOL old_size_same = (old_width_pixels == width_points && old_height_pixels == height_points);
-
-                        if (new_size_same && !old_size_same)
-                            better = TRUE;
-                        else if (!new_size_same && old_size_same)
-                            better = FALSE;
-                        else
-                        {
-                            /* Otherwise, prefer the mode with the smaller pixel size. */
-                            if (old_width_pixels < new_width_pixels || old_height_pixels < new_height_pixels)
-                                better = FALSE;
-                        }
-                    }
-                }
-            }
-
-            if (better)
+            if (mode_is_preferred(new_mode, old_mode, desc))
                 CFDictionarySetValue(modes_by_size, key, new_mode);
 
             CFRelease(key);
-- 
2.34.1




More information about the wine-devel mailing list