fix: Support fractional refresh rates in video modes on macOS (#4191)

We were rounding the refresh rate before converting it to millihertz.
This commit is contained in:
Mads Marquart 2025-04-29 12:02:07 +02:00 committed by GitHub
parent 4fe4ce3d77
commit a5e6d0aaaf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 4 additions and 4 deletions

View file

@ -254,3 +254,4 @@ changelog entry.
- On Wayland, fixed a crash when consequently calling `set_cursor_grab` without pointer focus.
- On Wayland, ensure that external event loop is woken-up when using pump_events and integrating via `FD`.
- On Wayland, apply fractional scaling to custom cursors.
- On macOS, fixed `VideoMode::refresh_rate_millihertz` for fractional refresh rates.

View file

@ -126,13 +126,12 @@ impl MonitorHandle {
let modes = unsafe { CFRetained::cast_unchecked::<CFArray<CGDisplayMode>>(array) };
modes.into_iter().map(move |mode| {
let cg_refresh_rate_hertz =
unsafe { CGDisplayMode::refresh_rate(Some(&mode)) }.round() as i64;
let cg_refresh_rate_hertz = unsafe { CGDisplayMode::refresh_rate(Some(&mode)) };
// CGDisplayModeGetRefreshRate returns 0.0 for any display that
// isn't a CRT
let refresh_rate_millihertz = if cg_refresh_rate_hertz > 0 {
NonZeroU32::new((cg_refresh_rate_hertz * 1000) as u32)
let refresh_rate_millihertz = if cg_refresh_rate_hertz > 0.0 {
NonZeroU32::new((cg_refresh_rate_hertz * 1000.0).round() as u32)
} else {
refresh_rate_millihertz
};