From 290d9f27b5faad273c579c8a804f1aefc1abeb73 Mon Sep 17 00:00:00 2001 From: Ilya Orlov Date: Sat, 14 Jul 2018 00:23:32 +0400 Subject: [PATCH] xrEngine: refactor event loop --- src/xrEngine/device.cpp | 45 +++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/src/xrEngine/device.cpp b/src/xrEngine/device.cpp index 3954b93a448..044c6f58892 100644 --- a/src/xrEngine/device.cpp +++ b/src/xrEngine/device.cpp @@ -331,11 +331,11 @@ void CRenderDevice::message_loop() return; } - SDL_PumpEvents(); - SDL_Event event; + SDL_PumpEvents(); SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_FIRSTEVENT, SDL_SYSWMEVENT); + while (SDL_QUIT != event.type) { if (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_SYSWMEVENT)) @@ -347,49 +347,42 @@ void CRenderDevice::message_loop() { case SDL_WINDOWEVENT_MOVED: SDL_Log("Window %d moved to %d,%d", event.window.windowID, event.window.data1, event.window.data2); - continue; + break; case SDL_WINDOWEVENT_SIZE_CHANGED: - SDL_Log("Window %d resized to %d,%d", event.window.windowID, event.window.data1, event.window.data2); - continue; - case SDL_WINDOWEVENT_CLOSE: - event.type = SDL_QUIT; + SDL_Log( + "Window %d resized to %d,%d", event.window.windowID, event.window.data1, event.window.data2); break; -#if SDL_VERSION_ATLEAST(2, 0, 5) + case SDL_WINDOWEVENT_CLOSE: event.type = SDL_QUIT; break; case SDL_WINDOWEVENT_SHOWN: - case SDL_WINDOWEVENT_FOCUS_GAINED: + SDL_Log("Window %d has been shown", event.window.windowID); + if (editor()) { Device.b_is_Active = TRUE; - continue; + break; } OnWM_Activate(1, event.window.data2); - SDL_Log("Window %d is offered a focus", event.window.windowID); - continue; + break; case SDL_WINDOWEVENT_HIDDEN: - case SDL_WINDOWEVENT_FOCUS_LOST: OnWM_Activate(0, event.window.data2); - SDL_Log("Window %d is lost a focus", event.window.windowID); - continue; -#endif + SDL_Log("Window %d has been hidden", event.window.windowID); + break; default: SDL_Log("Window %d got unknown event %d with %d %d", event.window.windowID, event.window.event, event.window.data1, event.window.data2); - continue; + break; } - continue; - default: - SDL_Log("Window event %d to %d,%d", event.type, event.window.data1, event.window.data2); - continue; + break; + case SDL_QUIT: + SDL_DestroyWindow(m_sdlWnd); + SDL_Quit(); + break; + default: SDL_Log("Window event %d to %d,%d", event.type, event.window.data1, event.window.data2); break; } } on_idle(); } - - /* - while (true) - on_idle(); - */ } void CRenderDevice::Run()