1
0
Fork 0

System/MessageHandler: Make this class useful by implementing EventListener and also add a vector of listeners with register/unregister methods.

This commit is contained in:
Henrik Hautakoski 2020-01-30 23:54:43 +01:00
parent cd32d0b7c2
commit a30fd37032
No known key found for this signature in database
GPG key ID: 96765B12FEAC4745
2 changed files with 47 additions and 4 deletions

View file

@ -2,16 +2,25 @@
#ifndef SPECTRE_SYSTEM_MESSAGEHANDLER_H
#define SPECTRE_SYSTEM_MESSAGEHANDLER_H
#include <Spectre/System/Event.h>
#include <vector>
#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<EventListener*> m_listeners;
};
} // namespace sp

View file

@ -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