diff --git a/src/platform_impl/apple/uikit/monitor.rs b/src/platform_impl/apple/uikit/monitor.rs index e2d7d85b9b..21961ca2da 100644 --- a/src/platform_impl/apple/uikit/monitor.rs +++ b/src/platform_impl/apple/uikit/monitor.rs @@ -12,7 +12,6 @@ use objc2_ui_kit::{UIScreen, UIScreenMode}; use super::app_state; use crate::dpi::{PhysicalPosition, PhysicalSize}; -use crate::monitor::VideoModeHandle as RootVideoModeHandle; // Workaround for `MainThreadBound` implementing almost no traits #[derive(Debug)] @@ -170,17 +169,14 @@ impl MonitorHandle { pub fn video_modes(&self) -> impl Iterator { run_on_main(|mtm| { let ui_screen = self.ui_screen(mtm); - // Use Ord impl of RootVideoModeHandle let modes: Vec<_> = ui_screen .availableModes() .into_iter() - .map(|mode| RootVideoModeHandle { - video_mode: VideoModeHandle::new(ui_screen.clone(), mode, mtm), - }) + .map(|mode| VideoModeHandle::new(ui_screen.clone(), mode, mtm)) .collect(); - modes.into_iter().map(|mode| mode.video_mode) + modes.into_iter() }) } diff --git a/src/platform_impl/windows/monitor.rs b/src/platform_impl/windows/monitor.rs index 6f84424939..614627891f 100644 --- a/src/platform_impl/windows/monitor.rs +++ b/src/platform_impl/windows/monitor.rs @@ -1,4 +1,4 @@ -use std::collections::VecDeque; +use std::collections::{HashSet, VecDeque}; use std::hash::Hash; use std::num::{NonZeroU16, NonZeroU32}; use std::{io, mem, ptr}; @@ -13,7 +13,6 @@ use windows_sys::Win32::Graphics::Gdi::{ use super::util::decode_wide; use crate::dpi::{PhysicalPosition, PhysicalSize}; -use crate::monitor::VideoModeHandle as RootVideoModeHandle; use crate::platform_impl::platform::dpi::{dpi_to_scale_factor, get_monitor_dpi}; use crate::platform_impl::platform::util::has_flag; use crate::platform_impl::platform::window::Window; @@ -225,15 +224,14 @@ impl MonitorHandle { pub fn video_modes(&self) -> impl Iterator { // EnumDisplaySettingsExW can return duplicate values (or some of the // fields are probably changing, but we aren't looking at those fields - // anyway), so we're using a BTreeSet deduplicate - let mut modes = Vec::new(); - let mod_map = |mode: RootVideoModeHandle| mode.video_mode; + // anyway), so we're using a HashSet to deduplicate. + let mut modes = HashSet::new(); let monitor_info = match get_monitor_info(self.0) { Ok(monitor_info) => monitor_info, Err(error) => { tracing::warn!("Error from get_monitor_info: {error}"); - return modes.into_iter().map(mod_map); + return modes.into_iter(); }, }; @@ -247,12 +245,11 @@ impl MonitorHandle { break; } - modes - .push(RootVideoModeHandle { video_mode: VideoModeHandle::new(self.clone(), mode) }); + modes.insert(VideoModeHandle::new(self.clone(), mode)); i += 1; } - modes.into_iter().map(mod_map) + modes.into_iter() } }