#else
datadir = APPDATADIR;
#endif
- datadir += "/";
- datadir += application;
if(!PHYSFS_addToSearchPath(datadir.c_str(), 1)) {
log_warning << "Couldn't add '" << datadir << "' to physfs searchpath: " << PHYSFS_getLastError() << std::endl;
}
" -w, --window Run in window mode\n"
" -g, --geometry WIDTHxHEIGHT Run SuperTux in given resolution\n"
" -a, --aspect WIDTH:HEIGHT Run SuperTux with given aspect ratio\n"
+ " -d, --default Reset video settings to default values\n"
" --disable-sfx Disable sound effects\n"
" --disable-music Disable music\n"
" --help Show this help message\n"
return true;
} else if(arg == "--fullscreen" || arg == "-f") {
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;
} else if(arg == "--window" || arg == "-w") {
config->use_fullscreen = false;
} else if(arg == "--geometry" || arg == "-g") {
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");
- }
- if(strcasecmp(argv[i+1], "auto") == 0) {
- i++;
- config->aspect_ratio = -1;
} else {
- int aspect_width, aspect_height;
+ 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<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);
+ }
}
- config->aspect_ratio = static_cast<double>(aspect_width) /
- static_cast<double>(aspect_height);
}
} else if(arg == "--show-fps") {
config->show_fps = true;
desktop_height = info->current_h;
}
#endif
-
- double aspect_ratio = config->aspect_ratio;
-
- // try to guess aspect ratio of monitor if needed
- if (aspect_ratio <= 0) {
- if(config->use_fullscreen && desktop_width > 0) {
- aspect_ratio = static_cast<double>(desktop_width) / static_cast<double>(desktop_height);
- } else {
- aspect_ratio = 4.0 / 3.0;
- }
- }
-
- // use aspect ratio to calculate logical resolution
- if (aspect_ratio > 1) {
- SCREEN_WIDTH = static_cast<int> (600 * aspect_ratio + 0.5);
- SCREEN_HEIGHT = 600;
- } else {
- SCREEN_WIDTH = 600;
- SCREEN_HEIGHT = static_cast<int> (600 * 1/aspect_ratio + 0.5);
- }
+
+ SCREEN_WIDTH = config->aspect_width;
+ SCREEN_HEIGHT = config->aspect_height;
context_pointer->init_renderer();
screen = SDL_GetVideoSurface();
SDL_WM_SetCaption(PACKAGE_NAME " " PACKAGE_VERSION, 0);
// set icon
- SDL_Surface* icon = IMG_Load_RW(
- get_physfs_SDLRWops("images/engine/icons/supertux.xpm"), true);
+ #ifdef MACOSX
+ const char* icon_fname = "images/engine/icons/supertux-256x256.png";
+ #else
+ const char* icon_fname = "images/engine/icons/supertux.xpm";
+ #endif
+ SDL_Surface* icon = IMG_Load_RW(get_physfs_SDLRWops(icon_fname), true);
if(icon != 0) {
SDL_WM_SetIcon(icon, 0);
SDL_FreeSurface(icon);
}
#ifdef DEBUG
else {
- log_warning << "Couldn't find icon 'images/engine/icons/supertux.xpm'" << std::endl;
+ log_warning << "Couldn't find icon '" << icon_fname << "'" << std::endl;
}
#endif
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()