diff --git a/include/Spectre/System/MessageHandler.h b/include/Spectre/System/MessageHandler.h index 9b593f3..4ca39bc 100644 --- a/include/Spectre/System/MessageHandler.h +++ b/include/Spectre/System/MessageHandler.h @@ -2,16 +2,25 @@ #ifndef SPECTRE_SYSTEM_MESSAGEHANDLER_H #define SPECTRE_SYSTEM_MESSAGEHANDLER_H -#include +#include +#include "EventListener.h" namespace sp { -class Display; - -class MessageHandler +class MessageHandler : public EventListener { public : + + void registerListener(EventListener *listener); + + void unregisterListener(EventListener *listener); + virtual void onSizeChanged(Display* display, int width, int height); + + virtual void onEvent(const Event& event); + +protected : + std::vector m_listeners; }; } // namespace sp diff --git a/source/System/MessageHandler.cpp b/source/System/MessageHandler.cpp index 6965904..f0eb45f 100644 --- a/source/System/MessageHandler.cpp +++ b/source/System/MessageHandler.cpp @@ -4,8 +4,42 @@ namespace sp { +void MessageHandler::registerListener(EventListener *listener) +{ + for(auto it = m_listeners.begin(); it != m_listeners.end(); it++) { + + if (listener == *it) { + // Already in vector. nothing to do. + return; + } + } + + m_listeners.push_back(listener); +} + +void MessageHandler::unregisterListener(EventListener *listener) +{ + for(auto it = m_listeners.begin(); it != m_listeners.end(); it++) { + + if (listener == *it) { + m_listeners.erase(it); + break; + } + } +} + void MessageHandler::onSizeChanged(Display* display, int width, int height) { + for(EventListener* listener : m_listeners) { + listener->onSizeChanged(display, width, height); + } +} + +void MessageHandler::onEvent(const Event& event) +{ + for(EventListener* listener : m_listeners) { + listener->onEvent(event); + } } } // namespace sp