raw_window_handle_ffi/handles/
android_ndk.rs

1use std::{ffi::c_void, ptr::NonNull};
2
3use crate::{RawWindowHandle, RawWindowHandleData};
4
5/// raw_window_handle_ffi:
6///         This type is ABI-stable and FFI-compatible analogue for [`raw_window_handle::AndroidNdkWindowHandle`].
7///         Can be converted to and from the referenced type.
8#[repr(C)]
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
10pub struct AndroidNdkWindowHandle {
11    /// A pointer to an `ANativeWindow`.
12    pub a_native_window: NonNull<c_void>,
13}
14
15unsafe impl Send for AndroidNdkWindowHandle {}
16unsafe impl Sync for AndroidNdkWindowHandle {}
17
18impl From<raw_window_handle::AndroidNdkWindowHandle> for AndroidNdkWindowHandle {
19    fn from(value: raw_window_handle::AndroidNdkWindowHandle) -> Self {
20        Self {
21            a_native_window: value.a_native_window,
22        }
23    }
24}
25
26impl AndroidNdkWindowHandle {
27    /// Converts FFI type back to the original [`raw_window_handle::AndroidNdkWindowHandle`].
28    ///
29    /// # Safety
30    /// Original type [`raw_window_handle::AndroidNdkWindowHandle`] is marked as `non_exaustive`,
31    /// and therefore it is impossible to convert to it completely safely.
32    pub unsafe fn into(self) -> raw_window_handle::AndroidNdkWindowHandle {
33        raw_window_handle::AndroidNdkWindowHandle::new(self.a_native_window)
34    }
35}
36
37impl From<AndroidNdkWindowHandle> for RawWindowHandle {
38    fn from(val: AndroidNdkWindowHandle) -> RawWindowHandle {
39        RawWindowHandle {
40            kind: crate::RawWindowHandleKind::AndroidNdkWindowHandle,
41            data: RawWindowHandleData { android_ndk: val },
42        }
43    }
44}