jay-compositor 1.15.0

The Jay compositor
use crate::cmm::cmm_eotf::Eotf;
use crate::it::test_client::TestClient;
use crate::it::test_error::TestErrorError;
use crate::theme::Color;
use crate::wire::WlBufferId;
use crate::wire::wl_buffer::*;
use std::cell::Cell;
use std::rc::Rc;

pub struct TestBuffer {
    pub id: WlBufferId,
    pub released: Cell<bool>,
}

synthetic_event_handler!(TestBuffer);

impl WlBufferEventHandler for TestBuffer {
    type Error = TestErrorError;

    fn release(&self, _ev: Release, _slf: &Rc<Self>) -> Result<(), Self::Error> {
        self.released.set(true);
        Ok(())
    }
}

impl TestClient {
    pub fn create_single_pixel_buffer(&self, color: Color) -> Rc<TestBuffer> {
        let map = |c: f32| (c as f64 * u32::MAX as f64) as u32;
        let [r, g, b, a] = color.to_array(Eotf::Gamma22);
        let client = &self.client;
        let id = client.send_wp_single_pixel_buffer_manager_v1_create_u32_rgba_buffer(
            map(r),
            map(g),
            map(b),
            map(a),
        );
        let buffer = Rc::new(TestBuffer {
            id,
            released: Cell::new(true),
        });
        client.set_synthetic_event_handler(id, &buffer);
        buffer
    }
}