diff --git a/src/CSFML/ConvertEvent.hpp b/src/CSFML/ConvertEvent.hpp index 15399254..159c2c79 100644 --- a/src/CSFML/ConvertEvent.hpp +++ b/src/CSFML/ConvertEvent.hpp @@ -31,36 +31,41 @@ #include +#include + //////////////////////////////////////////////////////////// -// Define a function to convert a sf::Event to a sfEvent +// Convert sf::Event to sfEvent //////////////////////////////////////////////////////////// -inline void convertEvent(const sf::Event& sfmlEvent, sfEvent* event) +[[nodiscard]] inline bool convertEvent(const std::optional& sfmlEvent, sfEvent* event) { - if (sfmlEvent.is()) + if (!sfmlEvent) + return false; + + if (sfmlEvent->is()) { event->type = sfEvtClosed; } - else if (const auto* resized = sfmlEvent.getIf()) + else if (const auto* resized = sfmlEvent->getIf()) { event->type = sfEvtResized; event->size.width = resized->size.x; event->size.height = resized->size.y; } - else if (sfmlEvent.is()) + else if (sfmlEvent->is()) { event->type = sfEvtFocusLost; } - else if (sfmlEvent.is()) + else if (sfmlEvent->is()) { event->type = sfEvtFocusGained; } - else if (const auto* textEntered = sfmlEvent.getIf()) + else if (const auto* textEntered = sfmlEvent->getIf()) { event->type = sfEvtTextEntered; event->text.unicode = textEntered->unicode; } - else if (const auto* keyReleased = sfmlEvent.getIf()) + else if (const auto* keyReleased = sfmlEvent->getIf()) { event->type = sfEvtKeyReleased; event->key.code = static_cast(keyReleased->code); @@ -70,7 +75,7 @@ inline void convertEvent(const sf::Event& sfmlEvent, sfEvent* event) event->key.shift = keyReleased->shift; event->key.system = keyReleased->system; } - else if (const auto* keyPressed = sfmlEvent.getIf()) + else if (const auto* keyPressed = sfmlEvent->getIf()) { event->type = sfEvtKeyPressed; event->key.code = static_cast(keyPressed->code); @@ -80,7 +85,7 @@ inline void convertEvent(const sf::Event& sfmlEvent, sfEvent* event) event->key.shift = keyPressed->shift; event->key.system = keyPressed->system; } - else if (const auto* mouseWheelScrolled = sfmlEvent.getIf()) + else if (const auto* mouseWheelScrolled = sfmlEvent->getIf()) { event->type = sfEvtMouseWheelScrolled; event->mouseWheelScroll.wheel = static_cast(mouseWheelScrolled->wheel); @@ -88,85 +93,85 @@ inline void convertEvent(const sf::Event& sfmlEvent, sfEvent* event) event->mouseWheelScroll.x = mouseWheelScrolled->position.x; event->mouseWheelScroll.y = mouseWheelScrolled->position.y; } - else if (const auto* mouseButtonPressed = sfmlEvent.getIf()) + else if (const auto* mouseButtonPressed = sfmlEvent->getIf()) { event->type = sfEvtMouseButtonPressed; event->mouseButton.button = static_cast(mouseButtonPressed->button); event->mouseButton.x = mouseButtonPressed->position.x; event->mouseButton.y = mouseButtonPressed->position.y; } - else if (const auto* mouseButtonReleased = sfmlEvent.getIf()) + else if (const auto* mouseButtonReleased = sfmlEvent->getIf()) { event->type = sfEvtMouseButtonReleased; event->mouseButton.button = static_cast(mouseButtonReleased->button); event->mouseButton.x = mouseButtonReleased->position.x; event->mouseButton.y = mouseButtonReleased->position.y; } - else if (const auto* mouseMoved = sfmlEvent.getIf()) + else if (const auto* mouseMoved = sfmlEvent->getIf()) { event->type = sfEvtMouseMoved; event->mouseMove.x = mouseMoved->position.x; event->mouseMove.y = mouseMoved->position.y; } - else if (sfmlEvent.is()) + else if (sfmlEvent->is()) { event->type = sfEvtMouseEntered; } - else if (sfmlEvent.is()) + else if (sfmlEvent->is()) { event->type = sfEvtMouseLeft; } - else if (const auto* joystickButtonPressed = sfmlEvent.getIf()) + else if (const auto* joystickButtonPressed = sfmlEvent->getIf()) { event->type = sfEvtJoystickButtonPressed; event->joystickButton.joystickId = joystickButtonPressed->joystickId; event->joystickButton.button = joystickButtonPressed->button; } - else if (const auto* joystickButtonReleased = sfmlEvent.getIf()) + else if (const auto* joystickButtonReleased = sfmlEvent->getIf()) { event->type = sfEvtJoystickButtonReleased; event->joystickButton.joystickId = joystickButtonReleased->joystickId; event->joystickButton.button = joystickButtonReleased->button; } - else if (const auto* joystickMoved = sfmlEvent.getIf()) + else if (const auto* joystickMoved = sfmlEvent->getIf()) { event->type = sfEvtJoystickMoved; event->joystickMove.joystickId = joystickMoved->joystickId; event->joystickMove.axis = static_cast(joystickMoved->axis); event->joystickMove.position = joystickMoved->position; } - else if (const auto* joystickConnected = sfmlEvent.getIf()) + else if (const auto* joystickConnected = sfmlEvent->getIf()) { event->type = sfEvtJoystickConnected; event->joystickConnect.joystickId = joystickConnected->joystickId; } - else if (const auto* joystickDisconnected = sfmlEvent.getIf()) + else if (const auto* joystickDisconnected = sfmlEvent->getIf()) { event->type = sfEvtJoystickDisconnected; event->joystickConnect.joystickId = joystickDisconnected->joystickId; } - else if (const auto* touchBegan = sfmlEvent.getIf()) + else if (const auto* touchBegan = sfmlEvent->getIf()) { event->type = sfEvtTouchBegan; event->touch.finger = touchBegan->finger; event->touch.x = touchBegan->position.x; event->touch.y = touchBegan->position.y; } - else if (const auto* touchMoved = sfmlEvent.getIf()) + else if (const auto* touchMoved = sfmlEvent->getIf()) { event->type = sfEvtTouchMoved; event->touch.finger = touchMoved->finger; event->touch.x = touchMoved->position.x; event->touch.y = touchMoved->position.y; } - else if (const auto* touchEnded = sfmlEvent.getIf()) + else if (const auto* touchEnded = sfmlEvent->getIf()) { event->type = sfEvtTouchEnded; event->touch.finger = touchEnded->finger; event->touch.x = touchEnded->position.x; event->touch.y = touchEnded->position.y; } - else if (const auto* sensorChanged = sfmlEvent.getIf()) + else if (const auto* sensorChanged = sfmlEvent->getIf()) { event->type = sfEvtSensorChanged; event->sensor.sensorType = static_cast(sensorChanged->type); @@ -174,4 +179,6 @@ inline void convertEvent(const sf::Event& sfmlEvent, sfEvent* event) event->sensor.y = sensorChanged->value.y; event->sensor.z = sensorChanged->value.z; } + + return true; } diff --git a/src/CSFML/Graphics/RenderWindow.cpp b/src/CSFML/Graphics/RenderWindow.cpp index ab7e5f54..cf15102b 100644 --- a/src/CSFML/Graphics/RenderWindow.cpp +++ b/src/CSFML/Graphics/RenderWindow.cpp @@ -144,18 +144,7 @@ bool sfRenderWindow_pollEvent(sfRenderWindow* renderWindow, sfEvent* event) { assert(renderWindow); assert(event); - - // Get the event - const std::optional sfmlEvent = renderWindow->This.pollEvent(); - - // No event, return - if (!sfmlEvent) - return false; - - // Convert the sf::Event event to a sfEvent - convertEvent(*sfmlEvent, event); - - return true; + return convertEvent(renderWindow->This.pollEvent(), event); } @@ -164,18 +153,7 @@ bool sfRenderWindow_waitEvent(sfRenderWindow* renderWindow, sfEvent* event) { assert(renderWindow); assert(event); - - // Get the event - const std::optional sfmlEvent = renderWindow->This.waitEvent(); - - // Error, return - if (!sfmlEvent) - return false; - - // Convert the sf::Event event to a sfEvent - convertEvent(*sfmlEvent, event); - - return true; + return convertEvent(renderWindow->This.waitEvent(), event); } diff --git a/src/CSFML/Window/Window.cpp b/src/CSFML/Window/Window.cpp index 2089fbbf..f0d61ed7 100644 --- a/src/CSFML/Window/Window.cpp +++ b/src/CSFML/Window/Window.cpp @@ -118,18 +118,7 @@ bool sfWindow_pollEvent(sfWindow* window, sfEvent* event) { assert(window); assert(event); - - // Get the event - const std::optional sfmlEvent = window->This.pollEvent(); - - // No event, return - if (!sfmlEvent) - return false; - - // Convert the sf::Event event to a sfEvent - convertEvent(*sfmlEvent, event); - - return true; + return convertEvent(window->This.pollEvent(), event); } @@ -138,18 +127,7 @@ bool sfWindow_waitEvent(sfWindow* window, sfEvent* event) { assert(window); assert(event); - - // Get the event - const std::optional sfmlEvent = window->This.waitEvent(); - - // Error, return - if (!sfmlEvent) - return false; - - // Convert the sf::Event event to a sfEvent - convertEvent(*sfmlEvent, event); - - return true; + return convertEvent(window->This.waitEvent(), event); } diff --git a/src/CSFML/Window/WindowBase.cpp b/src/CSFML/Window/WindowBase.cpp index 861e6d19..86dca49f 100644 --- a/src/CSFML/Window/WindowBase.cpp +++ b/src/CSFML/Window/WindowBase.cpp @@ -96,18 +96,7 @@ bool sfWindowBase_pollEvent(sfWindowBase* windowBase, sfEvent* event) { assert(windowBase); assert(event); - - // Get the event - const std::optional sfmlEvent = windowBase->This.pollEvent(); - - // No event, return - if (!sfmlEvent) - return false; - - // Convert the sf::Event event to a sfEvent - convertEvent(*sfmlEvent, event); - - return true; + return convertEvent(windowBase->This.pollEvent(), event); } @@ -116,18 +105,7 @@ bool sfWindowBase_waitEvent(sfWindowBase* windowBase, sfEvent* event) { assert(windowBase); assert(event); - - // Get the event - const std::optional sfmlEvent = windowBase->This.waitEvent(); - - // Error, return - if (!sfmlEvent) - return false; - - // Convert the sf::Event event to a sfEvent - convertEvent(*sfmlEvent, event); - - return true; + return convertEvent(windowBase->This.waitEvent(), event); }