raw_window_handle_extensions/
haiku.rs

1use crate::{RawDisplayHandleType, RawWindowHandleType, VeryRawDisplayHandle, VeryRawWindowHandle};
2use raw_window_handle::{HaikuDisplayHandle, HaikuWindowHandle};
3use std::ptr::NonNull;
4
5impl From<HaikuWindowHandle> for VeryRawWindowHandle {
6    fn from(value: HaikuWindowHandle) -> Self {
7        Self {
8            handle_type: RawWindowHandleType::Haiku,
9            ptr_1: value.b_window.as_ptr(),
10            ptr_2: value
11                .b_direct_window
12                .map(|ptr| ptr.as_ptr())
13                .unwrap_or_else(|| 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 HaikuWindowHandle {
22    fn from(value: VeryRawWindowHandle) -> Self {
23        assert_eq!(value.handle_type, RawWindowHandleType::Haiku);
24        let mut window_handle =
25            Self::new(NonNull::new(value.ptr_1).expect("Haiku window must not be null"));
26        if !value.ptr_2.is_null() {
27            window_handle.b_direct_window = Some(NonNull::new(value.ptr_2).unwrap());
28        }
29        window_handle
30    }
31}
32
33impl From<HaikuDisplayHandle> for VeryRawDisplayHandle {
34    fn from(_value: HaikuDisplayHandle) -> Self {
35        Self {
36            handle_type: RawDisplayHandleType::Haiku,
37            ptr_1: std::ptr::null_mut(),
38            id_1: Default::default(),
39        }
40    }
41}
42
43impl From<VeryRawDisplayHandle> for HaikuDisplayHandle {
44    fn from(value: VeryRawDisplayHandle) -> Self {
45        assert_eq!(value.handle_type, RawDisplayHandleType::Haiku);
46        Self::new()
47    }
48}