diff --git a/include/Spectre/Display/Display.h b/include/Spectre/Display/Display.h index 0985945..073fd0d 100644 --- a/include/Spectre/Display/Display.h +++ b/include/Spectre/Display/Display.h @@ -4,6 +4,7 @@ #include "DisplayMode.h" #include "DisplayDescription.h" +#include #include #include #include @@ -71,6 +72,10 @@ protected : protected : enum Mode m_fmode; + // Cache window position when entering fullscreen + // So it can be restored when returning to window mode. + Vector2u m_cachePos; + DisplayDescription m_description; DisplayDescription m_cacheDesc; diff --git a/source/Display/Display.cpp b/source/Display/Display.cpp index 0691360..ac28096 100644 --- a/source/Display/Display.cpp +++ b/source/Display/Display.cpp @@ -106,6 +106,11 @@ void Display::setVideoMode(Mode mode) m_impl->exitFullscreen(); } + // Cache window position when entering fullscreen. + if (mode == FULLSCREEN || mode == WINDOWEDFULLSCREEN) { + m_cachePos = m_impl->getPosition(); + } + // True fullscreen if (mode == FULLSCREEN) { m_impl->enterFullscreen(m_description.mode); @@ -120,6 +125,9 @@ void Display::setVideoMode(Mode mode) else { // Set stored decoration. m_impl->setDecoration(m_description.decoration); + + // Restore position. + m_impl->setPosition(m_cachePos.x, m_cachePos.y); } m_fmode = mode;