From 6fd8dc86ada2c098b1988c0cbee84f4102095b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 22 Apr 2013 17:39:06 +0200 Subject: [PATCH] Platform: moved Sdl2Application event loop into separate function. Allowing it to be called perodically from some callback. --- src/Platform/Sdl2Application.cpp | 87 ++++++++++++++++---------------- src/Platform/Sdl2Application.h | 1 + 2 files changed, 45 insertions(+), 43 deletions(-) diff --git a/src/Platform/Sdl2Application.cpp b/src/Platform/Sdl2Application.cpp index 2470d6639..e57d1bb42 100644 --- a/src/Platform/Sdl2Application.cpp +++ b/src/Platform/Sdl2Application.cpp @@ -127,57 +127,58 @@ Sdl2Application::~Sdl2Application() { } int Sdl2Application::exec() { - while(!(flags & Flag::Exit)) { - SDL_Event event; - - while(SDL_PollEvent(&event)) { - switch(event.type) { - case SDL_WINDOWEVENT: - switch(event.window.event) { - case SDL_WINDOWEVENT_RESIZED: - viewportEvent({event.window.data1, event.window.data2}); - flags |= Flag::Redraw; - break; - case SDL_WINDOWEVENT_EXPOSED: - flags |= Flag::Redraw; - break; - } break; - - case SDL_KEYDOWN: - case SDL_KEYUP: { - KeyEvent e(static_cast(event.key.keysym.sym), fixedModifiers(event.key.keysym.mod)); - event.type == SDL_KEYDOWN ? keyPressEvent(e) : keyReleaseEvent(e); - } break; + while(!(flags & Flag::Exit)) mainLoop(); + return 0; +} - case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEBUTTONUP: { - MouseEvent e(static_cast(event.button.button), {event.button.x, event.button.y}); - event.type == SDL_MOUSEBUTTONDOWN ? mousePressEvent(e) : mouseReleaseEvent(e); +void Sdl2Application::mainLoop() { + SDL_Event event; + + while(SDL_PollEvent(&event)) { + switch(event.type) { + case SDL_WINDOWEVENT: + switch(event.window.event) { + case SDL_WINDOWEVENT_RESIZED: + viewportEvent({event.window.data1, event.window.data2}); + flags |= Flag::Redraw; + break; + case SDL_WINDOWEVENT_EXPOSED: + flags |= Flag::Redraw; + break; } break; - case SDL_MOUSEWHEEL: - if(event.wheel.y != 0) { - MouseEvent e(event.wheel.y < 0 ? MouseEvent::Button::WheelUp : MouseEvent::Button::WheelDown, {event.wheel.x, event.wheel.y}); - mousePressEvent(e); - } break; - - case SDL_MOUSEMOTION: { - MouseMoveEvent e({event.motion.x, event.motion.y}, {event.motion.xrel, event.motion.yrel}); - mouseMoveEvent(e); - break; - } + case SDL_KEYDOWN: + case SDL_KEYUP: { + KeyEvent e(static_cast(event.key.keysym.sym), fixedModifiers(event.key.keysym.mod)); + event.type == SDL_KEYDOWN ? keyPressEvent(e) : keyReleaseEvent(e); + } break; + + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: { + MouseEvent e(static_cast(event.button.button), {event.button.x, event.button.y}); + event.type == SDL_MOUSEBUTTONDOWN ? mousePressEvent(e) : mouseReleaseEvent(e); + } break; + + case SDL_MOUSEWHEEL: + if(event.wheel.y != 0) { + MouseEvent e(event.wheel.y < 0 ? MouseEvent::Button::WheelUp : MouseEvent::Button::WheelDown, {event.wheel.x, event.wheel.y}); + mousePressEvent(e); + } break; - case SDL_QUIT: return 0; + case SDL_MOUSEMOTION: { + MouseMoveEvent e({event.motion.x, event.motion.y}, {event.motion.xrel, event.motion.yrel}); + mouseMoveEvent(e); + break; } - } - if(flags & Flag::Redraw) { - flags &= ~Flag::Redraw; - drawEvent(); - } else Corrade::Utility::sleep(5); + case SDL_QUIT: return; + } } - return 0; + if(flags & Flag::Redraw) { + flags &= ~Flag::Redraw; + drawEvent(); + } else Corrade::Utility::sleep(5); } void Sdl2Application::setMouseLocked(bool enabled) { diff --git a/src/Platform/Sdl2Application.h b/src/Platform/Sdl2Application.h index 53a714e23..4ad702b69 100644 --- a/src/Platform/Sdl2Application.h +++ b/src/Platform/Sdl2Application.h @@ -174,6 +174,7 @@ class Sdl2Application { CORRADE_ENUMSET_FRIEND_OPERATORS(Flags) void initialize(); + void mainLoop(); SDL_Window* window; SDL_GLContext context;