bevy_live_wallpaper 0.5.0

A Bevy plugin to create live wallpapers.
Documentation
use std::ffi::c_void;
use std::ptr::NonNull;

use wayland_client::Proxy;
use wayland_client::protocol::{wl_display::WlDisplay, wl_surface::WlSurface};
use wgpu::rwh::{RawDisplayHandle, RawWindowHandle, WaylandDisplayHandle, WaylandWindowHandle};

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct WaylandSurfaceHandles {
    display_ptr: usize,
    window_ptr: usize,
}

impl WaylandSurfaceHandles {
    pub fn new(display: &WlDisplay, surface: &WlSurface) -> Self {
        Self {
            display_ptr: display.id().as_ptr() as usize,
            window_ptr: surface.id().as_ptr() as usize,
        }
    }

    pub fn raw_display_handle(&self) -> RawDisplayHandle {
        let handle = WaylandDisplayHandle::new(
            NonNull::new(self.display_ptr as *mut c_void).expect("display ptr should be valid"),
        );
        RawDisplayHandle::Wayland(handle)
    }

    pub fn raw_window_handle(&self) -> RawWindowHandle {
        let handle = WaylandWindowHandle::new(
            NonNull::new(self.window_ptr as *mut c_void).expect("window ptr should be valid"),
        );
        RawWindowHandle::Wayland(handle)
    }
}