From 7ec9a3d7e0bd3e3c65617cccfb4c1f11dab4f645 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Mon, 22 Nov 2021 22:29:58 +0100 Subject: framebuffer: add scroll function --- include/object/framebuffer.h | 1 + src/os/object/framebuffer.cc | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/object/framebuffer.h b/include/object/framebuffer.h index a76a24a..bfbd215 100644 --- a/include/object/framebuffer.h +++ b/include/object/framebuffer.h @@ -20,6 +20,7 @@ class Framebuffer : public OutputStream constexpr static unsigned int const height = CONFIG_framebuffer_height; void clear(); + void scroll(); void fillBox(unsigned int x, unsigned int y, unsigned int w, unsigned int h); void drawAt(unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *image); void setFont(const glyph_t *font) { this->font = font; } diff --git a/src/os/object/framebuffer.cc b/src/os/object/framebuffer.cc index f23cd84..e8b0ee0 100644 --- a/src/os/object/framebuffer.cc +++ b/src/os/object/framebuffer.cc @@ -71,6 +71,19 @@ void Framebuffer::drawAt(unsigned int x, unsigned int y, unsigned int w, unsigne } } +void Framebuffer::scroll() +{ + for (unsigned int pos_x = 0; pos_x < width; pos_x++) { + for (unsigned int pos_y = 1; pos_y < height/8; pos_y++) { + data[pos_x * (height/8) + pos_y - 1] = data[pos_x * (height/8) + pos_y]; + } + data[pos_x * (height/8) + height/8 - 1] = 0; + } + if (fontY >= 8) { + fontY -= 8; + } +} + void Framebuffer::put(char c) { if (font == 0) { @@ -96,7 +109,7 @@ void Framebuffer::put(char c) put('\n'); } if (fontY >= height) { - return; + scroll(); } for (unsigned char i = 0; i < glyph_w; i++) { #ifdef MULTIPASS_ARCH_arduino_nano -- cgit v1.2.3