[PATCH v2 3/4] winemac.drv: Move synthetic display modes after the real ones.
Tim Clem
tclem at codeweavers.com
Tue Mar 22 13:06:01 CDT 2022
Also return higher synthesized bitdepths first.
Signed-off-by: Tim Clem <tclem at codeweavers.com>
---
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 dfc238ed6297..d43baf6bd683 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;
- }
}
}
}
--
2.34.1
More information about the wine-devel
mailing list