1use 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}