smithay 0.7.0

Smithay is a library for writing wayland compositors.
Documentation
use crate::wayland::buffer::BufferHandler;

use super::{SinglePixelBufferState, SinglePixelBufferUserData};
use wayland_protocols::wp::single_pixel_buffer::v1::server::wp_single_pixel_buffer_manager_v1::{
    self, WpSinglePixelBufferManagerV1,
};
use wayland_server::{
    protocol::wl_buffer::{self, WlBuffer},
    DataInit, Dispatch, DisplayHandle, GlobalDispatch, New,
};

impl<D> GlobalDispatch<WpSinglePixelBufferManagerV1, (), D> for SinglePixelBufferState
where
    D: GlobalDispatch<WpSinglePixelBufferManagerV1, ()>,
    D: Dispatch<WpSinglePixelBufferManagerV1, ()>,
    D: 'static,
{
    fn bind(
        _state: &mut D,
        _dh: &DisplayHandle,
        _client: &wayland_server::Client,
        resource: New<WpSinglePixelBufferManagerV1>,
        _global_data: &(),
        data_init: &mut DataInit<'_, D>,
    ) {
        data_init.init(resource, ());
    }
}

impl<D> Dispatch<WpSinglePixelBufferManagerV1, (), D> for SinglePixelBufferState
where
    D: Dispatch<WpSinglePixelBufferManagerV1, ()>,
    D: Dispatch<WlBuffer, SinglePixelBufferUserData>,
    D: 'static,
{
    fn request(
        _state: &mut D,
        _client: &wayland_server::Client,
        _manager: &WpSinglePixelBufferManagerV1,
        request: wp_single_pixel_buffer_manager_v1::Request,
        _data: &(),
        _dh: &DisplayHandle,
        data_init: &mut DataInit<'_, D>,
    ) {
        match request {
            wp_single_pixel_buffer_manager_v1::Request::CreateU32RgbaBuffer {
                id: buffer,
                r,
                g,
                b,
                a,
            } => {
                data_init.init(buffer, SinglePixelBufferUserData { r, g, b, a });
            }
            wp_single_pixel_buffer_manager_v1::Request::Destroy => {}
            _ => todo!(),
        }
    }
}

impl<D> Dispatch<WlBuffer, SinglePixelBufferUserData, D> for SinglePixelBufferState
where
    D: Dispatch<WlBuffer, SinglePixelBufferUserData>,
    D: BufferHandler,
{
    fn request(
        data: &mut D,
        _client: &wayland_server::Client,
        buffer: &wl_buffer::WlBuffer,
        request: wl_buffer::Request,
        _udata: &SinglePixelBufferUserData,
        _dh: &DisplayHandle,
        _data_init: &mut DataInit<'_, D>,
    ) {
        match request {
            wl_buffer::Request::Destroy => {
                data.buffer_destroyed(buffer);
            }
            _ => unreachable!(),
        }
    }
}