Browse Source

Added some comments to the previous commit

embedded-hal-1.0
Chris 7 years ago
parent
commit
efa5591788
  1. 29
      src/graphics.rs

29
src/graphics.rs

@ -20,22 +20,22 @@ impl Default for DisplayRotation {
} }
} }
pub struct Display { pub struct Display<'a> {
width: u32, width: u32,
height: u32, height: u32,
rotation: DisplayRotation, rotation: DisplayRotation,
buffer: [u8; 15000], //buffer: Box<u8>//[u8; 15000] buffer: &'a mut [u8], //buffer: Box<u8>//[u8; 15000]
} }
impl Display { impl<'a> Display<'a> {
pub fn new(width: u32, height: u32, buffer: & mut [u8]) -> Display { pub fn new(width: u32, height: u32, buffer: &'a mut [u8]) -> Display<'a> {
let len = buffer.len() as u32; let len = buffer.len() as u32;
assert!(width / 8 * height >= len); assert!(width / 8 * height >= len);
Display { Display {
width, width,
height, height,
rotation: DisplayRotation::default(), rotation: DisplayRotation::default(),
buffer: [0u8; 15000], buffer,
} }
} }
@ -59,25 +59,28 @@ impl Display {
} }
impl Drawing<Color> for Display { impl<'a> Drawing<Color> for Display<'a> {
fn draw<T>(&mut self, item_pixels: T) fn draw<T>(&mut self, item_pixels: T)
where where
T: Iterator<Item = Pixel<Color>> T: Iterator<Item = Pixel<Color>>
{ {
for Pixel(UnsignedCoord(x,y), color) in item_pixels { for Pixel(UnsignedCoord(x,y), color) in item_pixels {
if outside_display(x, y, self.width, self.height, self.rotation) { if outside_display(x, y, self.width, self.height, self.rotation) {
return; continue;
} }
let (idx, bit) = rotation(x, y, self.width, self.height, self.rotation); // Give us index inside the buffer and the bit-position in that u8 which needs to be changed
let (index, bit) = rotation(x, y, self.width, self.height, self.rotation);
let index = index as usize;
let idx = idx as usize; // "Draw" the Pixel on that bit
match color { match color {
Color::Black => { Color::Black => {
self.buffer[idx] &= !bit; self.buffer[index] &= !bit;
} }
Color::White => { Color::White => {
self.buffer[idx] |= bit; self.buffer[index] |= bit;
} }
} }
} }
@ -85,7 +88,7 @@ impl Drawing<Color> for Display {
} }
pub(crate) fn outside_display(x: u32, y: u32, width: u32, height: u32, rotation: DisplayRotation) -> bool { fn outside_display(x: u32, y: u32, width: u32, height: u32, rotation: DisplayRotation) -> bool {
match rotation { match rotation {
DisplayRotation::Rotate0 | DisplayRotation::Rotate180 => { DisplayRotation::Rotate0 | DisplayRotation::Rotate180 => {
if x >= width || y >= height { if x >= width || y >= height {
@ -101,7 +104,7 @@ pub(crate) fn outside_display(x: u32, y: u32, width: u32, height: u32, rotation:
false false
} }
pub(crate) fn rotation(x: u32, y: u32, width: u32, height: u32, rotation: DisplayRotation) -> (u32, u8) { fn rotation(x: u32, y: u32, width: u32, height: u32, rotation: DisplayRotation) -> (u32, u8) {
match rotation { match rotation {
DisplayRotation::Rotate0 => ( DisplayRotation::Rotate0 => (
x / 8 + (width / 8) * y, x / 8 + (width / 8) * y,

Loading…
Cancel
Save