]> patrickod personal git archive - keywing-rs.git/blobdiff - keywing/src/buffer.rs
Remove dead code
[keywing-rs.git] / keywing / src / buffer.rs
index da912ad88afcf4876ac81d64537bbc888583c6b7..6898b68cee465f892220181ab4006560ac881a10 100644 (file)
@@ -1,43 +1,50 @@
 use embedded_graphics::{
     drawable::Pixel,
-    geometry::{Point, Size},
+    geometry::Size,
     pixelcolor::{
         raw::{RawData, RawU16},
         Rgb565,
     },
-    primitives::Rectangle,
-    style::{PrimitiveStyle, Styled},
     DrawTarget,
 };
 
 pub struct FrameBuffer<'a> {
     buf: &'a mut [[u16; 320]; 240],
+    dirty: bool,
 }
 
 impl<'a> FrameBuffer<'a> {
     pub fn new(raw: &'a mut [[u16; 320]; 240]) -> Self {
         Self {
-            buf: raw
+            buf: raw,
+            dirty: false,
         }
     }
 
-    pub fn inner(&self) -> &[u16] {
-        unsafe {
-            core::slice::from_raw_parts(self.buf.as_ptr().cast::<u16>(), (self.width() * self.height()) as usize)
+    pub fn inner(&mut self) -> Option<&[u16]> {
+        if self.dirty {
+            self.dirty = false;
+            Some(unsafe {
+                core::slice::from_raw_parts(
+                    self.buf.as_ptr().cast::<u16>(),
+                    (self.width() * self.height()) as usize,
+                )
+            })
+        } else {
+            None
         }
     }
 
     fn width(&self) -> u32 {
-        self.buf.len() as u32
+        self.buf[0].len() as u32
     }
 
     fn height(&self) -> u32 {
-        self.buf[0].len() as u32
+        self.buf.len() as u32
     }
 }
 
-impl<'a> DrawTarget<Rgb565> for FrameBuffer<'a>
-{
+impl<'a> DrawTarget<Rgb565> for FrameBuffer<'a> {
     type Error = ();
 
     fn size(&self) -> Size {
@@ -50,13 +57,12 @@ impl<'a> DrawTarget<Rgb565> for FrameBuffer<'a>
         if pos.x < 0 || pos.y < 0 || pos.x >= self.width() as i32 || pos.y >= self.height() as i32 {
             return Ok(());
         }
-
+        self.dirty = true;
         self.buf[pos.y as usize][pos.x as usize] = swap(RawU16::from(color).into_inner());
         Ok(())
     }
 }
 
 const fn swap(inp: u16) -> u16 {
-    (inp & 0x00FF) << 8 |
-    (inp & 0xFF00) >> 8
+    (inp & 0x00FF) << 8 | (inp & 0xFF00) >> 8
 }