1- use std:: collections:: VecDeque ;
1+ use std:: collections:: { HashSet , VecDeque } ;
22use std:: hash:: Hash ;
33use std:: num:: { NonZeroU16 , NonZeroU32 } ;
44use std:: { io, mem, ptr} ;
@@ -13,7 +13,6 @@ use windows_sys::Win32::Graphics::Gdi::{
1313
1414use super :: util:: decode_wide;
1515use crate :: dpi:: { PhysicalPosition , PhysicalSize } ;
16- use crate :: monitor:: VideoModeHandle as RootVideoModeHandle ;
1716use crate :: platform_impl:: platform:: dpi:: { dpi_to_scale_factor, get_monitor_dpi} ;
1817use crate :: platform_impl:: platform:: util:: has_flag;
1918use crate :: platform_impl:: platform:: window:: Window ;
@@ -225,15 +224,14 @@ impl MonitorHandle {
225224 pub fn video_modes ( & self ) -> impl Iterator < Item = VideoModeHandle > {
226225 // EnumDisplaySettingsExW can return duplicate values (or some of the
227226 // fields are probably changing, but we aren't looking at those fields
228- // anyway), so we're using a BTreeSet deduplicate
229- let mut modes = Vec :: new ( ) ;
230- let mod_map = |mode : RootVideoModeHandle | mode. video_mode ;
227+ // anyway), so we're using a HashSet to deduplicate.
228+ let mut modes = HashSet :: new ( ) ;
231229
232230 let monitor_info = match get_monitor_info ( self . 0 ) {
233231 Ok ( monitor_info) => monitor_info,
234232 Err ( error) => {
235233 tracing:: warn!( "Error from get_monitor_info: {error}" ) ;
236- return modes. into_iter ( ) . map ( mod_map ) ;
234+ return modes. into_iter ( ) ;
237235 } ,
238236 } ;
239237
@@ -247,12 +245,11 @@ impl MonitorHandle {
247245 break ;
248246 }
249247
250- modes
251- . push ( RootVideoModeHandle { video_mode : VideoModeHandle :: new ( self . clone ( ) , mode) } ) ;
248+ modes. insert ( VideoModeHandle :: new ( self . clone ( ) , mode) ) ;
252249
253250 i += 1 ;
254251 }
255252
256- modes. into_iter ( ) . map ( mod_map )
253+ modes. into_iter ( )
257254 }
258255}
0 commit comments