X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bigscreen%2Fccbs_bigscreen.cpp;h=05b32b89cec2b341630eeada909ee718bc0cd149;hb=cad5aff5a3a21bb8c95d8a265e93687234f46a43;hp=129206d4ec14d8db9aeda58434d947d044f16a99;hpb=570d0810ca5aefb7295d7cb5f1d81387d31c7420;p=ccbs diff --git a/bigscreen/ccbs_bigscreen.cpp b/bigscreen/ccbs_bigscreen.cpp index 129206d..05b32b8 100644 --- a/bigscreen/ccbs_bigscreen.cpp +++ b/bigscreen/ccbs_bigscreen.cpp @@ -13,6 +13,7 @@ #include "fetch_group.h" #include "fetch_auxilliary_screens.h" #include "fonts.h" +#include "theme.h" #include "groupscreen.h" #include "top10scorescreen.h" #include "top5chosenscreen.h" @@ -26,6 +27,7 @@ std::vector active_groups; std::vector screens; GenericScreen *mainscreen = NULL; unsigned char framebuf[SCREEN_WIDTH * SCREEN_HEIGHT * 4], screenbuf[SCREEN_WIDTH * SCREEN_HEIGHT * 4]; +bool quit_requested = false; void init(pqxx::connection &conn) { @@ -39,8 +41,6 @@ void init(pqxx::connection &conn) } screens.erase(screens.begin(), screens.end()); - bool show_only_main_screen = (USE_SPLITSCREEN && screens.size() == 1); - #if !USE_SPLITSCREEN RotateScreen *rs = new RotateScreen(); mainscreen = rs; @@ -69,6 +69,8 @@ void init(pqxx::connection &conn) } } + bool show_only_main_screen = (USE_SPLITSCREEN && screens.size() == 1); + /* * Show auxilliary screens except if we have too many already, * or if we're in the special split-screen end-tournament mode, @@ -166,6 +168,19 @@ void main_loop(pqxx::connection &conn) } } +void handle_events() +{ + SDL_Event event; + while (SDL_PollEvent(&event)) { + if (event.type == SDL_QUIT) { + quit_requested = true; + } + if (event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_ESCAPE) { + quit_requested = true; + } + } +} + int main(int argc, char **argv) { SDL_Init(SDL_INIT_VIDEO); @@ -181,6 +196,7 @@ int main(int argc, char **argv) } try { + init_theme(); init_freetype(); pqxx::connection conn("dbname=ccbs host=www.positivegaming.com user=ccbs password=GeT|>>B_"); FlagTrigger tournament_changed(conn, "active_tournament"); @@ -188,15 +204,21 @@ int main(int argc, char **argv) // when active_tournament or active_rounds is changed, we destroy everything and start from scratch // (at least currently) - for ( ;; ) { + while (!quit_requested) { tournament_changed.reset_flag(); rounds_changed.reset_flag(); init(conn); do { main_loop(conn); conn.get_notifs(); - } while (!tournament_changed.get_flag() && !rounds_changed.get_flag()); - std::fprintf(stderr, "active_tournament or active_groups changed, resetting...\n"); + handle_events(); + } while (!tournament_changed.get_flag() && !rounds_changed.get_flag() && !quit_requested); + + if (quit_requested) { + fprintf(stderr, "Quitting...\n"); + } else { + fprintf(stderr, "active_tournament or active_groups changed, resetting...\n"); + } } } catch (const std::exception &e) { std::fprintf(stderr, "Exception: %s\n", e.what());