Skip to content
Snippets Groups Projects
debug.rs 1.59 KiB
Newer Older
use super::Display;

pub struct DebugDisplay {
    display: Display,
    x: usize,
    y: usize,
    w: usize,
    h: usize,
}

impl DebugDisplay {
    pub fn new(display: Display) -> DebugDisplay {
        let w = display.width/8;
        let h = display.height/16;
        DebugDisplay {
            display,
            x: 0,
            y: 0,
            w: w,
            h: h,
        }
    }

    pub fn into_display(self) -> Display {
        self.display
    }

    pub fn write_char(&mut self, c: char) {
        if self.x >= self.w || c == '\n' {
            self.x = 0;
            self.y += 1;
        }

        if self.y >= self.h {
            let new_y = self.h - 1;
            let d_y = self.y - new_y;

            self.display.scroll(d_y * 16);

            self.display.rect(
                0, (self.h - d_y) * 16,
                self.w * 8, d_y * 16,
                0x000000
            );

            self.display.sync(
                0, 0,
                self.w * 8, self.h * 16
            );

            self.y = new_y;
        }

        if c != '\n' {
            self.display.rect(
                self.x * 8, self.y * 16,
                8, 16,
                0x000000
            );

            self.display.char(
                self.x * 8, self.y * 16,
                c,
                0xFFFFFF
            );

            self.display.sync(
    pub fn write(&mut self, buf: &[u8]) {
        for &b in buf {
            self.write_char(b as char);