raw_window_handle_extensions/
windows.rs

1use std::mem::transmute;
2use std::ptr::NonNull;
3use crate::{RawDisplayHandleType, RawWindowHandleType, VeryRawDisplayHandle, VeryRawWindowHandle};
4use raw_window_handle::{Win32WindowHandle, WinRtWindowHandle, WindowsDisplayHandle};
5
6impl From<Win32WindowHandle> for VeryRawWindowHandle {
7    fn from(value: Win32WindowHandle) -> Self {
8        Self {
9            handle_type: RawWindowHandleType::Win32,
10            ptr_1: unsafe { transmute(value.hwnd) },
11            ptr_2: unsafe { transmute(value.hinstance) },
12            ptr_3: std::ptr::null_mut(),
13            id_1: Default::default(),
14            id_2: Default::default(),
15        }
16    }
17}
18
19impl From<VeryRawWindowHandle> for Win32WindowHandle {
20    fn from(value: VeryRawWindowHandle) -> Self {
21        assert_eq!(value.handle_type, RawWindowHandleType::Win32);
22        let mut window_handle = Self::new(unsafe { transmute(value.ptr_1) });
23        window_handle.hinstance = unsafe { transmute(value.ptr_2) };
24        window_handle
25    }
26}
27
28impl From<WinRtWindowHandle> for VeryRawWindowHandle {
29    fn from(value: WinRtWindowHandle) -> Self {
30        Self {
31            handle_type: RawWindowHandleType::WinRt,
32            ptr_1: value.core_window.as_ptr(),
33            ptr_2: std::ptr::null_mut(),
34            ptr_3: std::ptr::null_mut(),
35            id_1: Default::default(),
36            id_2: Default::default(),
37        }
38    }
39}
40
41impl From<VeryRawWindowHandle> for WinRtWindowHandle {
42    fn from(value: VeryRawWindowHandle) -> Self {
43        assert_eq!(value.handle_type, RawWindowHandleType::WinRt);
44        let window_handle = Self::new(NonNull::new(value.ptr_1).unwrap());
45        window_handle
46    }
47}
48
49impl From<WindowsDisplayHandle> for VeryRawDisplayHandle {
50    fn from(_value: WindowsDisplayHandle) -> Self {
51        Self {
52            handle_type: RawDisplayHandleType::Windows,
53            ptr_1: std::ptr::null_mut(),
54            id_1: Default::default(),
55        }
56    }
57}
58
59impl From<VeryRawDisplayHandle> for WindowsDisplayHandle {
60    fn from(value: VeryRawDisplayHandle) -> Self {
61        assert_eq!(value.handle_type, RawDisplayHandleType::Windows);
62        let window_handle = Self::new();
63        window_handle
64    }
65}