Added Window::Close (soft way to close window)

Former-commit-id: 9d47ed3ed38d62928f3cb6356fed07501b5e92d5
This commit is contained in:
Lynix 2013-03-08 01:20:26 +01:00
parent 9f780ef2bd
commit 39e54474dd
3 changed files with 274 additions and 65 deletions

View File

@ -164,12 +164,12 @@ int main()
} }
case nzEventType_Quit: // L'utilisateur a cliqué sur la croix, ou l'OS veut terminer notre programme case nzEventType_Quit: // L'utilisateur a cliqué sur la croix, ou l'OS veut terminer notre programme
window.Destroy(); // On ferme la fenêtre sans demander notre reste window.Close(); // On demande la fermeture de la fenêtre (Qui aura lieu au prochain tour de boucle)
break; break;
case nzEventType_KeyPressed: // Une touche a été pressée ! case nzEventType_KeyPressed: // Une touche a été pressée !
if (event.key.code == NzKeyboard::Key::Escape) if (event.key.code == NzKeyboard::Key::Escape)
window.Destroy(); window.Close();
break; break;
default: default:

View File

@ -42,6 +42,8 @@ class NAZARA_API NzWindow : NzNonCopyable
NzWindow(NzWindowHandle handle); NzWindow(NzWindowHandle handle);
virtual ~NzWindow(); virtual ~NzWindow();
void Close();
bool Create(NzVideoMode mode, const NzString& title, nzUInt32 style = nzWindowStyle_Default); bool Create(NzVideoMode mode, const NzString& title, nzUInt32 style = nzWindowStyle_Default);
bool Create(NzWindowHandle handle); bool Create(NzWindowHandle handle);
@ -60,6 +62,7 @@ class NAZARA_API NzWindow : NzNonCopyable
bool HasFocus() const; bool HasFocus() const;
bool IsMinimized() const; bool IsMinimized() const;
bool IsOpen(bool checkClosed = true);
bool IsOpen() const; bool IsOpen() const;
bool IsValid() const; bool IsValid() const;
bool IsVisible() const; bool IsVisible() const;
@ -106,6 +109,7 @@ class NAZARA_API NzWindow : NzNonCopyable
bool m_eventListener; bool m_eventListener;
bool m_waitForEvent; bool m_waitForEvent;
#endif #endif
bool m_closed;
bool m_ownsWindow; bool m_ownsWindow;
}; };

View File

@ -81,6 +81,11 @@ NzWindow::~NzWindow()
Destroy(); Destroy();
} }
void NzWindow::Close()
{
m_closed = true; // On retarde la fermeture jusqu'au prochain IsOpen
}
bool NzWindow::Create(NzVideoMode mode, const NzString& title, nzUInt32 style) bool NzWindow::Create(NzVideoMode mode, const NzString& title, nzUInt32 style)
{ {
// Si la fenêtre est déjà ouverte, nous conservons sa position // Si la fenêtre est déjà ouverte, nous conservons sa position
@ -123,6 +128,7 @@ bool NzWindow::Create(NzVideoMode mode, const NzString& title, nzUInt32 style)
return false; return false;
} }
m_closed = false;
m_ownsWindow = true; m_ownsWindow = true;
if (!OnWindowCreated()) if (!OnWindowCreated())
@ -162,6 +168,7 @@ bool NzWindow::Create(NzWindowHandle handle)
return false; return false;
} }
m_closed = false;
m_ownsWindow = false; m_ownsWindow = false;
if (!OnWindowCreated()) if (!OnWindowCreated())
@ -193,68 +200,133 @@ void NzWindow::Destroy()
void NzWindow::EnableKeyRepeat(bool enable) void NzWindow::EnableKeyRepeat(bool enable)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->EnableKeyRepeat(enable); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->EnableKeyRepeat(enable);
} }
void NzWindow::EnableSmoothScrolling(bool enable) void NzWindow::EnableSmoothScrolling(bool enable)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->EnableSmoothScrolling(enable); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->EnableSmoothScrolling(enable);
} }
NzWindowHandle NzWindow::GetHandle() const NzWindowHandle NzWindow::GetHandle() const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
return m_impl->GetHandle(); if (!m_impl)
else {
NazaraError("Window not created");
return static_cast<NzWindowHandle>(0); return static_cast<NzWindowHandle>(0);
}
#endif
return m_impl->GetHandle();
} }
unsigned int NzWindow::GetHeight() const unsigned int NzWindow::GetHeight() const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
return m_impl->GetHeight(); if (!m_impl)
else {
NazaraError("Window not created");
return 0; return 0;
}
#endif
return m_impl->GetHeight();
} }
NzVector2i NzWindow::GetPosition() const NzVector2i NzWindow::GetPosition() const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
return m_impl->GetPosition(); if (!m_impl)
else {
return NzVector2i(0); NazaraError("Window not created");
return NzVector2i::Zero();
}
#endif
return m_impl->GetPosition();
} }
NzVector2ui NzWindow::GetSize() const NzVector2ui NzWindow::GetSize() const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
return m_impl->GetSize(); if (!m_impl)
else {
return NzVector2ui(0U); NazaraError("Window not created");
return NzVector2ui::Zero();
}
#endif
return m_impl->GetSize();
} }
NzString NzWindow::GetTitle() const NzString NzWindow::GetTitle() const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
return m_impl->GetTitle(); if (!m_impl)
else {
NazaraError("Window not created");
return NzString(); return NzString();
}
#endif
return m_impl->GetTitle();
} }
unsigned int NzWindow::GetWidth() const unsigned int NzWindow::GetWidth() const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
return m_impl->GetWidth(); if (!m_impl)
else {
NazaraError("Window not created");
return 0; return 0;
}
#endif
return m_impl->GetWidth();
} }
bool NzWindow::HasFocus() const bool NzWindow::HasFocus() const
{
#if NAZARA_UTILITY_SAFE
if (!m_impl)
{
NazaraError("Window not created");
return false;
}
#endif
return m_impl->HasFocus();
}
bool NzWindow::IsOpen(bool checkClosed)
{ {
if (m_impl) if (m_impl)
return m_impl->HasFocus(); {
if (m_closed && checkClosed)
{
Destroy();
return false;
}
else
return true;
}
else else
return false; return false;
} }
@ -266,10 +338,15 @@ bool NzWindow::IsOpen() const
bool NzWindow::IsMinimized() const bool NzWindow::IsMinimized() const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
return m_impl->IsMinimized(); if (!m_impl)
else {
NazaraError("Window not created");
return false; return false;
}
#endif
return m_impl->IsMinimized();
} }
bool NzWindow::IsValid() const bool NzWindow::IsValid() const
@ -279,16 +356,26 @@ bool NzWindow::IsValid() const
bool NzWindow::IsVisible() const bool NzWindow::IsVisible() const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
return m_impl->IsVisible(); if (!m_impl)
else {
NazaraError("Window not created");
return false; return false;
}
#endif
return m_impl->IsVisible();
} }
bool NzWindow::PollEvent(NzEvent* event) bool NzWindow::PollEvent(NzEvent* event)
{ {
#if NAZARA_UTILITY_SAFE
if (!m_impl) if (!m_impl)
{
NazaraError("Window not created");
return false; return false;
}
#endif
#if NAZARA_UTILITY_THREADED_WINDOW #if NAZARA_UTILITY_THREADED_WINDOW
NzLockGuard lock(m_eventMutex); NzLockGuard lock(m_eventMutex);
@ -311,13 +398,26 @@ bool NzWindow::PollEvent(NzEvent* event)
void NzWindow::SetCursor(nzWindowCursor cursor) void NzWindow::SetCursor(nzWindowCursor cursor)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetCursor(cursor); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetCursor(cursor);
} }
void NzWindow::SetCursor(const NzCursor& cursor) void NzWindow::SetCursor(const NzCursor& cursor)
{ {
#if NAZARA_UTILITY_SAFE #if NAZARA_UTILITY_SAFE
if (!m_impl)
{
NazaraError("Window not created");
return;
}
if (!cursor.IsValid()) if (!cursor.IsValid())
{ {
NazaraError("Cursor is not valid"); NazaraError("Cursor is not valid");
@ -325,14 +425,18 @@ void NzWindow::SetCursor(const NzCursor& cursor)
} }
#endif #endif
if (m_impl) m_impl->SetCursor(cursor);
m_impl->SetCursor(cursor);
} }
void NzWindow::SetEventListener(bool listener) void NzWindow::SetEventListener(bool listener)
{ {
#if NAZARA_UTILITY_SAFE
if (!m_impl) if (!m_impl)
{
NazaraError("Window not created");
return; return;
}
#endif
#if NAZARA_UTILITY_THREADED_WINDOW #if NAZARA_UTILITY_THREADED_WINDOW
m_impl->SetEventListener(listener); m_impl->SetEventListener(listener);
@ -357,13 +461,26 @@ void NzWindow::SetEventListener(bool listener)
void NzWindow::SetFocus() void NzWindow::SetFocus()
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetFocus(); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetFocus();
} }
void NzWindow::SetIcon(const NzIcon& icon) void NzWindow::SetIcon(const NzIcon& icon)
{ {
#if NAZARA_UTILITY_SAFE #if NAZARA_UTILITY_SAFE
if (!m_impl)
{
NazaraError("Window not created");
return;
}
if (!icon.IsValid()) if (!icon.IsValid())
{ {
NazaraError("Icon is not valid"); NazaraError("Icon is not valid");
@ -371,80 +488,161 @@ void NzWindow::SetIcon(const NzIcon& icon)
} }
#endif #endif
if (m_impl) m_impl->SetIcon(icon);
m_impl->SetIcon(icon);
} }
void NzWindow::SetMaximumSize(const NzVector2i& maxSize) void NzWindow::SetMaximumSize(const NzVector2i& maxSize)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetMaximumSize(maxSize.x, maxSize.y); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetMaximumSize(maxSize.x, maxSize.y);
} }
void NzWindow::SetMaximumSize(int width, int height) void NzWindow::SetMaximumSize(int width, int height)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetMaximumSize(width, height); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetMaximumSize(width, height);
} }
void NzWindow::SetMinimumSize(const NzVector2i& minSize) void NzWindow::SetMinimumSize(const NzVector2i& minSize)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetMinimumSize(minSize.x, minSize.y); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetMinimumSize(minSize.x, minSize.y);
} }
void NzWindow::SetMinimumSize(int width, int height) void NzWindow::SetMinimumSize(int width, int height)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetMinimumSize(width, height); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetMinimumSize(width, height);
} }
void NzWindow::SetPosition(const NzVector2i& position) void NzWindow::SetPosition(const NzVector2i& position)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetPosition(position.x, position.y); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetPosition(position.x, position.y);
} }
void NzWindow::SetPosition(int x, int y) void NzWindow::SetPosition(int x, int y)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetPosition(x, y); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetPosition(x, y);
} }
void NzWindow::SetSize(const NzVector2i& size) void NzWindow::SetSize(const NzVector2i& size)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetSize(size.x, size.y); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetSize(size.x, size.y);
} }
void NzWindow::SetSize(unsigned int width, unsigned int height) void NzWindow::SetSize(unsigned int width, unsigned int height)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetSize(width, height); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetSize(width, height);
} }
void NzWindow::SetStayOnTop(bool stayOnTop) void NzWindow::SetStayOnTop(bool stayOnTop)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetStayOnTop(stayOnTop); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetStayOnTop(stayOnTop);
} }
void NzWindow::SetTitle(const NzString& title) void NzWindow::SetTitle(const NzString& title)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetTitle(title); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetTitle(title);
} }
void NzWindow::SetVisible(bool visible) void NzWindow::SetVisible(bool visible)
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->SetVisible(visible); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->SetVisible(visible);
} }
bool NzWindow::WaitEvent(NzEvent* event) bool NzWindow::WaitEvent(NzEvent* event)
{ {
#if NAZARA_UTILITY_SAFE
if (!m_impl) if (!m_impl)
{
NazaraError("Window not created");
return false; return false;
}
#endif
#if NAZARA_UTILITY_THREADED_WINDOW #if NAZARA_UTILITY_THREADED_WINDOW
NzLockGuard lock(m_eventMutex); NzLockGuard lock(m_eventMutex);
@ -495,8 +693,15 @@ void NzWindow::OnWindowDestroy()
void NzWindow::IgnoreNextMouseEvent(int mouseX, int mouseY) const void NzWindow::IgnoreNextMouseEvent(int mouseX, int mouseY) const
{ {
if (m_impl) #if NAZARA_UTILITY_SAFE
m_impl->IgnoreNextMouseEvent(mouseX, mouseY); if (!m_impl)
{
NazaraError("Window not created");
return;
}
#endif
m_impl->IgnoreNextMouseEvent(mouseX, mouseY);
} }
void NzWindow::PushEvent(const NzEvent& event) void NzWindow::PushEvent(const NzEvent& event)