Utility/Window: Add new event system, based on signals

Old pooling-based system remains for now but is now deprecated


Former-commit-id: 9482b37fb19041399b7c26181319e1c00e7678fd [formerly 516aa322ca7f656e3e7c66010248b63068eec723] [formerly 6fdb81e8d59fef7d6e10e58898878d3e1a796188 [formerly c999fe23b149e14bdeeefed5436839fe44e1ebc3]]
Former-commit-id: fb35c9017bc2c7d15e31ccadb3f943ca2f0332df [formerly 005fa120540dc1a2d09e30c2de9611c4cb98aecf]
Former-commit-id: d51482384fffb5d1b339f3ce39df1a1ed6018228
This commit is contained in:
Lynix
2016-08-28 01:08:38 +02:00
parent 1d179c4f99
commit 326db9fa30
7 changed files with 181 additions and 38 deletions

View File

@@ -11,39 +11,24 @@ namespace Nz
/*!
* \class Nz::Window
*/
inline Window::Window() :
#if NAZARA_UTILITY_THREADED_WINDOW
m_impl(nullptr),
m_eventListener(true),
m_waitForEvent(false)
#else
m_impl(nullptr)
#if NAZARA_UTILITY_THREADED_WINDOW
m_waitForEvent(false),
#endif
m_eventPolling(false)
{
}
inline Window::Window(VideoMode mode, const String& title, UInt32 style) :
#if NAZARA_UTILITY_THREADED_WINDOW
m_impl(nullptr),
m_eventListener(true),
m_waitForEvent(false)
#else
m_impl(nullptr)
#endif
Window()
{
ErrorFlags flags(ErrorFlag_ThrowException, true);
Create(mode, title, style);
}
inline Window::Window(WindowHandle handle) :
#if NAZARA_UTILITY_THREADED_WINDOW
m_impl(nullptr),
m_eventListener(true),
m_waitForEvent(false)
#else
m_impl(nullptr)
#endif
Window()
{
ErrorFlags flags(ErrorFlag_ThrowException, true);
Create(handle);
@@ -59,7 +44,7 @@ namespace Nz
m_eventCondition(std::move(window.m_eventCondition)),
m_eventMutex(std::move(window.m_eventMutex)),
m_eventConditionMutex(std::move(window.m_eventConditionMutex)),
m_eventListener(window.m_eventListener),
m_eventPolling(window.m_eventPolling),
m_waitForEvent(window.m_waitForEvent),
#endif
m_closed(window.m_closed),
@@ -78,6 +63,21 @@ namespace Nz
m_closed = true; // The window will be closed at the next non-const IsOpen() call
}
inline void Window::EnableEventPolling(bool enable)
{
m_eventPolling = enable;
if (!m_eventPolling)
{
while (!m_events.empty())
m_events.pop();
}
}
inline EventHandler& Nz::Window::GetEventHandler()
{
return m_eventHandler;
}
inline bool Window::IsOpen(bool checkClosed)
{
if (!m_impl)
@@ -108,7 +108,11 @@ namespace Nz
m_eventMutex.Lock();
#endif
m_events.push(event);
if (m_eventPolling)
m_events.push(event);
m_eventHandler.Dispatch(event);
if (event.type == WindowEventType_Resized)
OnWindowResized();
@@ -132,10 +136,11 @@ namespace Nz
{
Destroy();
m_closed = window.m_closed;
m_impl = window.m_impl;
m_events = std::move(window.m_events);
m_ownsWindow = window.m_ownsWindow;
m_closed = window.m_closed;
m_eventPolling = window.m_eventPolling;
m_impl = window.m_impl;
m_events = std::move(window.m_events);
m_ownsWindow = window.m_ownsWindow;
window.m_impl = nullptr;
@@ -143,7 +148,6 @@ namespace Nz
m_eventCondition = std::move(window.m_eventCondition);
m_eventMutex = std::move(window.m_eventMutex);
m_eventConditionMutex = std::move(window.m_eventConditionMutex);
m_eventListener = window.m_eventListener;
m_waitForEvent = window.m_waitForEvent;
#endif