More work on the bitmap font.

This commit is contained in:
Andreas Kling 2018-10-11 00:10:36 +02:00
parent 77bac7216c
commit cb64ff229a
3 changed files with 570 additions and 48 deletions

View file

@ -22,8 +22,9 @@ void Label::setText(String&& text)
void Label::onPaint(PaintEvent&)
{
Painter painter(*this);
painter.fillRect({ 0, 0, width(), height() }, Color(0xc0, 0xc0, 0xc0));
painter.drawText({ 4, 4 }, text());
painter.fillRect({ 0, 0, width(), height() }, Color(0x0, 0x0, 0x0));
if (!text().isEmpty())
painter.drawText({ 4, 4 }, text(), Color(0xff, 0xff, 0xff));
}
void Label::onMouseMove(MouseEvent& event)

View file

@ -34,14 +34,243 @@ void Painter::fillRect(const Rect& rect, Color color)
}
}
const char* peanut8x7[] {
char firstPeanutChar = '(';
const char* peanut8x8[] {
" # "
" # "
" # "
" # "
" # "
" # "
" # "
" ",
" # "
" # "
" # "
" # "
" # "
" # "
" # "
" ",
" "
" "
" # "
" ##### "
" # "
" # # "
" "
" ",
" "
" "
" # "
" # "
" ##### "
" # "
" # "
" ",
" "
" "
" "
" "
" "
" ## "
" ## "
" ",
" "
" "
" "
" "
" ##### "
" "
" "
" ",
" "
" "
" "
" "
" "
" ## "
" ## "
" ",
" # "
" ## "
" ## "
" ## "
" ## "
" ## "
" # "
" ",
" #### "
" # ## "
" # # # "
" # # # "
" # # # "
" ## # "
" #### "
" ",
" # "
" ## "
" # # "
" # "
" # "
" # "
" ### "
" ",
" #### "
" # # "
" # # "
" # "
" # "
" # "
" ###### "
" ",
" ###### "
" # "
" # "
" ### "
" # "
" # # "
" #### "
" ",
" ### "
" # # "
" # # "
" ###### "
" # "
" # "
" # "
" ",
" ###### "
" # "
" # "
" ##### "
" # "
" # # "
" #### "
" ",
" ## "
" ## "
" # "
" ##### "
" # # "
" # # "
" #### "
" ",
" ###### "
" # # "
" # "
" # "
" # "
" # "
" # "
" ",
" #### "
" # # "
" # # "
" #### "
" # # "
" # # "
" #### "
" ",
" #### "
" # # "
" # # "
" ##### "
" # "
" ## "
" ## "
" ",
" "
" "
" ## "
" ## "
" "
" ## "
" ## "
" ",
" "
" "
" ## "
" ## "
" "
" ## "
" ## "
" ",
" ## "
" # "
" # "
" # "
" # "
" # "
" ## "
" ",
" "
" "
" ###### "
" "
" ###### "
" "
" "
" ",
" ## "
" # "
" # "
" # "
" # "
" # "
" ## "
" ",
" #### "
" # # "
" # "
" # "
" ## "
" "
" ## "
" ",
" #### "
" # # "
" # ### "
" # # # "
" # ### "
" # "
" #### "
" ",
" #### "
" # # "
" # # "
" ###### "
" # # "
" # # "
"### ###",
"### ###"
" ",
" ##### "
" # # "
@ -49,7 +278,8 @@ const char* peanut8x7[] {
" ###### "
" # # "
" # # "
" ##### ",
" ##### "
" ",
" #### "
" # # "
@ -57,7 +287,8 @@ const char* peanut8x7[] {
" # "
" # "
" # # "
" #### ",
" #### "
" ",
" ##### "
" # # "
@ -65,23 +296,26 @@ const char* peanut8x7[] {
" # # "
" # # "
" # # "
" ##### ",
" ##### "
" ",
" ###### "
" # # "
" # "
" #### "
" # "
" # # "
" ###### ",
" # # "
" # "
" #### "
" # "
" # # "
" ###### "
" ",
" ###### "
" # # "
" # "
" #### "
" # "
" # "
" # ",
" # # "
" # "
" ### "
" # "
" # "
" ### "
" ",
" #### "
" # # "
@ -89,7 +323,8 @@ const char* peanut8x7[] {
" # ###"
" # # "
" # # "
" #### ",
" #### "
" ",
" # # "
" # # "
@ -97,7 +332,8 @@ const char* peanut8x7[] {
" ###### "
" # # "
" # # "
" # # ",
" # # "
" ",
" ### "
" # "
@ -105,7 +341,8 @@ const char* peanut8x7[] {
" # "
" # "
" # "
" ### ",
" ### "
" ",
" ##### "
" # # "
@ -113,7 +350,8 @@ const char* peanut8x7[] {
" # "
" # "
" # # "
" ### ",
" ### "
" ",
" ### ###"
" # # "
@ -121,7 +359,8 @@ const char* peanut8x7[] {
" ### "
" # # "
" # # "
" ### ###",
" ### ###"
" ",
" ### "
" # "
@ -129,7 +368,8 @@ const char* peanut8x7[] {
" # "
" # "
" # # "
" ###### ",
" ###### "
" ",
" # # "
" ## ## "
@ -137,7 +377,8 @@ const char* peanut8x7[] {
" # # "
" # # "
" # # "
"### ###",
"### ###"
" ",
" # # "
" ## # "
@ -145,7 +386,8 @@ const char* peanut8x7[] {
" # # # "
" # ## "
" # # "
" # # ",
" # # "
" ",
" #### "
" # # "
@ -153,7 +395,8 @@ const char* peanut8x7[] {
" # # "
" # # "
" # # "
" #### ",
" #### "
" ",
" ##### "
" # # "
@ -161,7 +404,8 @@ const char* peanut8x7[] {
" #### "
" # "
" # "
" ### ",
" ### "
" ",
" #### "
" # # "
@ -169,7 +413,8 @@ const char* peanut8x7[] {
" # # "
" # # # "
" # # "
" ### # ",
" ### # "
" ",
" ##### "
" # # "
@ -177,7 +422,8 @@ const char* peanut8x7[] {
" #### "
" # # "
" # # "
" ### # ",
" ### # "
" ",
" #### "
" # # "
@ -185,15 +431,17 @@ const char* peanut8x7[] {
" #### "
" # "
" # # "
" #### ",
" #### "
" ",
" ##### "
"####### "
"# # # "
" # "
" # "
" # "
" # "
" ### ",
" ### "
" ",
"### ###"
" # # "
@ -201,7 +449,8 @@ const char* peanut8x7[] {
" # # "
" # # "
" # # "
" #### ",
" #### "
" ",
"### ### "
" # # "
@ -209,7 +458,8 @@ const char* peanut8x7[] {
" # # "
" # # "
" # "
" # ",
" # "
" ",
"### ###"
" # # "
@ -217,7 +467,8 @@ const char* peanut8x7[] {
" # # "
" # ## # "
" ## ## "
" # # ",
" # # "
" ",
"## ## "
" # # "
@ -225,15 +476,17 @@ const char* peanut8x7[] {
" # "
" # # "
" # # "
"## ## ",
"## ## "
" ",
"## ## "
" # # "
" # # "
" # # "
" # "
" # "
" ### ",
" # "
" ### "
" ",
" ###### "
" # # "
@ -241,7 +494,8 @@ const char* peanut8x7[] {
" # "
" # "
" # # "
" ###### ",
" ###### "
" ",
" #### "
" # "
@ -249,7 +503,8 @@ const char* peanut8x7[] {
" # "
" # "
" # "
" #### ",
" #### "
" ",
" # "
" ## "
@ -257,7 +512,8 @@ const char* peanut8x7[] {
" ## "
" ## "
" ## "
" # ",
" # "
" ",
" #### "
" # "
@ -265,8 +521,270 @@ const char* peanut8x7[] {
" # "
" # "
" # "
" #### "
" ",
" # "
" # # "
" # # "
" "
" "
" "
" "
" ",
" "
" "
" "
" "
" "
" "
" ###### "
" ",
" ## "
" ## "
" "
" "
" "
" "
" "
" ",
" "
" "
" #### "
" # # "
" # # "
" # ## "
" ### # "
" ",
" # "
" # "
" ##### "
" # # "
" # # "
" # # "
" ##### "
" ",
" "
" "
" #### "
" # # "
" # "
" # # "
" #### "
" ",
" # "
" # "
" ##### "
" # # "
" # # "
" # # "
" ##### "
" ",
" "
" "
" #### "
" # # "
" ###### "
" # "
" #### "
" ",
" ### "
" # "
" #### "
" # "
" # "
" # "
" ### "
" ",
" "
" "
" #### "
" # # "
" # # "
" #### "
" # "
" #### ",
" # "
" # "
" ##### "
" # # "
" # # "
" # # "
" # # "
" ",
" # "
" "
" ### "
" # "
" # "
" # "
" ### "
" ",
" # "
" "
" ### "
" # "
" # "
" # "
" # "
" ## ",
"### "
" # "
" # ## "
" # # "
" ## # "
" # # "
"### # "
" ",
" ## "
" # "
" # "
" # "
" # "
" # "
" ### "
" ",
" "
" "
" ## ## "
" # # #"
" # # #"
" # #"
" # #"
" ",
" "
" "
" ##### "
" # # "
" # # "
" # # "
" # # "
" ",
" "
" "
" #### "
" # # "
" # # "
" # # "
" #### "
" ",
" "
" "
" ##### "
" # # "
" # # "
" ##### "
" # "
"### ",
" "
" "
" ##### "
" # # "
" # # "
" ##### "
" # "
" ###",
" "
" "
" #### "
" # # "
" # "
" # "
"### "
" ",
" "
" "
" #### "
" ## # "
" ## "
" # ## "
" #### "
" ",
" # "
" # "
" #### "
" # "
" # "
" # "
" ### "
" ",
" "
" "
" # # "
" # # "
" # # "
" # # "
" #### #"
" ",
" "
" "
" # # "
" # # "
" # # "
" # # "
" ## "
" ",
" "
" "
" # # #"
" # # #"
" # # #"
" # # #"
" ## ###"
" ",
" "
" "
" # # "
" # # "
" # "
" # # "
" # # "
" ",
" "
" "
" # # "
" # # "
" # # "
" ##### "
" # "
" #### ",
" "
" "
" ###### "
" # "
" ## "
" # "
" ###### "
" ",
};
void Painter::drawText(const Point& point, const String& text, const Color& color)
@ -275,14 +793,16 @@ void Painter::drawText(const Point& point, const String& text, const Color& colo
p.moveBy(m_widget.x(), m_widget.y());
byte fontWidth = 8;
byte fontHeight = 7;
auto* font = peanut8x7;
byte fontHeight = 8;
auto* font = peanut8x8;
for (int row = 0; row < fontHeight; ++row) {
int y = p.y() + row;
dword* bits = scanline(y);
for (unsigned i = 0; i < text.length(); ++i) {
const char* fontCharacter = font[text[i] - 'A'];
if (text[i] == ' ')
continue;
const char* fontCharacter = font[text[i] - firstPeanutChar];
int x = p.x() + i * fontWidth;
for (unsigned j = 0; j < fontWidth; ++j) {
char fc = fontCharacter[row * fontWidth + j];

View file

@ -15,8 +15,9 @@ int main(int c, char** v)
fb.setRootWidget(&w);
Label l(&w);
l.setRect(Rect(100, 100, 300, 100));
l.setText("ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]");
l.setRect(Rect(100, 100, 600, 100));
l.setText("()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz");
//l.setText("Welcome to the Serenity Operating System");
return loop.exec();
}