1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:07:35 +00:00

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,7 +296,8 @@ const char* peanut8x7[] {
" # # "
" # # "
" # # "
" ##### ",
" ##### "
" ",
" ###### "
" # # "
@ -73,15 +305,17 @@ const char* peanut8x7[] {
" #### "
" # "
" # # "
" ###### ",
" ###### "
" ",
" ###### "
" # # "
" # "
" #### "
" ### "
" # "
" # "
" # ",
" ### "
" ",
" #### "
" # # "
@ -89,184 +323,468 @@ 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();
}