From: Ingo Ruhnke Date: Thu, 8 May 2008 21:20:15 +0000 (+0000) Subject: Changed the logic of aspect ratio, aspect_width/height now give projection size X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=b59165e13c680ef17f4a150c57739d8bf2c09d91;p=supertux.git Changed the logic of aspect ratio, aspect_width/height now give projection size Added new command line option: -g WIDTHxHEIGHT:PROJECT_WIDTHxPROJECT_HEIGHT, so for big monitors try: ./supertux2 -g 1280x1024:1280x1024 SVN-Revision: 5445 --- diff --git a/src/gameconfig.cpp b/src/gameconfig.cpp index 5236ba626..6a92e35ac 100644 --- a/src/gameconfig.cpp +++ b/src/gameconfig.cpp @@ -48,8 +48,8 @@ Config::Config() screenwidth = 800; screenheight = 600; - aspect_width = 4; // autodetect - aspect_height = 3; // autodetect + aspect_width = 800; + aspect_height = 600; enable_script_debugger = false; diff --git a/src/main.cpp b/src/main.cpp index c78e7fbab..15c06a708 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -289,10 +289,10 @@ static bool parse_commandline(int argc, char** argv) config->use_fullscreen = true; } else if(arg == "--default" || arg == "-d") { config->use_fullscreen = false; - config->aspect_width = -1; - config->aspect_height = -1; - config->screenwidth = 800; - config->screenheight = 600; + config->aspect_width = 800; + config->aspect_height = 600; + config->screenwidth = 800; + config->screenheight = 600; } else if(arg == "--window" || arg == "-w") { config->use_fullscreen = false; } else if(arg == "--geometry" || arg == "-g") { @@ -300,19 +300,37 @@ static bool parse_commandline(int argc, char** argv) print_usage(argv[0]); throw std::runtime_error("Need to specify a parameter for geometry switch"); } - if(sscanf(argv[++i], "%dx%d", &config->screenwidth, &config->screenheight) - != 2) { - print_usage(argv[0]); - throw std::runtime_error("Invalid geometry spec, should be WIDTHxHEIGHT"); - } + i += 1; + if (sscanf(argv[i], "%dx%d:%dx%d", + &config->screenwidth, &config->screenheight, + &config->aspect_width, &config->aspect_height) != 4 && + sscanf(argv[i], "%dx%d", &config->screenwidth, &config->screenheight) != 2) + { + print_usage(argv[0]); + throw std::runtime_error("Invalid geometry spec, should be WIDTHxHEIGHT"); + } } else if(arg == "--aspect" || arg == "-a") { if(i+1 >= argc) { print_usage(argv[0]); throw std::runtime_error("Need to specify a parameter for aspect switch"); } else { - if(sscanf(argv[++i], "%d:%d", &config->aspect_width, &config->aspect_height) != 2) { + int aspect_width = 4; + int aspect_height = 3; + if(sscanf(argv[++i], "%d:%d", &aspect_width, &aspect_height) != 2) { print_usage(argv[0]); throw std::runtime_error("Invalid aspect spec, should be WIDTH:HEIGHT"); + } else { + float aspect_ratio = static_cast(config->aspect_width) / + static_cast(config->aspect_height); + + // use aspect ratio to calculate logical resolution + if (aspect_ratio > 1) { + config->aspect_width = static_cast (600 * aspect_ratio + 0.5); + config->aspect_height = 600; + } else { + config->aspect_width = 600; + config->aspect_height = static_cast (600 * 1/aspect_ratio + 0.5); + } } } } else if(arg == "--show-fps") { @@ -395,17 +413,8 @@ void init_video() } #endif - double aspect_ratio = static_cast(config->aspect_width) / - static_cast(config->aspect_height); - - // use aspect ratio to calculate logical resolution - if (aspect_ratio > 1) { - SCREEN_WIDTH = static_cast (600 * aspect_ratio + 0.5); - SCREEN_HEIGHT = 600; - } else { - SCREEN_WIDTH = 600; - SCREEN_HEIGHT = static_cast (600 * 1/aspect_ratio + 0.5); - } + SCREEN_WIDTH = config->aspect_width; + SCREEN_HEIGHT = config->aspect_height; context_pointer->init_renderer(); screen = SDL_GetVideoSurface(); @@ -431,7 +440,9 @@ void init_video() SDL_ShowCursor(0); - log_info << (config->use_fullscreen?"fullscreen ":"window ") << SCREEN_WIDTH << "x" << SCREEN_HEIGHT << " Ratio: " << aspect_ratio << "\n"; + log_info << (config->use_fullscreen?"fullscreen ":"window ") + << " Window: " << config->screenwidth << "x" << config->screenheight + << " Area: " << config->aspect_width << "x" << config->aspect_height << std::endl; } static void init_audio()