Use a bit less unsafe on iOS (#2643)
* Use a bit less `unsafe` on iOS I did test this in XCode 11.3's "Debug View Heirarchy", the NSStringRust problem is no longer applicable (likely because Rust got better at emitting correct debug info). * Avoid using `id` on iOS
This commit is contained in:
parent
0f2fbe373b
commit
a82f66826b
8 changed files with 51 additions and 100 deletions
|
|
@ -15,11 +15,13 @@ use core_foundation::runloop::{
|
|||
kCFRunLoopCommonModes, CFRunLoopAddTimer, CFRunLoopGetMain, CFRunLoopRef, CFRunLoopTimerCreate,
|
||||
CFRunLoopTimerInvalidate, CFRunLoopTimerRef, CFRunLoopTimerSetNextFireDate,
|
||||
};
|
||||
use objc2::foundation::{CGRect, CGSize, NSInteger};
|
||||
use objc2::foundation::{CGRect, CGSize, NSInteger, NSProcessInfo};
|
||||
use objc2::rc::{Id, Shared};
|
||||
use objc2::{class, msg_send, sel};
|
||||
use objc2::runtime::Object;
|
||||
use objc2::{msg_send, sel};
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use super::uikit::UIView;
|
||||
use super::view::WinitUIWindow;
|
||||
use crate::{
|
||||
dpi::LogicalSize,
|
||||
|
|
@ -27,7 +29,7 @@ use crate::{
|
|||
event_loop::ControlFlow,
|
||||
platform_impl::platform::{
|
||||
event_loop::{EventHandler, EventProxy, EventWrapper, Never},
|
||||
ffi::{id, NSOperatingSystemVersion},
|
||||
ffi::NSOperatingSystemVersion,
|
||||
},
|
||||
window::WindowId as RootWindowId,
|
||||
};
|
||||
|
|
@ -542,7 +544,7 @@ pub unsafe fn did_finish_launching() {
|
|||
// completed. This may result in incorrect visual appearance.
|
||||
// ```
|
||||
let screen = window.screen();
|
||||
let _: () = msg_send![&window, setScreen: 0 as id];
|
||||
let _: () = msg_send![&window, setScreen: ptr::null::<Object>()];
|
||||
window.setScreen(&screen);
|
||||
|
||||
let controller = window.rootViewController();
|
||||
|
|
@ -830,14 +832,12 @@ fn handle_hidpi_proxy(
|
|||
let logical_size = physical_size.to_logical(scale_factor);
|
||||
let size = CGSize::new(logical_size.width, logical_size.height);
|
||||
let new_frame: CGRect = CGRect::new(screen_frame.origin, size);
|
||||
unsafe {
|
||||
let _: () = msg_send![view, setFrame: new_frame];
|
||||
}
|
||||
view.setFrame(new_frame);
|
||||
}
|
||||
|
||||
fn get_view_and_screen_frame(window: &WinitUIWindow) -> (id, CGRect) {
|
||||
fn get_view_and_screen_frame(window: &WinitUIWindow) -> (Id<UIView, Shared>, CGRect) {
|
||||
let view_controller = window.rootViewController().unwrap();
|
||||
let view: id = unsafe { msg_send![&view_controller, view] };
|
||||
let view = view_controller.view().unwrap();
|
||||
let bounds = window.bounds();
|
||||
let screen = window.screen();
|
||||
let screen_space = screen.coordinateSpace();
|
||||
|
|
@ -971,9 +971,9 @@ impl NSOperatingSystemVersion {
|
|||
pub fn os_capabilities() -> OSCapabilities {
|
||||
static OS_CAPABILITIES: Lazy<OSCapabilities> = Lazy::new(|| {
|
||||
let version: NSOperatingSystemVersion = unsafe {
|
||||
let process_info: id = msg_send![class!(NSProcessInfo), processInfo];
|
||||
let process_info = NSProcessInfo::process_info();
|
||||
let atleast_ios_8: bool = msg_send![
|
||||
process_info,
|
||||
&process_info,
|
||||
respondsToSelector: sel!(operatingSystemVersion)
|
||||
];
|
||||
// winit requires atleast iOS 8 because no one has put the time into supporting earlier os versions.
|
||||
|
|
@ -984,7 +984,7 @@ pub fn os_capabilities() -> OSCapabilities {
|
|||
//
|
||||
// The minimum required iOS version is likely to grow in the future.
|
||||
assert!(atleast_ios_8, "`winit` requires iOS version 8 or greater");
|
||||
msg_send![process_info, operatingSystemVersion]
|
||||
msg_send![&process_info, operatingSystemVersion]
|
||||
};
|
||||
version.into()
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue