[PATCH 1/2] winemac: Reorganize copy_display_modes() to clarify that the user's default mode is always included.
Ken Thomases
ken at codeweavers.com
Mon Oct 26 23:39:05 CDT 2015
Signed-off-by: Ken Thomases <ken at codeweavers.com>
---
dlls/winemac.drv/display.c | 93 +++++++++++++++++++++++-----------------------
1 file changed, 47 insertions(+), 46 deletions(-)
diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c
index 10ecf67..d561e68 100644
--- a/dlls/winemac.drv/display.c
+++ b/dlls/winemac.drv/display.c
@@ -312,63 +312,64 @@ static CFArrayRef copy_display_modes(CGDirectDisplayID display)
BOOL better = TRUE;
CGDisplayModeRef new_mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, i);
uint32_t new_flags = CGDisplayModeGetIOFlags(new_mode);
- CFStringRef pixel_encoding;
- size_t width_points;
- size_t height_points;
- CFDictionaryRef key;
- CGDisplayModeRef old_mode;
+ CFDictionaryRef key = create_mode_dict(new_mode);
- if (!(new_flags & kDisplayModeDefaultFlag) && (pixel_encoding = CGDisplayModeCopyPixelEncoding(new_mode)))
+ /* If a given mode is the user's default, then always list it in preference to any similar
+ modes that may exist. */
+ if (new_flags & kDisplayModeDefaultFlag)
+ better = TRUE;
+ else
{
- BOOL bpp30 = CFEqual(pixel_encoding, CFSTR(kIO30BitDirectPixels));
- CFRelease(pixel_encoding);
- if (bpp30)
+ CFStringRef pixel_encoding = CGDisplayModeCopyPixelEncoding(new_mode);
+ CGDisplayModeRef old_mode;
+
+ if (pixel_encoding)
{
- /* 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. */
- continue;
+ 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;
+ }
}
- }
- width_points = CGDisplayModeGetWidth(new_mode);
- height_points = CGDisplayModeGetHeight(new_mode);
- key = create_mode_dict(new_mode);
- old_mode = (CGDisplayModeRef)CFDictionaryGetValue(modes_by_size, key);
-
- if (old_mode)
- {
- uint32_t old_flags = CGDisplayModeGetIOFlags(old_mode);
-
- /* If a given mode is the user's default, then always list it in preference to any similar
- modes that may exist. */
- if ((new_flags & kDisplayModeDefaultFlag) && !(old_flags & kDisplayModeDefaultFlag))
- better = TRUE;
- else if (!(new_flags & kDisplayModeDefaultFlag) && (old_flags & kDisplayModeDefaultFlag))
- better = FALSE;
- else
+ old_mode = (CGDisplayModeRef)CFDictionaryGetValue(modes_by_size, key);
+ if (old_mode)
{
- /* Otherwise, prefer a mode whose pixel size equals its point size over one which
- is scaled. */
- 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);
+ uint32_t old_flags = CGDisplayModeGetIOFlags(old_mode);
- if (new_size_same && !old_size_same)
- better = TRUE;
- else if (!new_size_same && old_size_same)
+ if (old_flags & kDisplayModeDefaultFlag)
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)
+ /* 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;
+ }
}
}
}
--
2.6.0
More information about the wine-patches
mailing list