1
0
Fork 0

Merge branch 'maint-platform' into dev

This commit is contained in:
Henrik Hautakoski 2020-09-24 17:17:12 +02:00
commit f86a1ae90c
45 changed files with 1091 additions and 1001 deletions

56
source/System/Event.cpp Normal file
View file

@ -0,0 +1,56 @@
#include <Spectre/System/Event.h>
namespace sp {
Event::Event(Type type) :
type (type)
{
}
std::string Event::KeyEvent::getKeyName() const
{
return Keyboard::getKeyName(code);
}
std::string Event::MouseButtonEvent::getName() const
{
return Mouse::getButtonName(button);
}
// Helper methods
Event Event::createSize(Display *display, int width, int height)
{
Event event(Size);
event.size.display = display;
event.size.width = width;
event.size.height = height;
return event;
}
Event Event::createKey(Keyboard::Key code, bool pressed)
{
Event event(Key);
event.key.code = code;
event.key.pressed = pressed;
return event;
}
Event Event::createMouseButton(Mouse::Button button, bool pressed)
{
Event event(MouseButton);
event.mouseButton.button = button;
event.mouseButton.pressed = pressed;
return event;
}
Event Event::createMouseMove(unsigned int x, unsigned int y)
{
Event event(MouseMove);
event.mouseMove.x = x;
event.mouseMove.y = y;
return event;
}
} // namespace sp

View file

@ -0,0 +1,14 @@
#include <Spectre/Display/Display.h>
#include <Spectre/System/EventListener.h>
namespace sp {
void EventListener::onSizeChanged(Display* display, int width, int height)
{
}
void EventListener::onEvent(const Event& event)
{
}
} // 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

View file

@ -1,15 +1,38 @@
#include <Spectre/System/MessageQueue.h>
#ifdef _WIN32
#include <Platform/Win32/Win32EventQueue.h>
typedef sp::Win32EventQueue ImplType;
#else
#error "No MessageQueue implementation exists"
#endif
namespace sp {
void MessageQueue::postEvent(SysEvent event)
MessageQueue::MessageQueue()
{
m_impl = new ImplType();
}
MessageQueue::~MessageQueue()
{
delete m_impl;
}
void MessageQueue::postEvent(Event event)
{
m_queue.push_back(event);
}
bool MessageQueue::pollEvent(SysEvent& event)
bool MessageQueue::pollEvent(Event& event)
{
// Process platform events first.
if (m_impl->poll(event)) {
return true;
}
if (!isEmpty()) {
event = m_queue.front();
m_queue.pop_front();

View file

@ -1,20 +0,0 @@
#include <Spectre/System/SystemEvent.h>
namespace sp {
SysEvent::SysEvent(Type type) :
type (type)
{
}
SysEvent SysEvent::sizeEvent(Display *display, int width, int height)
{
SysEvent event(Size);
event.size.display = display;
event.size.width = width;
event.size.height = height;
return event;
}
} // namespace sp