pmse_gtk/
raw_handle.rs

1//! (wayland) RawWindowHandle, RawDisplayHandle
2#![allow(unsafe_code)]
3
4use gdk4_wayland::wayland_client::{protocol::wl_surface::WlSurface, Proxy};
5use raw_window_handle::{
6    HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, WaylandWindowHandle,
7};
8use wayland_backend::sys::client::Backend;
9
10/// 提供 RawWindowHandle, RawDisplayHandle (wayland)
11#[derive(Debug, Clone)]
12pub struct HandleBox {
13    rd: RawDisplayHandle,
14    rw: RawWindowHandle,
15}
16
17impl HandleBox {
18    pub fn new(b: &Backend, s: &WlSurface) -> Self {
19        let rd = b.raw_display_handle();
20
21        // https://docs.rs/winit-gtk/0.29.1/src/winit/platform_impl/linux/window.rs.html
22        let mut wh = WaylandWindowHandle::empty();
23        wh.surface = s.id().as_ptr() as *mut _;
24        let rw = RawWindowHandle::Wayland(wh);
25
26        Self { rd, rw }
27    }
28}
29
30unsafe impl HasRawDisplayHandle for HandleBox {
31    fn raw_display_handle(&self) -> RawDisplayHandle {
32        self.rd
33    }
34}
35
36unsafe impl HasRawWindowHandle for HandleBox {
37    fn raw_window_handle(&self) -> RawWindowHandle {
38        self.rw
39    }
40}
41
42// TODO
43unsafe impl Send for HandleBox {}
44unsafe impl Sync for HandleBox {}