-/*******************************************************************************
-
- Copyright (c) 2009, Charles McGarvey
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*******************************************************************************/
+/*] Copyright (c) 2009-2010, Charles McGarvey [**************************
+**] All rights reserved.
+*
+* vi:ts=4 sw=4 tw=75
+*
+* Distributable under the terms and conditions of the 2-clause BSD license;
+* see the file COPYING for a complete text of the license.
+*
+**************************************************************************/
#ifndef _MOOF_VIDEO_HH_
#define _MOOF_VIDEO_HH_
#include <string>
#include <boost/shared_ptr.hpp>
-
#include <SDL/SDL.h>
+#include <Moof/Backend.hh>
+
namespace Mf {
+class Settings;
+
class Video;
typedef boost::shared_ptr<Video> VideoP;
-struct Video
+class Video
{
+public:
+
struct Attributes
{
// OpenGL attributes
- long colorBuffer[4]; // rgba
- long frameBuffer;
+ int colorBuffer[4]; // rgba
+ int frameBuffer;
bool doubleBuffer;
- long depthBuffer;
- long stencilBuffer;
- long accumBuffer[4]; // rgba
+ int depthBuffer;
+ int stencilBuffer;
+ int accumBuffer[4]; // rgba
bool stereo;
- long multisampleBuffers;
- long multisampleSamples;
+ int multisampleBuffers;
+ int multisampleSamples;
bool swapControl;
- bool hardwareonly;
+ bool hardwareOnly;
// Window attributes
std::string caption;
std::string icon;
- long mode[3]; // width, height, bpp
+ int mode[3]; // width, height, bpp
bool fullscreen;
bool resizable;
bool cursorVisible;
bool cursorGrab;
Attributes();
- };
-
-
-private:
-
- void init(const Attributes& attribs);
+ Attributes(const Settings& settings);
- void recreateContext();
- void setOpenGLAttributes();
+ private:
- void setIcon();
+ void init();
- SDL_Surface* context_;
- unsigned flags_;
- Attributes attribs_;
+ Backend mBackend;
+ };
-public:
- static VideoP alloc(const std::string& caption, const std::string& icon)
+ static VideoP alloc(const Attributes& attribs)
{
- return VideoP(new Video(caption, icon));
+ return VideoP(new Video(attribs));
}
Video();
explicit Video(const Attributes& attribs);
- explicit Video(const std::string& caption, const std::string& icon);
~Video();
- void setVideoMode(const long mode[3]);
- Attributes getAttributes() const;
+ void setVideoMode(const int mode[3]);
+ Attributes attributes() const;
void resize(int width, int height);
bool iconify();
void setCaption(const std::string& caption);
std::string getCaption() const;
+ const std::string& getIcon() const;
+
void setFull(bool full);
void toggleFull();
bool isFull() const;
void toggleCursorGrab();
bool isCursorGrab() const;
- void makeActive();
void swap();
+ int getWidth() const;
+ int getHeight() const;
- struct Exception : public std::runtime_error
+ void makeCurrent() const;
+
+ static Video* current()
{
- explicit Exception(const std::string& what_arg) :
- std::runtime_error(what_arg) {}
- };
+ return gCurrentVideo;
+ }
+
+private:
+
+ void init();
+
+ void recreateContext();
+ void setOpenGLAttributes();
+
+ void setIcon();
+
+ // TODO this implementation should be hidden
+
+ SDL_Surface* mContext;
+ unsigned mFlags;
+ Attributes mAttribs;
+
+ static Video* gCurrentVideo;
};
#endif // _MOOF_VIDEO_HH_
-/** vim: set ts=4 sw=4 tw=80: *************************************************/
-