raw_window_handle_ffi/handles/
drm.rs

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