@@ -17,42 +17,33 @@ use objc2_foundation::{ns_string, run_on_main, MainThreadMarker, NSNumber, NSPoi
1717
1818use super :: ffi;
1919use crate :: dpi:: { LogicalPosition , PhysicalPosition , PhysicalSize } ;
20+ use crate :: monitor:: VideoMode ;
2021
2122#[ derive( Clone ) ]
2223pub struct VideoModeHandle {
23- size : PhysicalSize < u32 > ,
24- bit_depth : Option < NonZeroU16 > ,
25- refresh_rate_millihertz : Option < NonZeroU32 > ,
24+ pub ( crate ) mode : VideoMode ,
2625 pub ( crate ) monitor : MonitorHandle ,
2726 pub ( crate ) native_mode : NativeDisplayMode ,
2827}
2928
3029impl PartialEq for VideoModeHandle {
3130 fn eq ( & self , other : & Self ) -> bool {
32- self . size == other. size
33- && self . bit_depth == other. bit_depth
34- && self . refresh_rate_millihertz == other. refresh_rate_millihertz
35- && self . monitor == other. monitor
31+ self . monitor == other. monitor && self . mode == other. mode
3632 }
3733}
3834
3935impl Eq for VideoModeHandle { }
4036
4137impl std:: hash:: Hash for VideoModeHandle {
4238 fn hash < H : std:: hash:: Hasher > ( & self , state : & mut H ) {
43- self . size . hash ( state) ;
44- self . bit_depth . hash ( state) ;
45- self . refresh_rate_millihertz . hash ( state) ;
4639 self . monitor . hash ( state) ;
4740 }
4841}
4942
5043impl std:: fmt:: Debug for VideoModeHandle {
5144 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
52- f. debug_struct ( "VideoModeHandle" )
53- . field ( "size" , & self . size )
54- . field ( "bit_depth" , & self . bit_depth )
55- . field ( "refresh_rate_millihertz" , & self . refresh_rate_millihertz )
45+ f. debug_struct ( "VideoMode" )
46+ . field ( "mode" , & self . mode )
5647 . field ( "monitor" , & self . monitor )
5748 . finish ( )
5849 }
@@ -83,13 +74,14 @@ impl Clone for NativeDisplayMode {
8374impl VideoModeHandle {
8475 fn new (
8576 monitor : MonitorHandle ,
86- mode : NativeDisplayMode ,
77+ native_mode : NativeDisplayMode ,
8778 refresh_rate_millihertz : Option < NonZeroU32 > ,
8879 ) -> Self {
8980 unsafe {
90- let pixel_encoding =
91- CFString :: wrap_under_create_rule ( ffi:: CGDisplayModeCopyPixelEncoding ( mode. 0 ) )
92- . to_string ( ) ;
81+ let pixel_encoding = CFString :: wrap_under_create_rule (
82+ ffi:: CGDisplayModeCopyPixelEncoding ( native_mode. 0 ) ,
83+ )
84+ . to_string ( ) ;
9385 let bit_depth = if pixel_encoding. eq_ignore_ascii_case ( ffi:: IO32BitDirectPixels ) {
9486 32
9587 } else if pixel_encoding. eq_ignore_ascii_case ( ffi:: IO16BitDirectPixels ) {
@@ -100,33 +92,17 @@ impl VideoModeHandle {
10092 unimplemented ! ( )
10193 } ;
10294
103- VideoModeHandle {
95+ let mode = VideoMode {
10496 size : PhysicalSize :: new (
105- ffi:: CGDisplayModeGetPixelWidth ( mode . 0 ) as u32 ,
106- ffi:: CGDisplayModeGetPixelHeight ( mode . 0 ) as u32 ,
97+ ffi:: CGDisplayModeGetPixelWidth ( native_mode . 0 ) as u32 ,
98+ ffi:: CGDisplayModeGetPixelHeight ( native_mode . 0 ) as u32 ,
10799 ) ,
108100 refresh_rate_millihertz,
109101 bit_depth : NonZeroU16 :: new ( bit_depth) ,
110- monitor : monitor. clone ( ) ,
111- native_mode : mode,
112- }
113- }
114- }
115-
116- pub fn size ( & self ) -> PhysicalSize < u32 > {
117- self . size
118- }
119-
120- pub fn bit_depth ( & self ) -> Option < NonZeroU16 > {
121- self . bit_depth
122- }
123-
124- pub fn refresh_rate_millihertz ( & self ) -> Option < NonZeroU32 > {
125- self . refresh_rate_millihertz
126- }
102+ } ;
127103
128- pub fn monitor ( & self ) -> MonitorHandle {
129- self . monitor . clone ( )
104+ VideoModeHandle { mode , monitor : monitor . clone ( ) , native_mode }
105+ }
130106 }
131107}
132108
@@ -240,13 +216,17 @@ impl MonitorHandle {
240216 refresh_rate_millihertz ( self . 0 , & current_display_mode)
241217 }
242218
243- pub fn current_video_mode ( & self ) -> Option < VideoModeHandle > {
219+ pub fn current_video_mode ( & self ) -> Option < VideoMode > {
244220 let mode = NativeDisplayMode ( unsafe { CGDisplayCopyDisplayMode ( self . 0 ) } as _ ) ;
245221 let refresh_rate_millihertz = refresh_rate_millihertz ( self . 0 , & mode) ;
246- Some ( VideoModeHandle :: new ( self . clone ( ) , mode, refresh_rate_millihertz) )
222+ Some ( VideoModeHandle :: new ( self . clone ( ) , mode, refresh_rate_millihertz) . mode )
223+ }
224+
225+ pub fn video_modes ( & self ) -> impl Iterator < Item = VideoMode > {
226+ self . video_modes_handles ( ) . map ( |handle| handle. mode )
247227 }
248228
249- pub fn video_modes ( & self ) -> impl Iterator < Item = VideoModeHandle > {
229+ pub ( crate ) fn video_modes_handles ( & self ) -> impl Iterator < Item = VideoModeHandle > {
250230 let refresh_rate_millihertz = self . refresh_rate_millihertz ( ) ;
251231 let monitor = self . clone ( ) ;
252232
0 commit comments