X-Git-Url: https://git.sesse.net/?p=ccbs;a=blobdiff_plain;f=bigscreen%2Fccbs_bigscreen.cpp;h=d28a56fcef2a7707642803ecc9b9e2b2178fead9;hp=435d06aa7ff86f2cf23f6414d71113e3efa66f37;hb=f0955c93464993b82d087f48150d363c6c57054f;hpb=76f4b6a8faa67f10246f6fcaf963b3f78e4835fc diff --git a/bigscreen/ccbs_bigscreen.cpp b/bigscreen/ccbs_bigscreen.cpp index 435d06a..d28a56f 100644 --- a/bigscreen/ccbs_bigscreen.cpp +++ b/bigscreen/ccbs_bigscreen.cpp @@ -11,10 +11,13 @@ #include "fetch_group.h" #include "fonts.h" #include "groupscreen.h" +#include "splitscreen.h" +#include "rotatescreen.h" Tournament active_tournament; std::vector active_groups; std::vector screens; +SplitScreen *mainscreen = NULL; unsigned char framebuf[800 * 600 * 4], screenbuf[800 * 600 * 4]; void init(pqxx::connection &conn) @@ -24,6 +27,8 @@ void init(pqxx::connection &conn) } screens.erase(screens.begin(), screens.end()); + delete mainscreen; + conn.perform(FetchCurrentTournament(&active_tournament)); conn.perform(FetchListOfActiveGroups(&active_groups)); @@ -36,29 +41,38 @@ void init(pqxx::connection &conn) std::fprintf(stderr, "tourn: %u round: %u parallel: %u\n", i->tournament, i->round, i->parallel); - screens.push_back(new GroupScreen(conn, i->tournament, i->round, i->parallel)); + // memory leaks here? + RotateScreen *rs = new RotateScreen(); + screens.push_back(rs); + rs->add_screen(new GroupScreen(conn, i->tournament, i->round, i->parallel)); } } + + // hack + screens.push_back(NULL); + screens.push_back(NULL); + screens.push_back(NULL); + screens.push_back(NULL); + + mainscreen = new SplitScreen(screens[0], screens[1], screens[2], screens[3]); } void main_loop(pqxx::connection &conn) { if (active_tournament.id == -1) { // No active tournament, sleep a second or so and exit - sleep(1); + conn.await_notification(1, 0); return; } - memset(framebuf, 0, 800*600*4); - - if (screens[0]->check_invalidated()) { - screens[0]->draw(screenbuf); + if (mainscreen->check_invalidated()) { + mainscreen->draw(framebuf); + ptc_update(framebuf); + conn.await_notification(0, 10000); + } else { + ptc_update(framebuf); + conn.await_notification(0, 200000); } - - memcpy(framebuf, screenbuf, 800*600*4); - - ptc_update(framebuf); - sleep(1); } int main(int argc, char **argv)