bevy_live_wallpaper 0.5.0

A Bevy plugin to create live wallpapers.
Documentation
use std::{ffi::c_void, num::NonZeroU32, ptr::NonNull};

use raw_window_handle::{RawDisplayHandle, RawWindowHandle, XcbDisplayHandle, XcbWindowHandle};

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct X11SurfaceHandles {
    connection_ptr: usize,
    window: u32,
    screen: i32,
}

impl X11SurfaceHandles {
    pub fn new(connection: NonNull<c_void>, screen: i32, window: u32) -> Self {
        Self {
            connection_ptr: connection.as_ptr() as usize,
            window,
            screen,
        }
    }

    pub fn raw_display_handle(&self) -> RawDisplayHandle {
        let connection = NonNull::new(self.connection_ptr as *mut c_void)
            .expect("connection pointer should remain valid");
        RawDisplayHandle::Xcb(XcbDisplayHandle::new(Some(connection), self.screen))
    }

    pub fn raw_window_handle(&self) -> RawWindowHandle {
        let window = NonZeroU32::new(self.window).expect("window id should not be zero");
        RawWindowHandle::Xcb(XcbWindowHandle::new(window))
    }
}