jay-compositor 1.15.0

The Jay compositor
use crate::format::ARGB8888;
use crate::it::test_client::TestClient;
use crate::it::test_error::TestResult;
use crate::it::test_ifs::test_buffer::TestBuffer;
use crate::it::test_mem::TestMem;
use crate::theme::Color;
use crate::utils::windows::WindowsExt;
use std::cell::Cell;
use std::ops::Deref;
use std::ops::Range;
use std::rc::Rc;

pub struct TestShmBuffer {
    pub buffer: Rc<TestBuffer>,
    pub range: Range<usize>,
    pub mem: Rc<TestMem>,
}

impl TestShmBuffer {
    pub fn fill(&self, color: Color) {
        let [cr, cg, cb, ca] = color.to_srgba_premultiplied();
        for [b, g, r, a] in self.deref().array_chunks_ext::<4>() {
            r.set(cr);
            g.set(cg);
            b.set(cb);
            a.set(ca);
        }
    }
}

impl Deref for TestShmBuffer {
    type Target = [Cell<u8>];

    fn deref(&self) -> &Self::Target {
        &self.mem[self.range.clone()]
    }
}

impl TestClient {
    pub fn create_shm_buffer(&self, width: i32, height: i32) -> TestResult<Rc<TestShmBuffer>> {
        let pool = self.create_shm_pool((width * height * 4) as _)?;
        pool.create_buffer(0, width, height, width * 4, ARGB8888)
    }
}