@@ -18,31 +18,44 @@ pub struct VideoMode {
18
18
pub ( crate ) size : ( u32 , u32 ) ,
19
19
pub ( crate ) bit_depth : u16 ,
20
20
pub ( crate ) refresh_rate : u16 ,
21
- pub ( crate ) screen_mode : id ,
21
+ pub ( crate ) screen_mode : NativeDisplayMode ,
22
22
pub ( crate ) monitor : MonitorHandle ,
23
23
}
24
24
25
+ #[ derive( Debug , PartialEq , Eq , Hash ) ]
26
+ pub struct NativeDisplayMode ( pub id ) ;
27
+
28
+ unsafe impl Send for NativeDisplayMode { }
29
+
30
+ impl Drop for NativeDisplayMode {
31
+ fn drop ( & mut self ) {
32
+ unsafe {
33
+ let ( ) = msg_send ! [ self . 0 , release] ;
34
+ }
35
+ }
36
+ }
37
+
38
+ impl Clone for NativeDisplayMode {
39
+ fn clone ( & self ) -> Self {
40
+ unsafe {
41
+ let _: id = msg_send ! [ self . 0 , retain] ;
42
+ }
43
+ NativeDisplayMode ( self . 0 )
44
+ }
45
+ }
46
+
25
47
impl Clone for VideoMode {
26
48
fn clone ( & self ) -> VideoMode {
27
49
VideoMode {
28
50
size : self . size ,
29
51
bit_depth : self . bit_depth ,
30
52
refresh_rate : self . refresh_rate ,
31
- screen_mode : unsafe { msg_send ! [ self . screen_mode, retain ] } ,
53
+ screen_mode : self . screen_mode . clone ( ) ,
32
54
monitor : self . monitor . clone ( ) ,
33
55
}
34
56
}
35
57
}
36
58
37
- impl Drop for VideoMode {
38
- fn drop ( & mut self ) {
39
- unsafe {
40
- assert_main_thread ! ( "`VideoMode` can only be dropped on the main thread on iOS" ) ;
41
- let ( ) = msg_send ! [ self . screen_mode, release] ;
42
- }
43
- }
44
- }
45
-
46
59
impl VideoMode {
47
60
unsafe fn retained_new ( uiscreen : id , screen_mode : id ) -> VideoMode {
48
61
assert_main_thread ! ( "`VideoMode` can only be created on the main thread on iOS" ) ;
@@ -64,11 +77,13 @@ impl VideoMode {
64
77
60
65
78
} ;
66
79
let size: CGSize = msg_send ! [ screen_mode, size] ;
80
+ let screen_mode: id = msg_send ! [ screen_mode, retain] ;
81
+ let screen_mode = NativeDisplayMode ( screen_mode) ;
67
82
VideoMode {
68
83
size : ( size. width as u32 , size. height as u32 ) ,
69
84
bit_depth : 32 ,
70
85
refresh_rate : refresh_rate as u16 ,
71
- screen_mode : msg_send ! [ screen_mode , retain ] ,
86
+ screen_mode,
72
87
monitor : MonitorHandle :: retained_new ( uiscreen) ,
73
88
}
74
89
}
0 commit comments