raw_window_handle_extensions/
haiku.rs1use 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}