Made screen-fill vs black-border an option
authorIngo Ruhnke <grumbel@gmx.de>
Wed, 21 May 2008 13:29:33 +0000 (13:29 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Wed, 21 May 2008 13:29:33 +0000 (13:29 +0000)
SVN-Revision: 5495

src/gameconfig.cpp
src/gameconfig.hpp
src/options_menu.cpp
src/video/gl_renderer.cpp

index 728b2b8..94e7f9f 100644 (file)
@@ -53,6 +53,7 @@ Config::Config()
   fullscreen_height = 600;
 
   magnification = 1.0f;
+  fill_screen = false;
 
   aspect_width  = 4;
   aspect_height = 3;
@@ -96,6 +97,8 @@ Config::load()
 
     config_video_lisp->get("aspect_width",  aspect_width);
     config_video_lisp->get("aspect_height", aspect_height);
+
+    config_video_lisp->get("fill_screen", fill_screen);
   }
 
   const lisp::Lisp* config_audio_lisp = config_lisp->get_lisp("audio");
@@ -140,6 +143,8 @@ Config::save()
   writer.write_int("aspect_width",  aspect_width);
   writer.write_int("aspect_height", aspect_height);
 
+  writer.write_bool("fill_screen", fill_screen);
+
   writer.end_list("video");
 
   writer.start_list("audio");
index bdf8725..8456cc4 100644 (file)
@@ -49,6 +49,7 @@ public:
   int aspect_height;
   
   float magnification;
+  bool  fill_screen;
 
   bool use_fullscreen;
   VideoSystem video;
index 9bd765b..2e97094 100644 (file)
@@ -36,6 +36,7 @@ enum OptionsMenuIDs {
   MNID_FULLSCREEN_RESOLUTION,
   MNID_MAGINFICATION,
   MNID_ASPECTRATIO,
+  MNID_FILL_SCREEN,
   MNID_PROFILES,
   MNID_SOUND,
   MNID_MUSIC
@@ -134,7 +135,8 @@ OptionsMenu::OptionsMenu()
   MenuItem* maginfication = add_string_select(MNID_MAGINFICATION, _("Maginfication"));
   maginfication->set_help(_("Change the magnification of the game area"));
 
-  // These values go from screen:640/projection:1600 to screen:1600/projection:640
+  // These values go from screen:640/projection:1600 to
+  // screen:1600/projection:640 (i.e. 640, 800, 1024, 1280, 1600)
   maginfication->list.push_back("40%");
   maginfication->list.push_back("50%");
   maginfication->list.push_back("62.5%");
@@ -145,6 +147,11 @@ OptionsMenu::OptionsMenu()
   maginfication->list.push_back("200%");
   maginfication->list.push_back("250%");
 
+  add_toggle(MNID_FILL_SCREEN, _("Fill Screen"), config->fill_screen)
+    ->set_help(_("With small magnification you have the choice between either "
+                 "adding black borders around the screen or limiting it to the "
+                 "smallest possible magnification, so that it still fills the screen"));
+
   SDL_Rect** modes = SDL_ListModes(NULL, SDL_FULLSCREEN|SDL_OPENGL);
 
   if (modes == (SDL_Rect **)0) 
@@ -228,6 +235,13 @@ void
 OptionsMenu::menu_action(MenuItem* item)
 {
   switch (item->id) {
+    case MNID_FILL_SCREEN:
+      config->fill_screen = options_menu->is_toggled(MNID_FILL_SCREEN);
+      Renderer::instance()->apply_config();
+      Menu::recalc_pos();
+      config->save();
+      break;
+
     case MNID_ASPECTRATIO:
       { 
         if(sscanf(item->list[item->selected].c_str(), "%d:%d", &config->aspect_width, &config->aspect_height) == 2)
index 2d92834..7704af5 100644 (file)
@@ -605,7 +605,7 @@ Renderer::apply_config()
   int max_width  = 1600; // FIXME: Maybe 1920 is ok too
   int max_height = 1200;
 
-  if (0)
+  if (config->fill_screen)
     {
       // This scales SCREEN_WIDTH/SCREEN_HEIGHT so that they never excede
       // max_width/max_height