Clean up iOS ffi.rs (#3530)
This makes it easier to transition to a future autogenerated version of UIKit.
This commit is contained in:
parent
e41f0eabb1
commit
a4480a0652
9 changed files with 67 additions and 108 deletions
|
|
@ -27,7 +27,7 @@ use crate::{
|
||||||
window::{CustomCursor, CustomCursorSource},
|
window::{CustomCursor, CustomCursorSource},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::app_delegate::AppDelegate;
|
use super::{app_delegate::AppDelegate, uikit::UIUserInterfaceIdiom};
|
||||||
use super::{app_state, monitor, MonitorHandle};
|
use super::{app_state, monitor, MonitorHandle};
|
||||||
use super::{
|
use super::{
|
||||||
app_state::AppState,
|
app_state::AppState,
|
||||||
|
|
@ -227,7 +227,14 @@ impl<T: 'static> EventLoop<T> {
|
||||||
// EventLoopExtIOS
|
// EventLoopExtIOS
|
||||||
impl<T: 'static> EventLoop<T> {
|
impl<T: 'static> EventLoop<T> {
|
||||||
pub fn idiom(&self) -> Idiom {
|
pub fn idiom(&self) -> Idiom {
|
||||||
UIDevice::current(self.mtm).userInterfaceIdiom().into()
|
match UIDevice::current(self.mtm).userInterfaceIdiom() {
|
||||||
|
UIUserInterfaceIdiom::Unspecified => Idiom::Unspecified,
|
||||||
|
UIUserInterfaceIdiom::Phone => Idiom::Phone,
|
||||||
|
UIUserInterfaceIdiom::Pad => Idiom::Pad,
|
||||||
|
UIUserInterfaceIdiom::TV => Idiom::TV,
|
||||||
|
UIUserInterfaceIdiom::CarPlay => Idiom::CarPlay,
|
||||||
|
_ => Idiom::Unspecified,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
||||||
#![allow(non_camel_case_types, non_snake_case, non_upper_case_globals)]
|
|
||||||
|
|
||||||
use icrate::Foundation::{NSInteger, NSUInteger};
|
|
||||||
use objc2::encode::{Encode, Encoding};
|
|
||||||
|
|
||||||
use crate::platform::ios::{Idiom, ScreenEdge};
|
|
||||||
|
|
||||||
#[repr(transparent)]
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
|
||||||
pub struct UIUserInterfaceIdiom(NSInteger);
|
|
||||||
|
|
||||||
unsafe impl Encode for UIUserInterfaceIdiom {
|
|
||||||
const ENCODING: Encoding = NSInteger::ENCODING;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl UIUserInterfaceIdiom {
|
|
||||||
pub const Unspecified: UIUserInterfaceIdiom = UIUserInterfaceIdiom(-1);
|
|
||||||
pub const Phone: UIUserInterfaceIdiom = UIUserInterfaceIdiom(0);
|
|
||||||
pub const Pad: UIUserInterfaceIdiom = UIUserInterfaceIdiom(1);
|
|
||||||
pub const TV: UIUserInterfaceIdiom = UIUserInterfaceIdiom(2);
|
|
||||||
pub const CarPlay: UIUserInterfaceIdiom = UIUserInterfaceIdiom(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Idiom> for UIUserInterfaceIdiom {
|
|
||||||
fn from(idiom: Idiom) -> UIUserInterfaceIdiom {
|
|
||||||
match idiom {
|
|
||||||
Idiom::Unspecified => UIUserInterfaceIdiom::Unspecified,
|
|
||||||
Idiom::Phone => UIUserInterfaceIdiom::Phone,
|
|
||||||
Idiom::Pad => UIUserInterfaceIdiom::Pad,
|
|
||||||
Idiom::TV => UIUserInterfaceIdiom::TV,
|
|
||||||
Idiom::CarPlay => UIUserInterfaceIdiom::CarPlay,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl From<UIUserInterfaceIdiom> for Idiom {
|
|
||||||
fn from(ui_idiom: UIUserInterfaceIdiom) -> Idiom {
|
|
||||||
match ui_idiom {
|
|
||||||
UIUserInterfaceIdiom::Unspecified => Idiom::Unspecified,
|
|
||||||
UIUserInterfaceIdiom::Phone => Idiom::Phone,
|
|
||||||
UIUserInterfaceIdiom::Pad => Idiom::Pad,
|
|
||||||
UIUserInterfaceIdiom::TV => Idiom::TV,
|
|
||||||
UIUserInterfaceIdiom::CarPlay => Idiom::CarPlay,
|
|
||||||
_ => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(transparent)]
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
|
||||||
pub struct UIRectEdge(NSUInteger);
|
|
||||||
|
|
||||||
impl UIRectEdge {
|
|
||||||
pub(crate) const NONE: Self = Self(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe impl Encode for UIRectEdge {
|
|
||||||
const ENCODING: Encoding = NSUInteger::ENCODING;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<ScreenEdge> for UIRectEdge {
|
|
||||||
fn from(screen_edge: ScreenEdge) -> UIRectEdge {
|
|
||||||
assert_eq!(
|
|
||||||
screen_edge.bits() & !ScreenEdge::ALL.bits(),
|
|
||||||
0,
|
|
||||||
"invalid `ScreenEdge`"
|
|
||||||
);
|
|
||||||
UIRectEdge(screen_edge.bits().into())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<UIRectEdge> for ScreenEdge {
|
|
||||||
fn from(ui_rect_edge: UIRectEdge) -> ScreenEdge {
|
|
||||||
let bits: u8 = ui_rect_edge.0.try_into().expect("invalid `UIRectEdge`");
|
|
||||||
ScreenEdge::from_bits(bits).expect("invalid `ScreenEdge`")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -4,7 +4,6 @@
|
||||||
mod app_delegate;
|
mod app_delegate;
|
||||||
mod app_state;
|
mod app_state;
|
||||||
mod event_loop;
|
mod event_loop;
|
||||||
mod ffi;
|
|
||||||
mod monitor;
|
mod monitor;
|
||||||
mod uikit;
|
mod uikit;
|
||||||
mod view;
|
mod view;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
use icrate::Foundation::{MainThreadMarker, NSObject};
|
use icrate::Foundation::{MainThreadMarker, NSInteger, NSObject};
|
||||||
|
use objc2::encode::{Encode, Encoding};
|
||||||
use objc2::rc::Id;
|
use objc2::rc::Id;
|
||||||
use objc2::{extern_class, extern_methods, msg_send_id, mutability, ClassType};
|
use objc2::{extern_class, extern_methods, msg_send_id, mutability, ClassType};
|
||||||
|
|
||||||
use super::super::ffi::UIUserInterfaceIdiom;
|
|
||||||
|
|
||||||
extern_class!(
|
extern_class!(
|
||||||
#[derive(Debug, PartialEq, Eq, Hash)]
|
#[derive(Debug, PartialEq, Eq, Hash)]
|
||||||
pub(crate) struct UIDevice;
|
pub(crate) struct UIDevice;
|
||||||
|
|
@ -24,3 +23,19 @@ extern_methods!(
|
||||||
pub fn userInterfaceIdiom(&self) -> UIUserInterfaceIdiom;
|
pub fn userInterfaceIdiom(&self) -> UIUserInterfaceIdiom;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#[repr(transparent)]
|
||||||
|
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||||
|
pub struct UIUserInterfaceIdiom(NSInteger);
|
||||||
|
|
||||||
|
unsafe impl Encode for UIUserInterfaceIdiom {
|
||||||
|
const ENCODING: Encoding = NSInteger::ENCODING;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl UIUserInterfaceIdiom {
|
||||||
|
pub const Unspecified: UIUserInterfaceIdiom = UIUserInterfaceIdiom(-1);
|
||||||
|
pub const Phone: UIUserInterfaceIdiom = UIUserInterfaceIdiom(0);
|
||||||
|
pub const Pad: UIUserInterfaceIdiom = UIUserInterfaceIdiom(1);
|
||||||
|
pub const TV: UIUserInterfaceIdiom = UIUserInterfaceIdiom(2);
|
||||||
|
pub const CarPlay: UIUserInterfaceIdiom = UIUserInterfaceIdiom(3);
|
||||||
|
}
|
||||||
|
|
|
||||||
14
src/platform_impl/ios/uikit/geometry.rs
Normal file
14
src/platform_impl/ios/uikit/geometry.rs
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
use icrate::Foundation::NSUInteger;
|
||||||
|
use objc2::encode::{Encode, Encoding};
|
||||||
|
|
||||||
|
#[repr(transparent)]
|
||||||
|
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||||
|
pub struct UIRectEdge(pub NSUInteger);
|
||||||
|
|
||||||
|
impl UIRectEdge {
|
||||||
|
pub const NONE: Self = Self(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe impl Encode for UIRectEdge {
|
||||||
|
const ENCODING: Encoding = NSUInteger::ENCODING;
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,7 @@ mod application;
|
||||||
mod coordinate_space;
|
mod coordinate_space;
|
||||||
mod device;
|
mod device;
|
||||||
mod event;
|
mod event;
|
||||||
|
mod geometry;
|
||||||
mod gesture_recognizer;
|
mod gesture_recognizer;
|
||||||
mod responder;
|
mod responder;
|
||||||
mod screen;
|
mod screen;
|
||||||
|
|
@ -22,8 +23,9 @@ mod window;
|
||||||
|
|
||||||
pub(crate) use self::application::UIApplication;
|
pub(crate) use self::application::UIApplication;
|
||||||
pub(crate) use self::coordinate_space::UICoordinateSpace;
|
pub(crate) use self::coordinate_space::UICoordinateSpace;
|
||||||
pub(crate) use self::device::UIDevice;
|
pub(crate) use self::device::{UIDevice, UIUserInterfaceIdiom};
|
||||||
pub(crate) use self::event::UIEvent;
|
pub(crate) use self::event::UIEvent;
|
||||||
|
pub(crate) use self::geometry::UIRectEdge;
|
||||||
pub(crate) use self::gesture_recognizer::{
|
pub(crate) use self::gesture_recognizer::{
|
||||||
UIGestureRecognizer, UIGestureRecognizerState, UIPinchGestureRecognizer,
|
UIGestureRecognizer, UIGestureRecognizerState, UIPinchGestureRecognizer,
|
||||||
UIRotationGestureRecognizer, UITapGestureRecognizer,
|
UIRotationGestureRecognizer, UITapGestureRecognizer,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
use crate::platform::ios::StatusBarStyle;
|
|
||||||
use icrate::Foundation::NSInteger;
|
use icrate::Foundation::NSInteger;
|
||||||
use objc2::encode::{Encode, Encoding};
|
use objc2::encode::{Encode, Encoding};
|
||||||
|
|
||||||
|
|
@ -12,16 +11,6 @@ pub enum UIStatusBarStyle {
|
||||||
DarkContent = 3,
|
DarkContent = 3,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<StatusBarStyle> for UIStatusBarStyle {
|
|
||||||
fn from(value: StatusBarStyle) -> Self {
|
|
||||||
match value {
|
|
||||||
StatusBarStyle::Default => Self::Default,
|
|
||||||
StatusBarStyle::LightContent => Self::LightContent,
|
|
||||||
StatusBarStyle::DarkContent => Self::DarkContent,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe impl Encode for UIStatusBarStyle {
|
unsafe impl Encode for UIStatusBarStyle {
|
||||||
const ENCODING: Encoding = NSInteger::ENCODING;
|
const ENCODING: Encoding = NSInteger::ENCODING;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,11 @@ use objc2::{declare_class, msg_send_id, mutability, ClassType, DeclaredClass};
|
||||||
|
|
||||||
use super::app_state::{self};
|
use super::app_state::{self};
|
||||||
use super::uikit::{
|
use super::uikit::{
|
||||||
UIDevice, UIInterfaceOrientationMask, UIResponder, UIStatusBarStyle, UIView, UIViewController,
|
UIDevice, UIInterfaceOrientationMask, UIRectEdge, UIResponder, UIStatusBarStyle,
|
||||||
};
|
UIUserInterfaceIdiom, UIView, UIViewController,
|
||||||
use crate::{
|
|
||||||
platform::ios::ValidOrientations,
|
|
||||||
platform_impl::platform::ffi::{UIRectEdge, UIUserInterfaceIdiom},
|
|
||||||
window::WindowAttributes,
|
|
||||||
};
|
};
|
||||||
|
use crate::platform::ios::{ScreenEdge, StatusBarStyle};
|
||||||
|
use crate::{platform::ios::ValidOrientations, window::WindowAttributes};
|
||||||
|
|
||||||
pub struct ViewControllerState {
|
pub struct ViewControllerState {
|
||||||
prefers_status_bar_hidden: Cell<bool>,
|
prefers_status_bar_hidden: Cell<bool>,
|
||||||
|
|
@ -77,7 +75,12 @@ impl WinitViewController {
|
||||||
self.setNeedsStatusBarAppearanceUpdate();
|
self.setNeedsStatusBarAppearanceUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn set_preferred_status_bar_style(&self, val: UIStatusBarStyle) {
|
pub(crate) fn set_preferred_status_bar_style(&self, val: StatusBarStyle) {
|
||||||
|
let val = match val {
|
||||||
|
StatusBarStyle::Default => UIStatusBarStyle::Default,
|
||||||
|
StatusBarStyle::LightContent => UIStatusBarStyle::LightContent,
|
||||||
|
StatusBarStyle::DarkContent => UIStatusBarStyle::DarkContent,
|
||||||
|
};
|
||||||
self.ivars().preferred_status_bar_style.set(val);
|
self.ivars().preferred_status_bar_style.set(val);
|
||||||
self.setNeedsStatusBarAppearanceUpdate();
|
self.setNeedsStatusBarAppearanceUpdate();
|
||||||
}
|
}
|
||||||
|
|
@ -92,7 +95,15 @@ impl WinitViewController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn set_preferred_screen_edges_deferring_system_gestures(&self, val: UIRectEdge) {
|
pub(crate) fn set_preferred_screen_edges_deferring_system_gestures(&self, val: ScreenEdge) {
|
||||||
|
let val = {
|
||||||
|
assert_eq!(
|
||||||
|
val.bits() & !ScreenEdge::ALL.bits(),
|
||||||
|
0,
|
||||||
|
"invalid `ScreenEdge`"
|
||||||
|
);
|
||||||
|
UIRectEdge(val.bits().into())
|
||||||
|
};
|
||||||
self.ivars()
|
self.ivars()
|
||||||
.preferred_screen_edges_deferring_system_gestures
|
.preferred_screen_edges_deferring_system_gestures
|
||||||
.set(val);
|
.set(val);
|
||||||
|
|
@ -154,8 +165,7 @@ impl WinitViewController {
|
||||||
this.set_preferred_status_bar_style(
|
this.set_preferred_status_bar_style(
|
||||||
window_attributes
|
window_attributes
|
||||||
.platform_specific
|
.platform_specific
|
||||||
.preferred_status_bar_style
|
.preferred_status_bar_style,
|
||||||
.into(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
this.set_supported_interface_orientations(
|
this.set_supported_interface_orientations(
|
||||||
|
|
@ -172,8 +182,7 @@ impl WinitViewController {
|
||||||
this.set_preferred_screen_edges_deferring_system_gestures(
|
this.set_preferred_screen_edges_deferring_system_gestures(
|
||||||
window_attributes
|
window_attributes
|
||||||
.platform_specific
|
.platform_specific
|
||||||
.preferred_screen_edges_deferring_system_gestures
|
.preferred_screen_edges_deferring_system_gestures,
|
||||||
.into(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
this.setView(Some(view));
|
this.setView(Some(view));
|
||||||
|
|
|
||||||
|
|
@ -628,7 +628,7 @@ impl Inner {
|
||||||
|
|
||||||
pub fn set_preferred_screen_edges_deferring_system_gestures(&self, edges: ScreenEdge) {
|
pub fn set_preferred_screen_edges_deferring_system_gestures(&self, edges: ScreenEdge) {
|
||||||
self.view_controller
|
self.view_controller
|
||||||
.set_preferred_screen_edges_deferring_system_gestures(edges.into());
|
.set_preferred_screen_edges_deferring_system_gestures(edges);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_prefers_status_bar_hidden(&self, hidden: bool) {
|
pub fn set_prefers_status_bar_hidden(&self, hidden: bool) {
|
||||||
|
|
@ -637,7 +637,7 @@ impl Inner {
|
||||||
|
|
||||||
pub fn set_preferred_status_bar_style(&self, status_bar_style: StatusBarStyle) {
|
pub fn set_preferred_status_bar_style(&self, status_bar_style: StatusBarStyle) {
|
||||||
self.view_controller
|
self.view_controller
|
||||||
.set_preferred_status_bar_style(status_bar_style.into());
|
.set_preferred_status_bar_style(status_bar_style);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn recognize_pinch_gesture(&self, should_recognize: bool) {
|
pub fn recognize_pinch_gesture(&self, should_recognize: bool) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue