X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bigscreen%2Fccbs_bigscreen.cpp;h=40d5bad57b8aa3419ab2702b5010bc70a476e279;hb=40a55879c3ebcefc70e52ad2f573cf0da10d3d73;hp=ce65d043a349e7d74b3c8e8a3f0688fa6b2cd14e;hpb=545e13ca5c5ba25ada43b4aac22d2e4f01a20aa6;p=ccbs diff --git a/bigscreen/ccbs_bigscreen.cpp b/bigscreen/ccbs_bigscreen.cpp index ce65d04..40d5bad 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" @@ -25,7 +26,7 @@ Tournament active_tournament; std::vector active_groups; std::vector screens; GenericScreen *mainscreen = NULL; -unsigned char framebuf[SCREEN_WIDTH * SCREEN_HEIGHT * 4], screenbuf[SCREEN_WIDTH * SCREEN_HEIGHT * 4]; +unsigned char *framebuf, *screenbuf; bool quit_requested = false; void init(pqxx::connection &conn) @@ -136,7 +137,7 @@ void init(pqxx::connection &conn) #endif } -void main_loop(pqxx::connection &conn) +void main_loop(pqxx::connection &conn, unsigned screen_width, unsigned screen_height) { if (active_tournament.id == -1) { // No active tournament, sleep a second or so and exit @@ -145,17 +146,17 @@ void main_loop(pqxx::connection &conn) } if (mainscreen && mainscreen->check_invalidated()) { - if (screen->pitch == SCREEN_WIDTH * 4) { + if (screen->pitch == screen_width * 4) { SDL_LockSurface(screen); - mainscreen->draw((unsigned char *)screen->pixels, SCREEN_WIDTH, SCREEN_HEIGHT); + mainscreen->draw((unsigned char *)screen->pixels, screen_width, screen_height); SDL_UnlockSurface(screen); } else { - mainscreen->draw(framebuf, SCREEN_WIDTH, SCREEN_HEIGHT); + mainscreen->draw(framebuf, screen_width, screen_height); SDL_LockSurface(screen); - for (unsigned y = 0; y < SCREEN_HEIGHT; ++y) { - unsigned char *sptr = framebuf + y * SCREEN_WIDTH * 4; + for (unsigned y = 0; y < screen_height; ++y) { + unsigned char *sptr = framebuf + y * screen_width * 4; unsigned char *dptr = (unsigned char *)screen->pixels + y * screen->pitch; - memcpy(dptr, sptr, SCREEN_WIDTH * 4); + memcpy(dptr, sptr, screen_width * 4); } SDL_UnlockSurface(screen); } @@ -182,21 +183,37 @@ void handle_events() int main(int argc, char **argv) { + init_theme(); + unsigned screen_width = atoi(get_theme_config("screen", "width").c_str()); + unsigned screen_height = atoi(get_theme_config("screen", "height").c_str()); + bool use_lcd = atoi(get_theme_config("screen", "fullscreen").c_str()); + SDL_Init(SDL_INIT_VIDEO); -#if USE_FULLSCREEN - screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_DOUBLEBUF | SDL_FULLSCREEN); - SDL_ShowCursor(SDL_DISABLE); -#else - screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_DOUBLEBUF); -#endif + if (use_lcd) { + screen = SDL_SetVideoMode(screen_width, screen_height, 32, SDL_DOUBLEBUF | SDL_FULLSCREEN); + SDL_ShowCursor(SDL_DISABLE); + } else { + screen = SDL_SetVideoMode(screen_width, screen_height, 32, SDL_DOUBLEBUF); + } if (screen == NULL) { fprintf(stderr, "Video initialization failed: %s\n", SDL_GetError()); exit(1); } + + framebuf = new unsigned char[screen_width * screen_height * 4]; + screenbuf = new unsigned char[screen_width * screen_height * 4]; try { init_freetype(); - pqxx::connection conn("dbname=ccbs host=www.positivegaming.com user=ccbs password=GeT|>>B_"); + set_screen_size(screen_width, screen_height); + + char connstr[1024]; + snprintf(connstr, sizeof(connstr), "dbname=%s host=%s user=%s password=%s", + get_theme_config("db", "dbname").c_str(), + get_theme_config("db", "host").c_str(), + get_theme_config("db", "user").c_str(), + get_theme_config("db", "password").c_str()); + pqxx::connection conn(connstr); FlagTrigger tournament_changed(conn, "active_tournament"); FlagTrigger rounds_changed(conn, "active_groups"); @@ -207,7 +224,7 @@ int main(int argc, char **argv) rounds_changed.reset_flag(); init(conn); do { - main_loop(conn); + main_loop(conn, screen_width, screen_height); conn.get_notifs(); handle_events(); } while (!tournament_changed.get_flag() && !rounds_changed.get_flag() && !quit_requested);