Graphics/
Draw_buffer.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use crate::{Color_RGB565_type, Color_type, Point_type, Rendering_color_type};

#[repr(transparent)]
pub struct Buffer_type {
    Buffer: Vec<Rendering_color_type>,
}

impl AsRef<[Color_type]> for Buffer_type {
    fn as_ref(&self) -> &[Color_type] {
        unsafe {
            let Buffer = self.Buffer.as_ptr() as *const Color_type;
            std::slice::from_raw_parts(Buffer, self.Buffer.len())
        }
    }
}

impl Buffer_type {
    pub fn New_from_resolution(Resolution: &Point_type) -> Self {
        let Buffer_size = Get_minimal_buffer_size(Resolution);

        Self::New(Buffer_size)
    }

    pub fn New(Buffer_size: usize) -> Self {
        Self {
            Buffer: vec![Color_RGB565_type::New(0, 0, 0); Buffer_size],
        }
    }
}

pub const fn Get_recommended_buffer_size(Resolution: &Point_type) -> usize {
    Resolution.Get_x() as usize * Resolution.Get_y() as usize
}

pub const fn Get_minimal_buffer_size(Resolution: &Point_type) -> usize {
    if Resolution.Get_x() < Resolution.Get_y() {
        Resolution.Get_y() as usize * Resolution.Get_y() as usize / 10
    } else {
        Resolution.Get_x() as usize * Resolution.Get_x() as usize / 10
    }
}