From 6b3796c9a0d3a2f1422bcbde4790c43417659722 Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Tue, 16 Apr 2024 10:51:13 +1200 Subject: Update devices to match new specifications --- src/devices/screen/draw_rect.rs | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/devices/screen/draw_rect.rs (limited to 'src/devices/screen/draw_rect.rs') diff --git a/src/devices/screen/draw_rect.rs b/src/devices/screen/draw_rect.rs new file mode 100644 index 0000000..265a87f --- /dev/null +++ b/src/devices/screen/draw_rect.rs @@ -0,0 +1,42 @@ +use super::*; + +impl ScreenDevice { + pub fn draw_rect(&mut self, colour: u8, layer: ScreenLayer) { + if let Some([x0, y0, x1, y1]) = self.find_vector_bounding_box() { + let screen_width = self.dimensions.width as usize; + let rect_width = x1 - x0 + 1; + let mut i = x0 + (screen_width * y0); + let buffer = match layer { + ScreenLayer::Background => &mut self.background, + ScreenLayer::Foreground => &mut self.foreground, + }; + for _ in y0..=y1 { + buffer[i..i+rect_width].fill(colour); + i += screen_width; + } + } + } + + pub fn draw_rect_1bit(&mut self, params: u8, layer: ScreenLayer) { + if let Some([x0, y0, x1, y1]) = self.find_vector_bounding_box() { + let screen_width = self.dimensions.width as usize; + let rect_width = x1 - x0 + 1; + let mut i = x0 + (screen_width * y0); + let sprite = self.sprite_buffer.get_1bit_sprite(params); + let buffer = match layer { + ScreenLayer::Background => &mut self.background, + ScreenLayer::Foreground => &mut self.foreground, + }; + + for y in y0..=y1 { + let row = sprite[y % 8]; + for x in x0..=x1 { + let colour = row[x % 8]; + if colour != 0xff { buffer[i] = colour } + i += 1; + } + i += screen_width - rect_width; + } + }; + } +} -- cgit v1.2.3-70-g09d2