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