]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/window.cpp
Include the matching header first in .cpp files
[libs/gui.git] / source / graphics / window.cpp
index d116b691c14bcbf11592bca91d9edcb647eca792..dde92491ee1a1ce8d3035ec7d3bbeaf2dc0ba3ca 100644 (file)
@@ -1,7 +1,7 @@
-#include <msp/core/application.h>
-#include "display.h"
 #include "window.h"
 #include "window_private.h"
+#include <msp/core/application.h>
+#include "display.h"
 
 using namespace std;
 
@@ -15,6 +15,8 @@ WindowOptions::WindowOptions():
        width(640),
        height(480),
        fullscreen(false),
+       fullscreen_monitor(0),
+       fullscreen_exclusive(true),
        resizable(false)
 { }
 
@@ -45,6 +47,9 @@ void Window::init()
        moving = false;
        priv = new Private;
 
+       if(options.fullscreen && !options.fullscreen_monitor)
+               options.fullscreen_monitor = display.get_desktop_mode().monitor;
+
        platform_init();
 
        display.add_window(*this);
@@ -75,18 +80,31 @@ void Window::reconfigure(const WindowOptions &opts)
        if(opts.x!=options.x || opts.y!=options.y)
                moving = true;
 
+       options = opts;
+
        if(visible)
        {
-               if(opts.fullscreen)
-                       display.set_mode(VideoMode(opts.width, opts.height));
+               if(options.fullscreen)
+                       set_fullscreen_mode();
                else if(fullscreen_changed)
                        display.restore_mode();
        }
 
-       options = opts;
        platform_reconfigure(fullscreen_changed);
 }
 
+void Window::set_fullscreen_mode()
+{
+       if(!options.fullscreen_monitor)
+               options.fullscreen_monitor = display.get_desktop_mode().monitor;
+       VideoMode mode(options.width, options.height);
+       mode.monitor = options.fullscreen_monitor;
+       mode.rotation = mode.monitor->desktop_settings.rotation;
+       if(mode.rotation==ROTATE_LEFT || mode.rotation==ROTATE_RIGHT)
+               swap(mode.width, mode.height);
+       display.set_mode(mode, options.fullscreen_exclusive);
+}
+
 void Window::set_keyboard_autorepeat(bool r)
 {
        kbd_autorepeat = r;
@@ -105,7 +123,7 @@ void Window::show()
 
        if(options.fullscreen)
        {
-               display.set_mode(VideoMode(options.width, options.height), true);
+               set_fullscreen_mode();
                warp_pointer(options.width/2, options.height/2);
        }
 }