config->use_fullscreen = true;
} else if(arg == "--default" || arg == "-d") {
config->use_fullscreen = false;
- config->aspect_width = 800;
- config->aspect_height = 600;
- config->screenwidth = 800;
- config->screenheight = 600;
+
+ config->window_width = 800;
+ config->window_height = 600;
+
+ config->fullscreen_width = 800;
+ config->fullscreen_height = 600;
+
+ config->aspect_width = 4;
+ config->aspect_height = 3;
+
} else if(arg == "--window" || arg == "-w") {
config->use_fullscreen = false;
} else if(arg == "--geometry" || arg == "-g") {
- if(i+1 >= argc) {
- print_usage(argv[0]);
- throw std::runtime_error("Need to specify a parameter for geometry switch");
- }
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)
+ if(i >= argc)
{
print_usage(argv[0]);
- throw std::runtime_error("Invalid geometry spec, should be WIDTHxHEIGHT");
+ throw std::runtime_error("Need to specify a size (WIDTHxHEIGHT) for geometry argument");
+ }
+ else
+ {
+ int width, height;
+ if (sscanf(argv[i], "%dx%d", &width, &height) != 2)
+ {
+ print_usage(argv[0]);
+ throw std::runtime_error("Invalid geometry spec, should be WIDTHxHEIGHT");
+ }
+ else
+ {
+ config->window_width = width;
+ config->window_height = height;
+
+ config->fullscreen_width = width;
+ config->fullscreen_height = height;
+ }
}
} 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 {
- int aspect_width = 4;
- int aspect_height = 3;
- if(sscanf(argv[++i], "%d:%d", &aspect_width, &aspect_height) != 2) {
+ i += 1;
+ if(i >= argc)
+ {
print_usage(argv[0]);
- throw std::runtime_error("Invalid aspect spec, should be WIDTH:HEIGHT");
- } else {
- float aspect_ratio = static_cast<double>(config->aspect_width) /
- static_cast<double>(config->aspect_height);
-
- // use aspect ratio to calculate logical resolution
- if (aspect_ratio > 1) {
- config->aspect_width = static_cast<int> (600 * aspect_ratio + 0.5);
- config->aspect_height = 600;
- } else {
- config->aspect_width = 600;
- config->aspect_height = static_cast<int> (600 * 1/aspect_ratio + 0.5);
- }
+ throw std::runtime_error("Need to specify a ratio (WIDTH:HEIGHT) for aspect ratio");
+ }
+ else
+ {
+ int aspect_width = 0;
+ int aspect_height = 0;
+ if (strcmp(argv[i], "auto") == 0)
+ {
+ aspect_width = 0;
+ aspect_height = 0;
+ }
+ else 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 or auto");
+ }
+ else
+ {
+ float aspect_ratio = static_cast<double>(config->aspect_width) /
+ static_cast<double>(config->aspect_height);
+
+ // use aspect ratio to calculate logical resolution
+ if (aspect_ratio > 1) {
+ config->aspect_width = static_cast<int> (600 * aspect_ratio + 0.5);
+ config->aspect_height = 600;
+ } else {
+ config->aspect_width = 600;
+ config->aspect_height = static_cast<int> (600 * 1/aspect_ratio + 0.5);
+ }
+ }
}
- }
} else if(arg == "--show-fps") {
config->show_fps = true;
} else if(arg == "--no-show-fps") {
void init_video()
{
- static int desktop_width = 0;
- static int desktop_height = 0;
-
-/* unfortunately only newer SDLs have these infos */
-#if SDL_MAJOR_VERSION > 1 || SDL_MINOR_VERSION > 2 || (SDL_MINOR_VERSION == 2 && SDL_PATCHLEVEL >= 10)
- /* find which resolution the user normally uses */
- if(desktop_width == 0) {
- const SDL_VideoInfo *info = SDL_GetVideoInfo();
- desktop_width = info->current_w;
- desktop_height = info->current_h;
- }
-#endif
-
- SCREEN_WIDTH = config->aspect_width;
- SCREEN_HEIGHT = config->aspect_height;
+ // FIXME: Add something here
+ SCREEN_WIDTH = 800;
+ SCREEN_HEIGHT = 600;
context_pointer->init_renderer();
screen = SDL_GetVideoSurface();
SDL_WM_SetCaption(PACKAGE_NAME " " PACKAGE_VERSION, 0);
// set icon
- #ifdef MACOSX
+#ifdef MACOSX
const char* icon_fname = "images/engine/icons/supertux-256x256.png";
- #else
+#else
const char* icon_fname = "images/engine/icons/supertux.xpm";
- #endif
+#endif
SDL_Surface* icon = IMG_Load_RW(get_physfs_SDLRWops(icon_fname), true);
if(icon != 0) {
SDL_WM_SetIcon(icon, 0);
SDL_ShowCursor(0);
log_info << (config->use_fullscreen?"fullscreen ":"window ")
- << " Window: " << config->screenwidth << "x" << config->screenheight
- << " Area: " << config->aspect_width << "x" << config->aspect_height << std::endl;
+ << " Window: " << config->window_width << "x" << config->window_height
+ << " Fullscreen: " << config->fullscreen_width << "x" << config->fullscreen_height
+ << " Area: " << config->aspect_width << "x" << config->aspect_height << std::endl;
}
static void init_audio()
timelog("controller");
main_controller = new JoystickKeyboardController();
+
timelog("config");
init_config();
+
timelog("addons");
AddonManager::get_instance().load_addons();
+
timelog("tinygettext");
init_tinygettext();
+
timelog("commandline");
if(parse_commandline(argc, argv))
return 0;
+
timelog("audio");
init_audio();
+
timelog("video");
DrawingContext context;
context_pointer = &context;
init_video();
+
Console::instance->init_graphics();
+
timelog("scripting");
Scripting::init_squirrel(config->enable_script_debugger);
+
timelog("resources");
load_shared();
+
timelog(0);
main_loop = new MainLoop();