X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bigscreen%2Fccbs_bigscreen.cpp;h=40d5bad57b8aa3419ab2702b5010bc70a476e279;hb=40a55879c3ebcefc70e52ad2f573cf0da10d3d73;hp=05b32b89cec2b341630eeada909ee718bc0cd149;hpb=bbbf0f34d43aa3b6f43225fb6c2d45566a423ab1;p=ccbs diff --git a/bigscreen/ccbs_bigscreen.cpp b/bigscreen/ccbs_bigscreen.cpp index 05b32b8..40d5bad 100644 --- a/bigscreen/ccbs_bigscreen.cpp +++ b/bigscreen/ccbs_bigscreen.cpp @@ -26,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) @@ -137,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 @@ -146,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); } @@ -183,22 +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_theme(); 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"); @@ -209,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);