diff options
Diffstat (limited to 'src/SFML/Window/Window.cpp')
-rw-r--r-- | src/SFML/Window/Window.cpp | 261 |
1 files changed, 29 insertions, 232 deletions
diff --git a/src/SFML/Window/Window.cpp b/src/SFML/Window/Window.cpp index b1ed548..802247b 100644 --- a/src/SFML/Window/Window.cpp +++ b/src/SFML/Window/Window.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2023 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. @@ -32,20 +32,12 @@ #include <SFML/System/Err.hpp> -namespace -{ - const sf::Window* fullscreenWindow = NULL; -} - - namespace sf { //////////////////////////////////////////////////////////// Window::Window() : -m_impl (NULL), m_context (NULL), -m_frameTimeLimit(Time::Zero), -m_size (0, 0) +m_frameTimeLimit(Time::Zero) { } @@ -53,23 +45,19 @@ m_size (0, 0) //////////////////////////////////////////////////////////// Window::Window(VideoMode mode, const String& title, Uint32 style, const ContextSettings& settings) : -m_impl (NULL), m_context (NULL), -m_frameTimeLimit(Time::Zero), -m_size (0, 0) +m_frameTimeLimit(Time::Zero) { - create(mode, title, style, settings); + Window::create(mode, title, style, settings); } //////////////////////////////////////////////////////////// Window::Window(WindowHandle handle, const ContextSettings& settings) : -m_impl (NULL), m_context (NULL), -m_frameTimeLimit(Time::Zero), -m_size (0, 0) +m_frameTimeLimit(Time::Zero) { - create(handle, settings); + Window::create(handle, settings); } @@ -81,6 +69,13 @@ Window::~Window() //////////////////////////////////////////////////////////// +void Window::create(VideoMode mode, const String& title, Uint32 style) +{ + Window::create(mode, title, style, ContextSettings()); +} + + +//////////////////////////////////////////////////////////// void Window::create(VideoMode mode, const String& title, Uint32 style, const ContextSettings& settings) { // Destroy the previous window implementation @@ -90,10 +85,10 @@ void Window::create(VideoMode mode, const String& title, Uint32 style, const Con if (style & Style::Fullscreen) { // Make sure there's not already a fullscreen window (only one is allowed) - if (fullscreenWindow) + if (getFullscreenWindow()) { err() << "Creating two fullscreen windows is not allowed, switching to windowed mode" << std::endl; - style &= ~Style::Fullscreen; + style &= ~static_cast<Uint32>(Style::Fullscreen); } else { @@ -105,14 +100,14 @@ void Window::create(VideoMode mode, const String& title, Uint32 style, const Con } // Update the fullscreen window - fullscreenWindow = this; + setFullscreenWindow(this); } } // Check validity of style according to the underlying platform #if defined(SFML_SYSTEM_IOS) || defined(SFML_SYSTEM_ANDROID) if (style & Style::Fullscreen) - style &= ~Style::Titlebar; + style &= ~static_cast<Uint32>(Style::Titlebar); else style |= Style::Titlebar; #else @@ -132,13 +127,20 @@ void Window::create(VideoMode mode, const String& title, Uint32 style, const Con //////////////////////////////////////////////////////////// +void Window::create(WindowHandle handle) +{ + Window::create(handle, ContextSettings()); +} + + +//////////////////////////////////////////////////////////// void Window::create(WindowHandle handle, const ContextSettings& settings) { // Destroy the previous window implementation close(); // Recreate the window implementation - m_impl = priv::WindowImpl::create(handle); + WindowBase::create(handle); // Recreate the context m_context = priv::GlContext::create(settings, m_impl, VideoMode::getDesktopMode().bitsPerPixel); @@ -155,20 +157,8 @@ void Window::close() delete m_context; m_context = NULL; - // Delete the window implementation - delete m_impl; - m_impl = NULL; - - // Update the fullscreen window - if (this == fullscreenWindow) - fullscreenWindow = NULL; -} - - -//////////////////////////////////////////////////////////// -bool Window::isOpen() const -{ - return m_impl != NULL; + // Close the base window + WindowBase::close(); } @@ -182,97 +172,6 @@ const ContextSettings& Window::getSettings() const //////////////////////////////////////////////////////////// -bool Window::pollEvent(Event& event) -{ - if (m_impl && m_impl->popEvent(event, false)) - { - return filterEvent(event); - } - else - { - return false; - } -} - - -//////////////////////////////////////////////////////////// -bool Window::waitEvent(Event& event) -{ - if (m_impl && m_impl->popEvent(event, true)) - { - return filterEvent(event); - } - else - { - return false; - } -} - - -//////////////////////////////////////////////////////////// -Vector2i Window::getPosition() const -{ - return m_impl ? m_impl->getPosition() : Vector2i(); -} - - -//////////////////////////////////////////////////////////// -void Window::setPosition(const Vector2i& position) -{ - if (m_impl) - m_impl->setPosition(position); -} - - -//////////////////////////////////////////////////////////// -Vector2u Window::getSize() const -{ - return m_size; -} - - -//////////////////////////////////////////////////////////// -void Window::setSize(const Vector2u& size) -{ - if (m_impl) - { - m_impl->setSize(size); - - // Cache the new size - m_size.x = size.x; - m_size.y = size.y; - - // Notify the derived class - onResize(); - } -} - - -//////////////////////////////////////////////////////////// -void Window::setTitle(const String& title) -{ - if (m_impl) - m_impl->setTitle(title); -} - - -//////////////////////////////////////////////////////////// -void Window::setIcon(unsigned int width, unsigned int height, const Uint8* pixels) -{ - if (m_impl) - m_impl->setIcon(width, height, pixels); -} - - -//////////////////////////////////////////////////////////// -void Window::setVisible(bool visible) -{ - if (m_impl) - m_impl->setVisible(visible); -} - - -//////////////////////////////////////////////////////////// void Window::setVerticalSyncEnabled(bool enabled) { if (setActive()) @@ -281,56 +180,16 @@ void Window::setVerticalSyncEnabled(bool enabled) //////////////////////////////////////////////////////////// -void Window::setMouseCursorVisible(bool visible) -{ - if (m_impl) - m_impl->setMouseCursorVisible(visible); -} - - -//////////////////////////////////////////////////////////// -void Window::setMouseCursorGrabbed(bool grabbed) -{ - if (m_impl) - m_impl->setMouseCursorGrabbed(grabbed); -} - - -//////////////////////////////////////////////////////////// -void Window::setMouseCursor(const Cursor& cursor) -{ - if (m_impl) - m_impl->setMouseCursor(cursor.getImpl()); -} - - -//////////////////////////////////////////////////////////// -void Window::setKeyRepeatEnabled(bool enabled) -{ - if (m_impl) - m_impl->setKeyRepeatEnabled(enabled); -} - - -//////////////////////////////////////////////////////////// void Window::setFramerateLimit(unsigned int limit) { if (limit > 0) - m_frameTimeLimit = seconds(1.f / limit); + m_frameTimeLimit = seconds(1.f / static_cast<float>(limit)); else m_frameTimeLimit = Time::Zero; } //////////////////////////////////////////////////////////// -void Window::setJoystickThreshold(float threshold) -{ - if (m_impl) - m_impl->setJoystickThreshold(threshold); -} - - -//////////////////////////////////////////////////////////// bool Window::setActive(bool active) const { if (m_context) @@ -353,22 +212,6 @@ bool Window::setActive(bool active) const //////////////////////////////////////////////////////////// -void Window::requestFocus() -{ - if (m_impl) - m_impl->requestFocus(); -} - - -//////////////////////////////////////////////////////////// -bool Window::hasFocus() const -{ - return m_impl && m_impl->hasFocus(); -} - - -//////////////////////////////////////////////////////////// - void Window::display() { // Display the backbuffer on screen @@ -385,65 +228,19 @@ void Window::display() //////////////////////////////////////////////////////////// -WindowHandle Window::getSystemHandle() const -{ - return m_impl ? m_impl->getSystemHandle() : 0; -} - - -//////////////////////////////////////////////////////////// -void Window::onCreate() -{ - // Nothing by default -} - - -//////////////////////////////////////////////////////////// -void Window::onResize() -{ - // Nothing by default -} - - -//////////////////////////////////////////////////////////// -bool Window::filterEvent(const Event& event) -{ - // Notify resize events to the derived class - if (event.type == Event::Resized) - { - // Cache the new size - m_size.x = event.size.width; - m_size.y = event.size.height; - - // Notify the derived class - onResize(); - } - - return true; -} - - -//////////////////////////////////////////////////////////// void Window::initialize() { // Setup default behaviors (to get a consistent behavior across different implementations) - setVisible(true); - setMouseCursorVisible(true); setVerticalSyncEnabled(false); - setKeyRepeatEnabled(true); setFramerateLimit(0); - // Get and cache the initial size of the window - m_size = m_impl->getSize(); - // Reset frame time m_clock.restart(); // Activate the window setActive(); - // Notify the derived class - onCreate(); + WindowBase::initialize(); } } // namespace sf |