Tim Clem : winemac.drv: Move synthetic display modes after the real ones.
Alexandre Julliard
julliard at winehq.org
Wed Mar 23 17:03:54 CDT 2022
Module: wine
Branch: master
Commit: c2936f70e3333a5a0cad06b38fbd19a5ef313faa
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c2936f70e3333a5a0cad06b38fbd19a5ef313faa
Author: Tim Clem <tclem at codeweavers.com>
Date: Tue Mar 22 11:06:01 2022 -0700
winemac.drv: Move synthetic display modes after the real ones.
Also return higher synthesized bitdepths first.
Signed-off-by: Tim Clem <tclem at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winemac.drv/display.c | 50 +++++++++++++++++++++++++++-------------------
1 file changed, 29 insertions(+), 21 deletions(-)
diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c
index dfc238ed629..d43baf6bd68 100644
--- a/dlls/winemac.drv/display.c
+++ b/dlls/winemac.drv/display.c
@@ -1049,7 +1049,7 @@ BOOL CDECL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode,
display_mode = NULL;
if (modes)
{
- int default_bpp = get_default_bpp();
+ int default_bpp;
DWORD seen_modes = 0;
count = CFArrayGetCount(modes);
@@ -1064,33 +1064,41 @@ BOOL CDECL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode,
display_mode_bpp = display_mode_bits_per_pixel(display_mode);
break;
}
+ }
- /* We only synthesize modes from those having the default bpp. */
- if (display_mode_bits_per_pixel(candidate) != default_bpp)
- continue;
+ default_bpp = get_default_bpp();
- if (!modes_has_8bpp)
+ /* If all the real modes are exhausted, synthesize lower bpp modes. */
+ if (!display_mode && (!modes_has_16bpp || !modes_has_8bpp))
+ {
+ /* We want to synthesize higher depths first. */
+ int synth_bpps[] = { modes_has_16bpp ? 0 : 16, modes_has_8bpp ? 0 : 8 };
+ size_t synth_bpp_idx;
+ for (synth_bpp_idx = 0; synth_bpp_idx < 2; synth_bpp_idx++)
{
- seen_modes++;
- if (seen_modes > mode)
+ int synth_bpp = synth_bpps[synth_bpp_idx];
+ if (synth_bpp == 0)
+ continue;
+
+ for (i = 0; i < count; i++)
{
- display_mode = (CGDisplayModeRef)CFRetain(candidate);
- display_mode_bpp = 8;
- synthesized = TRUE;
- break;
+ CGDisplayModeRef candidate = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, i);
+ /* We only synthesize modes from those having the default bpp. */
+ if (display_mode_bits_per_pixel(candidate) != default_bpp)
+ continue;
+
+ seen_modes++;
+ if (seen_modes > mode)
+ {
+ display_mode = (CGDisplayModeRef)CFRetain(candidate);
+ display_mode_bpp = synth_bpp;
+ synthesized = TRUE;
+ break;
+ }
}
- }
- if (!modes_has_16bpp)
- {
- seen_modes++;
- if (seen_modes > mode)
- {
- display_mode = (CGDisplayModeRef)CFRetain(candidate);
- display_mode_bpp = 16;
- synthesized = TRUE;
+ if (display_mode)
break;
- }
}
}
}
More information about the wine-cvs
mailing list