From 6fb05f77ab9ee9f30fd2431748480f0ba5780945 Mon Sep 17 00:00:00 2001 From: OmniaX-Dev Date: Fri, 15 May 2026 08:29:56 +0200 Subject: [PATCH] Bug fixes --- other/build.nr | 2 +- src/ogfx/gui/Window.hpp | 2 +- src/ogfx/gui/WindowOutputHandler.cpp | 1 + src/ogfx/render/BasicRenderer.cpp | 2 + src/ostd/data/Types.hpp | 1 + src/ostd/ostd.hpp | 8 ---- src/ostd/utils/Signals.cpp | 26 ++++-------- src/ostd/utils/Signals.hpp | 60 ++++++++++++++++++---------- src/test/GuiTest.cpp | 1 - 9 files changed, 54 insertions(+), 49 deletions(-) diff --git a/other/build.nr b/other/build.nr index a9c7a68..cf7d7d1 100644 --- a/other/build.nr +++ b/other/build.nr @@ -1 +1 @@ -2078 +2087 diff --git a/src/ogfx/gui/Window.hpp b/src/ogfx/gui/Window.hpp index 48d9459..0f43edc 100644 --- a/src/ogfx/gui/Window.hpp +++ b/src/ogfx/gui/Window.hpp @@ -173,6 +173,7 @@ namespace ogfx ostd::ConsoleOutputHandler m_out; GraphicsWindowOutputHandler m_wout; const ostd::Stylesheet* m_guiTheme { nullptr }; + bool m_refreshScreen { true }; private: Color m_clearColor { 10, 10, 10, 255 }; @@ -190,7 +191,6 @@ namespace ogfx bool m_visible { true }; bool m_blockingEvents { false }; bool m_resizeable { true }; - bool m_refreshScreen { true }; bool m_invertHorizontalScroll { true }; f32 m_systemScale { 1.0f }; diff --git a/src/ogfx/gui/WindowOutputHandler.cpp b/src/ogfx/gui/WindowOutputHandler.cpp index 2ac4767..638f0ab 100644 --- a/src/ogfx/gui/WindowOutputHandler.cpp +++ b/src/ogfx/gui/WindowOutputHandler.cpp @@ -36,6 +36,7 @@ namespace ogfx if (m_window != nullptr) return; m_window = &window; m_renderer.init(window); + m_renderer.loadDefaultMonoFont(18); } void GraphicsWindowOutputHandler::setMonospaceFont(const String& filePath) diff --git a/src/ogfx/render/BasicRenderer.cpp b/src/ogfx/render/BasicRenderer.cpp index ee49f15..c74a79a 100644 --- a/src/ogfx/render/BasicRenderer.cpp +++ b/src/ogfx/render/BasicRenderer.cpp @@ -166,7 +166,9 @@ namespace ogfx { if (!m_initialized || !m_fontOpen) return; if (m_font != nullptr) + { TTF_CloseFont(m_font); + } m_font = nullptr; m_fontOpen = false; m_fontSize = DefaultFontSize; diff --git a/src/ostd/data/Types.hpp b/src/ostd/data/Types.hpp index 32c6c2b..519029f 100755 --- a/src/ostd/data/Types.hpp +++ b/src/ostd/data/Types.hpp @@ -24,6 +24,7 @@ #include #include #include +#include #include typedef int8_t i8; diff --git a/src/ostd/ostd.hpp b/src/ostd/ostd.hpp index 6a937b2..14c5770 100644 --- a/src/ostd/ostd.hpp +++ b/src/ostd/ostd.hpp @@ -46,11 +46,3 @@ #include #include - -namespace ostd -{ - inline void initialize(void) - { - ostd::SignalHandler::init(true); - } -} diff --git a/src/ostd/utils/Signals.cpp b/src/ostd/utils/Signals.cpp index 4f080ab..84b24b6 100755 --- a/src/ostd/utils/Signals.cpp +++ b/src/ostd/utils/Signals.cpp @@ -4,34 +4,24 @@ namespace ostd { - void SignalHandler::init(bool allow_reinit) - { - if (m_initialized && !allow_reinit) return; - m_recievers.clear(); - m_recievers.reserve(__SIGNAL_BUFFER_START_SIZE); - m_DelegateRecievers.clear(); - m_DelegateRecievers.reserve(__DELEGATE_SIGNALS_BUFFER_START_SIZE); - m_initialized = true; - } - void SignalHandler::handleDelegateSignals(void) { - for (auto& delegate : m_DelegateRecievers) + for (auto& delegate : delegateReceivers()) emitSignal(delegate.id, Signal::Priority::RealTime, delegate.ud); - m_DelegateRecievers.clear(); + delegateReceivers().clear(); } void SignalHandler::emitSignal(u32 signal_id, u8 prio, BaseObject& userData) { if (prio == Signal::Priority::Normal) { - SignalHandler::m_DelegateRecievers.push_back({ signal_id, userData }); + SignalHandler::delegateReceivers().push_back({ signal_id, userData }); return; } Signal signal { signal_id, userData, prio }; - if (m_recievers.count(signal_id) < 1) + if (receivers().count(signal_id) < 1) return; - for (auto& obj : m_recievers[signal_id]) + for (auto& obj : receivers()[signal_id]) { obj->__handle_signal(signal); if (signal.handled) return; @@ -40,13 +30,13 @@ namespace ostd void SignalHandler::connect(BaseObject& object, u32 signal_id) { - m_recievers[signal_id].push_back(&object); + receivers()[signal_id].push_back(&object); } void SignalHandler::disconnect(BaseObject& object, u32 signal_id) { - auto it = m_recievers.find(signal_id); - if (it == m_recievers.end()) + auto it = receivers().find(signal_id); + if (it == receivers().end()) return; STDVEC_REMOVE(it->second, &object); } diff --git a/src/ostd/utils/Signals.hpp b/src/ostd/utils/Signals.hpp index 7c599d7..f2ac021 100755 --- a/src/ostd/utils/Signals.hpp +++ b/src/ostd/utils/Signals.hpp @@ -29,31 +29,31 @@ namespace ostd { struct BuiltinSignals { - inline static constexpr u32 NoSignal = 0x0000; + inline static constexpr u32 NoSignal = 0x0000; /** Builtin Signals **/ - inline static constexpr u32 KeyPressed = 0x0001; - inline static constexpr u32 KeyReleased = 0x0002; - inline static constexpr u32 MousePressed = 0x0003; - inline static constexpr u32 MouseReleased = 0x0004; - inline static constexpr u32 MouseMoved = 0x0005; - inline static constexpr u32 MouseDragged = 0x0006; - inline static constexpr u32 TextEntered = 0x0007; - inline static constexpr u32 MouseScrolled = 0x0008; + inline static constexpr u32 KeyPressed = 0x0001; + inline static constexpr u32 KeyReleased = 0x0002; + inline static constexpr u32 MousePressed = 0x0003; + inline static constexpr u32 MouseReleased = 0x0004; + inline static constexpr u32 MouseMoved = 0x0005; + inline static constexpr u32 MouseDragged = 0x0006; + inline static constexpr u32 TextEntered = 0x0007; + inline static constexpr u32 MouseScrolled = 0x0008; - inline static constexpr u32 OnGuiEvent = 0x2001; - inline static constexpr u32 FileDragAndDropped = 0x2002; - inline static constexpr u32 TextDragAndDropped = 0x2003; + inline static constexpr u32 OnGuiEvent = 0x2001; + inline static constexpr u32 FileDragAndDropped = 0x2002; + inline static constexpr u32 TextDragAndDropped = 0x2003; - inline static constexpr u32 BeforeSDLShutdown = 0x3001; + inline static constexpr u32 BeforeSDLShutdown = 0x3001; - inline static constexpr u32 WindowResized = 0x1001; - inline static constexpr u32 WindowClosed = 0x1002; - inline static constexpr u32 WindowFocused = 0x1003; - inline static constexpr u32 WindowLostFocus = 0x1004; + inline static constexpr u32 WindowResized = 0x1001; + inline static constexpr u32 WindowClosed = 0x1002; + inline static constexpr u32 WindowFocused = 0x1003; + inline static constexpr u32 WindowLostFocus = 0x1004; /*********************/ - inline static constexpr u32 CustomSignalBase = 0xFF0000; + inline static constexpr u32 CustomSignalBase = 0xFF0000; }; struct Signal @@ -80,16 +80,36 @@ namespace ostd inline DelegateSignal(u32 _id, BaseObject& _ud) : id(_id), ud(_ud) { } }; public: - static void init(bool allow_reinit = false); static void handleDelegateSignals(void); static void emitSignal(u32 signal_id, u8 prio = Signal::Priority::RealTime, BaseObject& userData = BaseObject::InvalidRef()); static void connect(BaseObject& object, u32 signal_id); static void disconnect(BaseObject& object, u32 signal_id); inline static u32 newCustomSignal(u32 sub_id) { return BuiltinSignals::CustomSignalBase + sub_id; } + private: + inline static stdumap>& receivers(void) + { + static stdumap> m = [] { + stdumap> map; + map.reserve(__SIGNAL_BUFFER_START_SIZE); + return map; + }(); + return m; + } + + inline static stdvec& delegateReceivers(void) + { + static stdvec v = [] { + stdvec vec; + vec.reserve(__DELEGATE_SIGNALS_BUFFER_START_SIZE); + return vec; + }(); + return v; + } + private: inline static stdumap> m_recievers; - inline static stdvec m_DelegateRecievers; + inline static stdvec m_delegateRecievers; inline static constexpr u16 __SIGNAL_BUFFER_START_SIZE { 2048 }; inline static constexpr u16 __DELEGATE_SIGNALS_BUFFER_START_SIZE { 2048 }; inline static bool m_initialized { false }; diff --git a/src/test/GuiTest.cpp b/src/test/GuiTest.cpp index 3b7d384..dab3ed9 100644 --- a/src/test/GuiTest.cpp +++ b/src/test/GuiTest.cpp @@ -516,7 +516,6 @@ class TestWindow : public Window i32 main(i32 argc, char** argv) { ostd::Random::autoSeed(); - ostd::initialize(); TestWindow window; window.initialize(1200, 900, "OmniaFramework - Test Window"); window.setClearColor({ 0, 0, 0 });