Skip to main content

ling_ui/
renderer.rs

1//! Software renderer stub for ling-ui.
2
3use crate::widget::{RenderCtx, Widget};
4
5pub struct SoftwareRenderer {
6    pub width:  u32,
7    pub height: u32,
8    pub buffer: Vec<u32>,
9}
10
11impl SoftwareRenderer {
12    pub fn new(width: u32, height: u32) -> Self {
13        Self { width, height, buffer: vec![0xFF_18_18_18; (width * height) as usize] }
14    }
15
16    pub fn clear(&mut self, color: u32) {
17        self.buffer.fill(color);
18    }
19
20    pub fn render_widget(&mut self, widget: &dyn Widget) {
21        let mut ctx = RenderCtx {
22            width:  self.width  as f32,
23            height: self.height as f32,
24        };
25        widget.render(&mut ctx);
26    }
27
28    pub fn pixels(&self) -> &[u32] { &self.buffer }
29}