mirror of
https://github.com/SFML/SFML.git
synced 2024-11-28 22:31:09 +08:00
Move fullscreen window bookkeeping to a lower level
This commit is contained in:
parent
51b8b44e14
commit
7556d1be78
@ -512,22 +512,6 @@ private:
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
void initialize();
|
void initialize();
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
/// \brief Get the fullscreen window
|
|
||||||
///
|
|
||||||
/// \return The fullscreen window or a null pointer if there is none
|
|
||||||
///
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
const WindowBase* getFullscreenWindow();
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
/// \brief Set a window as the fullscreen window
|
|
||||||
///
|
|
||||||
/// \param window Window to set as fullscreen window
|
|
||||||
///
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
void setFullscreenWindow(const WindowBase* window);
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Member data
|
// Member data
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
@ -63,10 +63,7 @@ Window::Window(WindowHandle handle, const ContextSettings& settings)
|
|||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
Window::~Window()
|
Window::~Window() = default;
|
||||||
{
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
@ -46,16 +46,6 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
// A nested named namespace is used here to allow unity builds of SFML.
|
|
||||||
namespace WindowsBaseImpl
|
|
||||||
{
|
|
||||||
const sf::WindowBase* fullscreenWindow = nullptr;
|
|
||||||
} // namespace WindowsBaseImpl
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
|
|
||||||
namespace sf
|
namespace sf
|
||||||
{
|
{
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@ -84,10 +74,7 @@ WindowBase::WindowBase(WindowHandle handle)
|
|||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
WindowBase::~WindowBase()
|
WindowBase::~WindowBase() = default;
|
||||||
{
|
|
||||||
WindowBase::close();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@ -132,10 +119,6 @@ void WindowBase::close()
|
|||||||
{
|
{
|
||||||
// Delete the window implementation
|
// Delete the window implementation
|
||||||
m_impl.reset();
|
m_impl.reset();
|
||||||
|
|
||||||
// Update the fullscreen window
|
|
||||||
if (this == getFullscreenWindow())
|
|
||||||
setFullscreenWindow(nullptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -385,7 +368,7 @@ void WindowBase::create(VideoMode mode, std::uint32_t& style, State& state)
|
|||||||
if (state == State::Fullscreen)
|
if (state == State::Fullscreen)
|
||||||
{
|
{
|
||||||
// Make sure there's not already a fullscreen window (only one is allowed)
|
// Make sure there's not already a fullscreen window (only one is allowed)
|
||||||
if (getFullscreenWindow())
|
if (m_impl->getFullscreenWindow())
|
||||||
{
|
{
|
||||||
err() << "Creating two fullscreen windows is not allowed, switching to windowed mode" << std::endl;
|
err() << "Creating two fullscreen windows is not allowed, switching to windowed mode" << std::endl;
|
||||||
state = State::Windowed;
|
state = State::Windowed;
|
||||||
@ -403,7 +386,7 @@ void WindowBase::create(VideoMode mode, std::uint32_t& style, State& state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update the fullscreen window
|
// Update the fullscreen window
|
||||||
setFullscreenWindow(this);
|
m_impl->setFullscreenWindow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -450,18 +433,4 @@ void WindowBase::initialize()
|
|||||||
onCreate();
|
onCreate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
const WindowBase* WindowBase::getFullscreenWindow()
|
|
||||||
{
|
|
||||||
return WindowsBaseImpl::fullscreenWindow;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
void WindowBase::setFullscreenWindow(const WindowBase* window)
|
|
||||||
{
|
|
||||||
WindowsBaseImpl::fullscreenWindow = window;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace sf
|
} // namespace sf
|
||||||
|
@ -90,9 +90,19 @@ using WindowImplType = sf::priv::WindowImplAndroid;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
// A nested named namespace is used here to allow unity builds of SFML.
|
||||||
|
// Yes, this is a rather weird namespace.
|
||||||
|
namespace WindowImplImpl
|
||||||
|
{
|
||||||
|
const sf::priv::WindowImpl* fullscreenWindow = nullptr;
|
||||||
|
} // namespace WindowImplImpl
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
namespace sf::priv
|
namespace sf::priv
|
||||||
{
|
{
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
struct WindowImpl::JoystickStatesImpl
|
struct WindowImpl::JoystickStatesImpl
|
||||||
{
|
{
|
||||||
@ -137,7 +147,11 @@ WindowImpl::WindowImpl() : m_joystickStatesImpl(std::make_unique<JoystickStatesI
|
|||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
WindowImpl::~WindowImpl() = default;
|
WindowImpl::~WindowImpl()
|
||||||
|
{
|
||||||
|
if (WindowImplImpl::fullscreenWindow == this)
|
||||||
|
WindowImplImpl::fullscreenWindow = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@ -348,4 +362,18 @@ bool WindowImpl::createVulkanSurface([[maybe_unused]] const VkInstance&
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
const WindowImpl* WindowImpl::getFullscreenWindow() const
|
||||||
|
{
|
||||||
|
return WindowImplImpl::fullscreenWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
void WindowImpl::setFullscreenWindow() const
|
||||||
|
{
|
||||||
|
WindowImplImpl::fullscreenWindow = this;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace sf::priv
|
} // namespace sf::priv
|
||||||
|
@ -305,6 +305,20 @@ public:
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
bool createVulkanSurface(const VkInstance& instance, VkSurfaceKHR& surface, const VkAllocationCallbacks* allocator) const;
|
bool createVulkanSurface(const VkInstance& instance, VkSurfaceKHR& surface, const VkAllocationCallbacks* allocator) const;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
/// \brief Get the fullscreen window
|
||||||
|
///
|
||||||
|
/// \return The fullscreen window or a null pointer if there is none
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
[[nodiscard]] const WindowImpl* getFullscreenWindow() const;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
/// \brief Set a window as the fullscreen window
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
void setFullscreenWindow() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
/// \brief Default constructor
|
/// \brief Default constructor
|
||||||
|
Loading…
Reference in New Issue
Block a user