Skip to content

Commit c10c820

Browse files
simlayAleksi Juvani
authored andcommitted
Reimplement NativeDisplayMode on iOS for #1310 (#1330)
* Reimplement NativeDisplayMode on iOS for #1310 * Type annotations from code review. Co-Authored-By: Aleksi Juvani <3168386+aleksijuvani@users.noreply.github.com> Co-authored-by: Aleksi Juvani <3168386+aleksijuvani@users.noreply.github.com>
1 parent 82889e2 commit c10c820

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

src/platform_impl/ios/monitor.rs

+27-12
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,44 @@ pub struct VideoMode {
1818
pub(crate) size: (u32, u32),
1919
pub(crate) bit_depth: u16,
2020
pub(crate) refresh_rate: u16,
21-
pub(crate) screen_mode: id,
21+
pub(crate) screen_mode: NativeDisplayMode,
2222
pub(crate) monitor: MonitorHandle,
2323
}
2424

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+
2547
impl Clone for VideoMode {
2648
fn clone(&self) -> VideoMode {
2749
VideoMode {
2850
size: self.size,
2951
bit_depth: self.bit_depth,
3052
refresh_rate: self.refresh_rate,
31-
screen_mode: unsafe { msg_send![self.screen_mode, retain] },
53+
screen_mode: self.screen_mode.clone(),
3254
monitor: self.monitor.clone(),
3355
}
3456
}
3557
}
3658

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-
4659
impl VideoMode {
4760
unsafe fn retained_new(uiscreen: id, screen_mode: id) -> VideoMode {
4861
assert_main_thread!("`VideoMode` can only be created on the main thread on iOS");
@@ -64,11 +77,13 @@ impl VideoMode {
6477
60
6578
};
6679
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);
6782
VideoMode {
6883
size: (size.width as u32, size.height as u32),
6984
bit_depth: 32,
7085
refresh_rate: refresh_rate as u16,
71-
screen_mode: msg_send![screen_mode, retain],
86+
screen_mode,
7287
monitor: MonitorHandle::retained_new(uiscreen),
7388
}
7489
}

src/platform_impl/ios/view.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ pub unsafe fn create_window(
497497
match window_attributes.fullscreen {
498498
Some(Fullscreen::Exclusive(ref video_mode)) => {
499499
let uiscreen = video_mode.monitor().ui_screen() as id;
500-
let () = msg_send![uiscreen, setCurrentMode: video_mode.video_mode.screen_mode];
500+
let () = msg_send![uiscreen, setCurrentMode: video_mode.video_mode.screen_mode.0];
501501
msg_send![window, setScreen:video_mode.monitor().ui_screen()]
502502
}
503503
Some(Fullscreen::Borderless(ref monitor)) => {

0 commit comments

Comments
 (0)