From 47647e430209e70479579de3725b193baf26630a Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 19 Feb 2005 18:16:49 +0000 Subject: [PATCH] Add column headings and fix widths. --- bigscreen/fonts.cpp | 2 +- bigscreen/fonts.h | 2 +- bigscreen/groupscreen.cpp | 47 +++++++++++++++++++++++++++++++-------- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/bigscreen/fonts.cpp b/bigscreen/fonts.cpp index b7a4cbd..3e958c7 100644 --- a/bigscreen/fonts.cpp +++ b/bigscreen/fonts.cpp @@ -37,7 +37,7 @@ void init_freetype() } } -int 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, int xpos, int ypos, bool real_render, int r, int g, int b) { FT_GlyphSlot slot; int x = 0; diff --git a/bigscreen/fonts.h b/bigscreen/fonts.h index 533e4ff..5377ad0 100644 --- a/bigscreen/fonts.h +++ b/bigscreen/fonts.h @@ -7,6 +7,6 @@ #include "widestring.h" void init_freetype(); -int 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, int xpos, int ypos, bool real_render, int r, int g, int b); #endif /* !defined(_FONTS_H) */ diff --git a/bigscreen/groupscreen.cpp b/bigscreen/groupscreen.cpp index ed574ca..50d63b2 100644 --- a/bigscreen/groupscreen.cpp +++ b/bigscreen/groupscreen.cpp @@ -1,3 +1,5 @@ +#include + #include "groupscreen.h" #include "fetch_group.h" #include "fonts.h" @@ -26,22 +28,49 @@ void GroupScreen::draw(unsigned char *buf) memset(buf, 0, 800 * 600 * 4); - // just as a test, show all the players and the scores (no headings) + // find out how wide each column has to be + unsigned width[16]; + for (unsigned i = 0; i < 16; ++i) + width[i] = 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)); + + 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) + + my_draw_text("8888", NULL, 0, 0, false, 0, 0, 0) + 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("8888", NULL, 0, 0, false, 0, 0, 0)); + } + } + } + + // make column headings from the first player's songs + 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) { + my_draw_text(i->song.title, buf, x, 30, true, 255, 255, 255); + 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); - unsigned x = 90; - for (std::vector::const_iterator j = i->scores.begin(); j != i->scores.end(); ++j) { - if (j->score == -1) { - continue; - } - + unsigned x = 40 + width[0]; + + unsigned col = 1; + for (std::vector::const_iterator j = i->scores.begin(); j != i->scores.end(); ++j, ++col) { char text[16]; sprintf(text, "%u", j->score); - my_draw_text(text, buf, x, y, true, 255, 255, 255); - x += 60; + if (j->score != -1) { + my_draw_text(text, buf, x, y, true, 255, 255, 255); + } + x += width[col] + 20; } y += 20; -- 2.39.2