diff --git a/source/Display/Display.cpp b/source/Display/Display.cpp index 24ced50..0691360 100644 --- a/source/Display/Display.cpp +++ b/source/Display/Display.cpp @@ -98,28 +98,29 @@ void Display::setSize(unsigned int width, unsigned int height) void Display::setVideoMode(Mode mode) { - DisplayDescription desc; - if (m_fmode == mode) { return; } - if (mode == FULLSCREEN || mode == WINDOWEDFULLSCREEN) { - - // True fullscreen - if (mode == FULLSCREEN) { - desc.mode = m_description.mode; - } else { - desc.mode = DisplayMode::getDesktopMode(); - m_cacheDesc = m_description; - } - - desc.decoration = DisplayDecorate::None; - } else { - desc = m_cacheDesc; + if (mode != FULLSCREEN) { + m_impl->exitFullscreen(); } - create(desc); + // True fullscreen + if (mode == FULLSCREEN) { + m_impl->enterFullscreen(m_description.mode); + } + // Windowed fullscreen. + else if (mode == WINDOWEDFULLSCREEN) { + DisplayMode desktop = DisplayMode::getDesktopMode(); + m_impl->setDecoration(DisplayDecorate::None); + m_impl->setSize(desktop.width, desktop.height); + } + // Window mode. + else { + // Set stored decoration. + m_impl->setDecoration(m_description.decoration); + } m_fmode = mode; }