jay-compositor 1.15.0

The Jay compositor
use crate::client::Client;
use crate::it::test_client::TestClientExt;
use crate::it::test_error::TestError;
use crate::it::test_ifs::test_surface::TestSurface;
use crate::it::test_ifs::test_viewport::TestViewport;
use crate::theme::Color;
use std::cell::Cell;
use std::ops::Deref;
use std::rc::Rc;

pub struct TestSurfaceExt {
    pub client: Rc<Client>,
    pub surface: Rc<TestSurface>,
    pub viewport: Rc<TestViewport>,
    pub color: Cell<Color>,
}

impl Deref for TestSurfaceExt {
    type Target = TestSurface;

    fn deref(&self) -> &Self::Target {
        &self.surface
    }
}

impl TestSurfaceExt {
    pub async fn map(&self, width: i32, height: i32) -> Result<(), TestError> {
        let buffer = self.client.create_single_pixel_buffer(self.color.get());
        self.surface.attach(buffer.id);
        self.viewport.set_source(0, 0, 1, 1);
        self.viewport.set_destination(width, height);
        self.surface.commit();
        self.client.sync().await;
        Ok(())
    }

    pub fn set_color(&self, r: u8, g: u8, b: u8, a: u8) {
        self.color.set(Color::from_srgba_straight(r, g, b, a));
    }
}