summaryrefslogtreecommitdiff
path: root/src/SFML/Window/Window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SFML/Window/Window.cpp')
-rw-r--r--src/SFML/Window/Window.cpp261
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