1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 11:57: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&) void Label::onPaint(PaintEvent&)
{ {
Painter painter(*this); Painter painter(*this);
painter.fillRect({ 0, 0, width(), height() }, Color(0xc0, 0xc0, 0xc0)); painter.fillRect({ 0, 0, width(), height() }, Color(0x0, 0x0, 0x0));
painter.drawText({ 4, 4 }, text()); if (!text().isEmpty())
painter.drawText({ 4, 4 }, text(), Color(0xff, 0xff, 0xff));
} }
void Label::onMouseMove(MouseEvent& event) 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) 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()); p.moveBy(m_widget.x(), m_widget.y());
byte fontWidth = 8; byte fontWidth = 8;
byte fontHeight = 7; byte fontHeight = 8;
auto* font = peanut8x7; auto* font = peanut8x8;
for (int row = 0; row < fontHeight; ++row) { for (int row = 0; row < fontHeight; ++row) {
int y = p.y() + row; int y = p.y() + row;
dword* bits = scanline(y); dword* bits = scanline(y);
for (unsigned i = 0; i < text.length(); ++i) { 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; int x = p.x() + i * fontWidth;
for (unsigned j = 0; j < fontWidth; ++j) { for (unsigned j = 0; j < fontWidth; ++j) {
char fc = fontCharacter[row * fontWidth + j]; char fc = fontCharacter[row * fontWidth + j];

View file

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