summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/object/framebuffer.h2
-rw-r--r--src/os/object/framebuffer.cc13
2 files changed, 12 insertions, 3 deletions
diff --git a/include/object/framebuffer.h b/include/object/framebuffer.h
index 90be12b..c2edf22 100644
--- a/include/object/framebuffer.h
+++ b/include/object/framebuffer.h
@@ -23,7 +23,7 @@ class Framebuffer : public OutputStream
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 drawBattery(unsigned int x, unsigned int y, unsigned char percent);
+ void drawBattery(unsigned int x, unsigned int y, unsigned char percent, bool charging = false);
void setFont(const glyph_t *font) { this->font = font; }
void setPos(unsigned int newX, unsigned int newY) { fontX = newX; fontY = newY; }
virtual void put(char c) override;
diff --git a/src/os/object/framebuffer.cc b/src/os/object/framebuffer.cc
index 82f26e3..1a22320 100644
--- a/src/os/object/framebuffer.cc
+++ b/src/os/object/framebuffer.cc
@@ -71,15 +71,24 @@ void Framebuffer::drawAt(unsigned int x, unsigned int y, unsigned int w, unsigne
}
}
-void Framebuffer::drawBattery(unsigned int x, unsigned int y, unsigned char percent)
+void Framebuffer::drawBattery(unsigned int x, unsigned int y, unsigned char percent, bool charging)
{
for (unsigned char i = 0; i < 13; i++) {
- data[(x+i) * (height/8) + y] = 0x81 | (0xff * (percent >= (i*8)));
+ data[(x+i) * (height/8) + y] = 0x81 | (0xff * (percent*2 >= i*15));
}
data[(x+11) * (height/8) + y/8] |= 0xe7;
data[(x+12) * (height/8) + y/8] &= ~0x81;
data[(x+12) * (height/8) + y/8] |= 0x24;
data[(x+13) * (height/8) + y/8] = 0x3c;
+
+ if (charging) {
+ data[(x+2) * (height/8) + y/8] ^= 0x7e;
+ data[(x+3) * (height/8) + y/8] ^= 0x3c;
+ data[(x+4) * (height/8) + y/8] ^= 0x18;
+ data[(x+7) * (height/8) + y/8] ^= 0x7e;
+ data[(x+8) * (height/8) + y/8] ^= 0x3c;
+ data[(x+9) * (height/8) + y/8] ^= 0x18;
+ }
}
void Framebuffer::scroll()