]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Video.cc
included manager class
[chaz/yoink] / src / Moof / Video.cc
index ba375e10318195cc770bca37552288d64bb6d816..e0716091fcc7a4e4ce1d07a48328d9a1a77a66e3 100644 (file)
@@ -27,7 +27,6 @@
 *******************************************************************************/
 
 #include "Dispatch.hh"
-#include "Engine.hh"
 #include "Error.hh"
 #include "Image.hh"
 #include "Log.hh"
@@ -40,42 +39,41 @@ namespace Mf {
 
 Video::Video()
 {
-       init(mAttribs);
+       init();
 }
 
-Video::Video(const Attributes& attribs)
+Video::Video(const Attributes& attribs) :
+       mAttribs(attribs)
 {
-       init(attribs);
+       init();
 }
 
 Video::Video(const std::string& caption, const std::string& icon)
 {
-       if (mAttribs.caption == "Untitled")
-       {
-               mAttribs.caption = caption;
-       }
-       if (mAttribs.icon == "")
-       {
-               mAttribs.icon = icon;
-       }
+       mAttribs.caption = caption;
+       mAttribs.icon = icon;
 
-       init(mAttribs);
+       init();
 }
 
-void Video::init(const Attributes& attribs)
+void Video::init()
 {
+       Error error = Backend::getError();
+       if (error) error.raise();
+
        mContext = 0;
        mFlags = 0;
-       mAttribs = attribs;
 
-       setFull(attribs.fullscreen);
-       setResizable(attribs.resizable);
+       setFull(mAttribs.fullscreen);
+       setResizable(mAttribs.resizable);
        setOpenGLAttributes();
-       setCaption(attribs.caption);
+       setCaption(mAttribs.caption);
        setIcon();
-       setCursorVisible(attribs.cursorVisible);
-       setCursorGrab(attribs.cursorGrab);
-       setVideoMode(attribs.mode);
+       setCursorVisible(mAttribs.cursorVisible);
+       setCursorGrab(mAttribs.cursorGrab);
+       setVideoMode(mAttribs.mode);
+
+       video = this;
 }
 
 void Video::recreateContext()
@@ -103,13 +101,15 @@ void Video::setOpenGLAttributes()
        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, mAttribs.multisampleBuffers);
        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, mAttribs.multisampleSamples);
        SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL,       mAttribs.swapControl);
-       SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, mAttribs.hardwareonly);
+       SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, mAttribs.hardwareOnly);
 }
 
 
 Video::~Video()
 {
        SDL_FreeSurface(mContext);
+
+       if (video == this) video = 0;
 }
 
 
@@ -128,16 +128,12 @@ void Video::setVideoMode(const long mode[3])
                        mAttribs.mode[1] = mode[1];
                        mAttribs.mode[2] = mode[2];
 
-#if defined(_WIN32) || defined(__WIN32__)
-                       // on win32, creating a new context via SDL_SetVideoMode will wipe
-                       // out the GL state, so we gotta notify everyone to reload their
-                       // state after the change
-                       Engine::getInstance().dispatch("video.newcontext");
-
+#if !defined(linux) && !defined(__linux) && !defined(__linux__)
                        logInfo("video context recreated");
+                       core.dispatch("video.newcontext");
 #endif
                }
-               else throw Error(Error::SDL_VIDEOMODE);
+               else Error(Error::SDL_VIDEOMODE).raise();
        }
 }
 
@@ -296,7 +292,7 @@ int Video::getHeight() const
 
 Video::Attributes::Attributes()
 {
-       // Set some sane GL and window defaults (see SDL_video.c:217)
+       // set some sane GL and window defaults (see SDL_video.c:217)
        colorBuffer[0] = 3;
        colorBuffer[1] = 3;
        colorBuffer[2] = 2;
@@ -313,7 +309,7 @@ Video::Attributes::Attributes()
        multisampleBuffers = 0;
        multisampleSamples = 0;
        swapControl = false;
-       hardwareonly = false;
+       hardwareOnly = false;
        mode[0] = 640;
        mode[1] = 480;
        mode[2] = 0;
@@ -322,8 +318,6 @@ Video::Attributes::Attributes()
        cursorVisible = true;
        cursorGrab = false;
 
-       Settings& settings = Settings::getInstance();
-
        std::vector<long> colors;
        settings.get("colorbuffers", colors);
        if (colors.size() > 0) colorBuffer[0] = colors[0];
@@ -347,7 +341,7 @@ Video::Attributes::Attributes()
        settings.get("multiesamplebuffers", multisampleBuffers);
        settings.get("multiesamplesamples", multisampleSamples);
        settings.get("swapcontrol", swapControl);
-       settings.get("hardwareonly", hardwareonly);
+       settings.get("hardwareonly", hardwareOnly);
 
        if (!settings.get("caption", caption))
        {
@@ -367,7 +361,7 @@ Video::Attributes::Attributes()
                mode[0] = dimensions[0];
                mode[1] = dimensions[1];
        }
-       else if (fullscreen)
+       else if (fullscreen && Backend::isInitialized())
        {
                SDL_Rect** modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE);
 
@@ -383,8 +377,6 @@ Video::Attributes::Attributes()
                }
                else
                {
-                       while (*(modes + 1)) ++modes; // skip to the last
-
                        mode[0] = (*modes)->w;
                        mode[1] = (*modes)->h;
                        Mf::logInfo << "choosing native resolution "
@@ -395,6 +387,9 @@ Video::Attributes::Attributes()
 }
 
 
+Video* video = 0;
+
+
 } // namespace Mf
 
 /** vim: set ts=4 sw=4 tw=80: *************************************************/
This page took 0.025866 seconds and 4 git commands to generate.