From b99a635489016a50867699ffb587c66b3c39e939 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 19 Feb 2005 19:06:11 +0000 Subject: [PATCH] Clean up the my_draw_text() interface considerably, and let us set sizes per-call. --- bigscreen/fonts.cpp | 15 +++++++-------- bigscreen/fonts.h | 2 +- bigscreen/groupscreen.cpp | 20 ++++++++++---------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/bigscreen/fonts.cpp b/bigscreen/fonts.cpp index 3e958c7..e65e356 100644 --- a/bigscreen/fonts.cpp +++ b/bigscreen/fonts.cpp @@ -14,16 +14,12 @@ void init_freetype() // Georgia if (FT_New_Face(library, "/usr/share/fonts/truetype/msttcorefonts/Georgia.ttf", 0, &face)) throw std::runtime_error("Face opening failed."); - if (FT_Set_Char_Size(face, 0, 12 * 64, 96, 96)) - throw std::runtime_error("Size set failed."); fonts.push_back(face); // FreeSerif if (FT_New_Face(library, "/usr/share/fonts/truetype/freefont/FreeSerif.ttf", 0, &face)) { std::fprintf(stderr, "Warning: Couldn't open FreeSerif, some glyphs might not be available\n"); } else { - if (FT_Set_Char_Size(face, 0, 12 * 64, 96, 96)) - throw std::runtime_error("Size set failed."); fonts.push_back(face); } @@ -31,16 +27,19 @@ void init_freetype() if (FT_New_Face(library, "arialuni.ttf", 0, &face)) { std::fprintf(stderr, "Warning: Couldn't open Arial Unicode MS, some glyphs might not be available\n"); } else { - if (FT_Set_Char_Size(face, 0, 12 * 64, 96, 96)) - throw std::runtime_error("Size set failed."); fonts.push_back(face); } } -unsigned my_draw_text(const widestring &str, unsigned char *buf, int xpos, int ypos, bool real_render, int r, int g, int b) +unsigned my_draw_text(const widestring &str, unsigned char *buf, double size, int xpos, int ypos, int r, int g, int b) { FT_GlyphSlot slot; int x = 0; + + for (std::vector::const_iterator i = fonts.begin(); i != fonts.end(); ++i) { + if (FT_Set_Char_Size(*i, 0, unsigned(size * 64.0), 96, 96)) + throw std::runtime_error("Couldn't set font size"); + } for (widestring::const_iterator i = str.begin(); i != str.end(); ++i) { int glyph_index; @@ -59,7 +58,7 @@ unsigned my_draw_text(const widestring &str, unsigned char *buf, int xpos, int y continue; } - if (real_render) { + if (buf != NULL) { int y; FT_Bitmap *bm = &(slot->bitmap); for (y = 0; y < bm->rows; y++) { diff --git a/bigscreen/fonts.h b/bigscreen/fonts.h index 5377ad0..fe43c58 100644 --- a/bigscreen/fonts.h +++ b/bigscreen/fonts.h @@ -7,6 +7,6 @@ #include "widestring.h" void init_freetype(); -unsigned my_draw_text(const widestring &str, unsigned char *buf, int xpos, int ypos, bool real_render, int r, int g, int b); +unsigned my_draw_text(const widestring &str, unsigned char *buf, double size, int xpos = 0, int ypos = 0, int r = 255, int g = 255, int b = 255); #endif /* !defined(_FONTS_H) */ diff --git a/bigscreen/groupscreen.cpp b/bigscreen/groupscreen.cpp index 596905b..008379b 100644 --- a/bigscreen/groupscreen.cpp +++ b/bigscreen/groupscreen.cpp @@ -33,18 +33,18 @@ void GroupScreen::draw(unsigned char *buf) for (unsigned i = 0; i < 16; ++i) width[i] = 0; - unsigned max_num_width = my_draw_text("88888", NULL, 0, 0, false, 0, 0, 0); + unsigned max_num_width = my_draw_text("88888", NULL, 12.0); for (std::vector::const_iterator i = group.players.begin(); i != group.players.end(); ++i) { - width[0] = std::max(width[0], my_draw_text(i->nick, NULL, 0, 0, false, 0, 0, 0)); + width[0] = std::max(width[0], my_draw_text(i->nick, NULL, 12.0)); unsigned col = 1; for (std::vector::const_iterator j = i->scores.begin(); j != i->scores.end(); ++j, ++col) { if (j->chosen) { - width[col] = std::max(width[col], my_draw_text(j->song.title, NULL, 0, 0, false, 0, 0, 0) + + width[col] = std::max(width[col], my_draw_text(j->song.title, NULL, 12.0) + max_num_width + 10); } else { - width[col] = std::max(width[col], my_draw_text(j->song.title, NULL, 0, 0, false, 0, 0, 0)); + width[col] = std::max(width[col], my_draw_text(j->song.title, NULL, 12.0)); width[col] = std::max(width[col], max_num_width); } } @@ -54,14 +54,14 @@ void GroupScreen::draw(unsigned char *buf) unsigned col = 1, x = 40 + width[0]; for (std::vector::const_iterator i = group.players[0].scores.begin(); i != group.players[0].scores.end(); ++i, ++col) { if (!i->chosen) - my_draw_text(i->song.title, buf, x, 30, true, 255, 255, 255); + my_draw_text(i->song.title, buf, 12.0, x, 30); x += width[col] + 20; } // show all the players and the scores unsigned y = 50; for (std::vector::const_iterator i = group.players.begin(); i != group.players.end(); ++i) { - my_draw_text(i->nick, buf, 20, y, true, 255, 255, 255); + my_draw_text(i->nick, buf, 12.0, 20, y); unsigned x = 40 + width[0]; @@ -70,15 +70,15 @@ void GroupScreen::draw(unsigned char *buf) char text[16]; sprintf(text, "%u", j->score); - unsigned this_width = my_draw_text(text, buf, 0, 0, false, 0, 0, 0); + unsigned this_width = my_draw_text(text, NULL, 12.0); if (j->chosen) { if (j->score != -1) { - my_draw_text(text, buf, x + max_num_width - this_width, y, true, 255, 255, 255); + my_draw_text(text, buf, 12.0, x + max_num_width - this_width, y); } - my_draw_text(j->song.title, buf, x + max_num_width + 10, y, true, 255, 255, 255); + my_draw_text(j->song.title, buf, 12.0, x + max_num_width + 10, y); } else { if (j->score != -1) { - my_draw_text(text, buf, x + width[col] / 2 - this_width / 2, y, true, 255, 255, 255); + my_draw_text(text, buf, 12.0, x + width[col] / 2 - this_width / 2, y); } } x += width[col] + 20; -- 2.39.2