raw_window_handle_extensions/
uikit.rs

1use crate::{RawDisplayHandleType, RawWindowHandleType, VeryRawDisplayHandle, VeryRawWindowHandle};
2use raw_window_handle::{UiKitDisplayHandle, UiKitWindowHandle};
3use std::ptr::NonNull;
4
5impl From<UiKitWindowHandle> for VeryRawWindowHandle {
6    fn from(value: UiKitWindowHandle) -> Self {
7        Self {
8            handle_type: RawWindowHandleType::UiKit,
9            ptr_1: value.ui_view.as_ptr(),
10            ptr_2: value
11                .ui_view_controller
12                .map(|handle| handle.as_ptr())
13                .unwrap_or(std::ptr::null_mut()),
14            ptr_3: std::ptr::null_mut(),
15            id_1: Default::default(),
16            id_2: Default::default(),
17        }
18    }
19}
20
21impl From<VeryRawWindowHandle> for UiKitWindowHandle {
22    fn from(value: VeryRawWindowHandle) -> Self {
23        assert_eq!(value.handle_type, RawWindowHandleType::UiKit);
24        let mut window_handle = Self::new(
25            NonNull::new(value.ptr_1.into()).expect("UIKit native ui view must not be null"),
26        );
27        window_handle.ui_view_controller = if value.ptr_2.is_null() {
28            None
29        } else {
30            Some(
31                NonNull::new(value.ptr_2.into())
32                    .expect("UIKit ui_view_controller must not be null"),
33            )
34        };
35        window_handle
36    }
37}
38
39impl From<UiKitDisplayHandle> for VeryRawDisplayHandle {
40    fn from(_value: UiKitDisplayHandle) -> Self {
41        Self {
42            handle_type: RawDisplayHandleType::UiKit,
43            ptr_1: std::ptr::null_mut(),
44            id_1: Default::default(),
45        }
46    }
47}
48
49impl From<VeryRawDisplayHandle> for UiKitDisplayHandle {
50    fn from(value: VeryRawDisplayHandle) -> Self {
51        assert_eq!(value.handle_type, RawDisplayHandleType::UiKit);
52        Self::new()
53    }
54}