]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Video.cc
finally fixed broken main loop
[chaz/yoink] / src / Moof / Video.cc
index 8dab056c645843d391e78868ce9b72a8e1c9b6dc..ba375e10318195cc770bca37552288d64bb6d816 100644 (file)
@@ -355,6 +355,11 @@ Video::Attributes::Attributes()
        }
        settings.get("icon", icon);
 
+       settings.get("fullscreen", fullscreen);
+       settings.get("resizable", resizable);
+       settings.get("showcursor", cursorVisible);
+       settings.get("grab", cursorGrab);
+
        std::vector<long> dimensions;
        settings.get("videomode", dimensions);
        if (dimensions.size() > 1)
@@ -362,12 +367,31 @@ Video::Attributes::Attributes()
                mode[0] = dimensions[0];
                mode[1] = dimensions[1];
        }
-       if (dimensions.size() > 2) mode[2] = dimensions[2];
+       else if (fullscreen)
+       {
+               SDL_Rect** modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE);
 
-       settings.get("fullscreen", fullscreen);
-       settings.get("resizable", resizable);
-       settings.get("showcursor", cursorVisible);
-       settings.get("grab", cursorGrab);
+               if (modes == (SDL_Rect**)0)
+               {
+                       Mf::logError("no native video mode");
+               }
+               else if (modes == (SDL_Rect**)-1)
+               {
+                       Mf::logWarning("any resolution allowed; choosing default 800x600");
+                       mode[0] = 800;
+                       mode[1] = 600;
+               }
+               else
+               {
+                       while (*(modes + 1)) ++modes; // skip to the last
+
+                       mode[0] = (*modes)->w;
+                       mode[1] = (*modes)->h;
+                       Mf::logInfo << "choosing native resolution "
+                                               << mode[0] << "x" << mode[1] << std::endl;
+               }
+       }
+       if (dimensions.size() > 2) mode[2] = dimensions[2];
 }
 
 
This page took 0.018523 seconds and 4 git commands to generate.