raw-window-handle-extensions 0.6.0

C representation for the raw-window-handle crate
Documentation
use std::mem::transmute;
use std::ptr::NonNull;
use crate::{RawDisplayHandleType, RawWindowHandleType, VeryRawDisplayHandle, VeryRawWindowHandle};
use raw_window_handle::{Win32WindowHandle, WinRtWindowHandle, WindowsDisplayHandle};

impl From<Win32WindowHandle> for VeryRawWindowHandle {
    fn from(value: Win32WindowHandle) -> Self {
        Self {
            handle_type: RawWindowHandleType::Win32,
            ptr_1: unsafe { transmute(value.hwnd) },
            ptr_2: unsafe { transmute(value.hinstance) },
            ptr_3: std::ptr::null_mut(),
            id_1: Default::default(),
            id_2: Default::default(),
        }
    }
}

impl From<VeryRawWindowHandle> for Win32WindowHandle {
    fn from(value: VeryRawWindowHandle) -> Self {
        assert_eq!(value.handle_type, RawWindowHandleType::Win32);
        let mut window_handle = Self::new(unsafe { transmute(value.ptr_1) });
        window_handle.hinstance = unsafe { transmute(value.ptr_2) };
        window_handle
    }
}

impl From<WinRtWindowHandle> for VeryRawWindowHandle {
    fn from(value: WinRtWindowHandle) -> Self {
        Self {
            handle_type: RawWindowHandleType::WinRt,
            ptr_1: value.core_window.as_ptr(),
            ptr_2: std::ptr::null_mut(),
            ptr_3: std::ptr::null_mut(),
            id_1: Default::default(),
            id_2: Default::default(),
        }
    }
}

impl From<VeryRawWindowHandle> for WinRtWindowHandle {
    fn from(value: VeryRawWindowHandle) -> Self {
        assert_eq!(value.handle_type, RawWindowHandleType::WinRt);
        let window_handle = Self::new(NonNull::new(value.ptr_1).unwrap());
        window_handle
    }
}

impl From<WindowsDisplayHandle> for VeryRawDisplayHandle {
    fn from(_value: WindowsDisplayHandle) -> Self {
        Self {
            handle_type: RawDisplayHandleType::Windows,
            ptr_1: std::ptr::null_mut(),
            id_1: Default::default(),
        }
    }
}

impl From<VeryRawDisplayHandle> for WindowsDisplayHandle {
    fn from(value: VeryRawDisplayHandle) -> Self {
        assert_eq!(value.handle_type, RawDisplayHandleType::Windows);
        let window_handle = Self::new();
        window_handle
    }
}