From 233b56b4ea7820602ee5cba8a717930348400bf6 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 4 Mar 2005 23:17:58 +0000 Subject: [PATCH] Mild refactoring. --- bigscreen/groupscreen.cpp | 89 ++++++++++++++++++++++++--------------- bigscreen/groupscreen.h | 3 ++ 2 files changed, 59 insertions(+), 33 deletions(-) diff --git a/bigscreen/groupscreen.cpp b/bigscreen/groupscreen.cpp index b7cb299..c5c9020 100644 --- a/bigscreen/groupscreen.cpp +++ b/bigscreen/groupscreen.cpp @@ -36,28 +36,8 @@ bool GroupScreen::check_invalidated() return needs_update; } -void GroupScreen::draw(unsigned char *buf, unsigned width, unsigned height) +void GroupScreen::draw_main_heading(std::vector &td) { - std::vector td; - - scores_changed.reset_flag(); - set_screen_size(width, height); - - /* - * We'll probably need some values from here later on (although not all), just fetch them - * all while we're at it. - */ - std::map song_scores, player_scores; - conn.perform(FetchMaxScoreForSongs(tournament, &song_scores)); - conn.perform(FetchMaxScoreForPlayers(tournament, round, &player_scores)); - - Group group; - conn.perform(FetchGroup(tournament, round, parallel, &group)); - gettimeofday(&last_updated, NULL); - - memset(buf, 0, width * height * 4); - - // main heading char heading[64]; if (num_machines == 1) { if (parallel == 0) { @@ -73,26 +53,34 @@ void GroupScreen::draw(unsigned char *buf, unsigned width, unsigned height) } } - { - unsigned width = my_draw_text(heading, NULL, 40.0); - my_draw_text_deferred(td, heading, 40.0, LOGICAL_SCREEN_WIDTH/2 - width/2, 60); - } - - // Find out how wide each column has to be. First try unlimited width (ie. - // long titles for everything); if that gets too long, try again with short - // titles for chosen songs. - unsigned colwidth[16], num_scores; + unsigned width = my_draw_text(heading, NULL, 40.0); + my_draw_text_deferred(td, heading, 40.0, LOGICAL_SCREEN_WIDTH/2 - width/2, 60); +} + +/* + * Find out how wide each column has to be. First try unlimited width (ie. + * long titles for everything); if that gets too long, try again with short + * titles for chosen songs. + */ +void GroupScreen::find_column_widths(const Group &group, std::vector &colwidth) +{ + unsigned num_scores; unsigned max_num_width = my_draw_text("8888", NULL, 22.0); unsigned sumcolwidth; + for (unsigned mode = 0; mode < 2; ++mode) { - for (unsigned i = 0; i < 16; ++i) - colwidth[i] = 0; - for (std::vector::const_iterator i = group.players.begin(); i != group.players.end(); ++i) { unsigned col = 1; + + if (colwidth.size() == 0) + colwidth.push_back(0); + colwidth[0] = std::max(colwidth[0], my_draw_text(i->nick, NULL, 18.0)); for (std::vector::const_iterator j = i->scores.begin(); j != i->scores.end(); ++j, ++col) { + if (colwidth.size() < col+1) + colwidth.push_back(0); + if (j->chosen) { colwidth[col] = std::max(colwidth[col], my_draw_text((mode == 0) ? j->song.title : j->song.short_title, NULL, 12.0) + max_num_width + 10); @@ -105,6 +93,11 @@ void GroupScreen::draw(unsigned char *buf, unsigned width, unsigned height) num_scores = group.players[0].scores.size(); + if (colwidth.size() < num_scores + 2) { + colwidth.push_back(0); + colwidth.push_back(0); + } + colwidth[num_scores + 1] = std::max(my_draw_text("Total", NULL, 12.0), max_num_width); colwidth[num_scores + 2] = my_draw_text("Rank", NULL, 12.0); @@ -137,6 +130,36 @@ void GroupScreen::draw(unsigned char *buf, unsigned width, unsigned height) colwidth[first_chosen_col] += 780 - sumcolwidth; } } +} + +void GroupScreen::draw(unsigned char *buf, unsigned width, unsigned height) +{ + std::vector td; + + scores_changed.reset_flag(); + set_screen_size(width, height); + + /* + * We'll probably need some values from here later on (although not all), just fetch them + * all while we're at it. + */ + std::map song_scores, player_scores; + conn.perform(FetchMaxScoreForSongs(tournament, &song_scores)); + conn.perform(FetchMaxScoreForPlayers(tournament, round, &player_scores)); + + Group group; + conn.perform(FetchGroup(tournament, round, parallel, &group)); + gettimeofday(&last_updated, NULL); + + memset(buf, 0, width * height * 4); + + std::vector colwidth; + + draw_main_heading(td); + find_column_widths(group, colwidth); + + unsigned max_num_width = my_draw_text("8888", NULL, 22.0); + unsigned num_scores = group.players[0].scores.size(); // make column headings from the first player's songs unsigned col = 1; diff --git a/bigscreen/groupscreen.h b/bigscreen/groupscreen.h index d017588..2acb032 100644 --- a/bigscreen/groupscreen.h +++ b/bigscreen/groupscreen.h @@ -21,6 +21,9 @@ private: struct timeval last_updated; std::vector last_text; + void draw_main_heading(std::vector &td); + void find_column_widths(const Group &group, std::vector &colwidth); + public: // the last two parameters should probably not be there, but fetched from GroupScreen itself GroupScreen(pqxx::connection &conn, unsigned tournament, unsigned round, unsigned parallel, unsigned machine, unsigned num_machines, unsigned players_per_machine); -- 2.39.2