window events flowww

This commit is contained in:
Ben
2021-08-19 16:47:49 +01:00
parent 83cf85c4c2
commit bf89265947
5 changed files with 86 additions and 56 deletions

View File

@@ -1,5 +1,7 @@
#include "Aeon/Aeon.hpp"
#include <iostream>
using Aeon::Core::App;
using Aeon::Core::Display;
using Aeon::Core::DisplayProperties;
@@ -10,7 +12,7 @@ App::App( const DisplayProperties& props )
: mDisplay()
, mInput()
{
RegisterAsSink( "ENGINE_SYSTEM_CORE", 0 );
RegisterAsSink( "ENGINE_DISPLAY_CORE", 0 );
mDisplay.Create( props );
@@ -31,5 +33,7 @@ const Display& App::GetDisplay()
bool App::EventRecieved( GenericEvent& e )
{
std::cout << e.Type << std::endl;
return false;
}

View File

@@ -65,10 +65,10 @@ void EventDispatcher::Dispatch( GenericEvent e )
EventManager::GetInstance().Dispatch( mDispatcherID, e );
}
void EventDispatcher::Dispatch( std::string data )
void EventDispatcher::Dispatch( std::string type )
{
GenericEvent e;
e.Data = data;
e.Type = type;
EventManager::GetInstance().Dispatch( mDispatcherID, e );
}

View File

@@ -45,12 +45,14 @@ struct GenericEvent
{
std::string System;
std::string Type;
// can be empty
// the rest can be empty
std::string Data;
bool Handled = false;
// DISPLAY_RESIZE DISPLAY_MOVE
int x, y;
GenericEvent() { }
bool Handled = false;
};
class EventListener
@@ -84,7 +86,8 @@ public:
void DeRegisterAsSource( std::string system );
void Dispatch( GenericEvent e );
void Dispatch( std::string data );
// no data needed
void Dispatch( std::string type );
private:
int mDispatcherID = -1;

View File

@@ -8,8 +8,11 @@ using Aeon::Input::Input;
Input::Input()
: mEvent()
, mDisplayEventDispatcher()
, mKeyboardEventDispatcher()
, mMouseEventDispatcher()
{
mDisplayEventDispatcher.RegisterAsSource( "ENGINE_DISPLAY_CORE" );
}
Input::~Input()
@@ -24,57 +27,74 @@ void Input::PollInput()
switch ( mEvent.type )
{
case SDL_WINDOWEVENT:
{
switch ( mEvent.window.event )
{
case SDL_WINDOWEVENT_SHOWN:
SDL_Log( "Window %d shown", mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_HIDDEN:
SDL_Log( "Window %d hidden", mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_MOVED:
SDL_Log( "Window %d moved to %d,%d",
mEvent.window.windowID, mEvent.window.data1,
mEvent.window.data2 );
break;
case SDL_WINDOWEVENT_RESIZED:
SDL_Log( "Window %d resized to %dx%d",
mEvent.window.windowID, mEvent.window.data1,
mEvent.window.data2 );
break;
case SDL_WINDOWEVENT_SIZE_CHANGED:
SDL_Log( "Window %d size changed to %dx%d",
mEvent.window.windowID, mEvent.window.data1,
mEvent.window.data2 );
break;
case SDL_WINDOWEVENT_MINIMIZED:
SDL_Log( "Window %d minimized", mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_MAXIMIZED:
SDL_Log( "Window %d maximized", mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_RESTORED:
SDL_Log( "Window %d restored", mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_ENTER:
SDL_Log( "Mouse entered window %d",
mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_LEAVE:
SDL_Log( "Mouse left window %d", mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
SDL_Log( "Window %d gained keyboard focus",
mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_FOCUS_LOST:
SDL_Log( "Window %d lost keyboard focus",
mEvent.window.windowID );
break;
case SDL_WINDOWEVENT_CLOSE:
SDL_Log( "Window %d closed", mEvent.window.windowID );
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_SHOW" );
break;
}
case SDL_WINDOWEVENT_HIDDEN:
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_HIDE" );
break;
}
case SDL_WINDOWEVENT_MOVED:
{
Aeon::Core::GenericEvent e;
e.x = mEvent.window.data1;
e.y = mEvent.window.data2;
e.Type = "DISPLAY_MOVE";
mDisplayEventDispatcher.Dispatch( e );
break;
}
case SDL_WINDOWEVENT_RESIZED:
{
Aeon::Core::GenericEvent e;
e.x = mEvent.window.data1;
e.y = mEvent.window.data2;
e.Type = "DISPLAY_RESIZE";
mDisplayEventDispatcher.Dispatch( e );
break;
}
case SDL_WINDOWEVENT_MINIMIZED:
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_MINIMISED" );
break;
}
case SDL_WINDOWEVENT_MAXIMIZED:
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_MAXIMISED" );
break;
}
case SDL_WINDOWEVENT_ENTER:
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_MOUSE_ENTER" );
break;
}
case SDL_WINDOWEVENT_LEAVE:
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_MOUSE_LEAVE" );
break;
}
case SDL_WINDOWEVENT_FOCUS_GAINED:
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_FOCUS" );
break;
}
case SDL_WINDOWEVENT_FOCUS_LOST:
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_OUT_OF_FOCUS" );
break;
}
case SDL_WINDOWEVENT_CLOSE:
{
mDisplayEventDispatcher.Dispatch( "DISPLAY_CLOSED" );
break;
}
}
}
}
}

View File

@@ -4,11 +4,10 @@
#include <SDL.h>
#include "Aeon/Singleton.hpp"
#include "Aeon/Core/Events.hpp"
namespace Aeon::Input {
class Input
{
public:
@@ -18,6 +17,10 @@ public:
void PollInput();
private:
SDL_Event mEvent;
Aeon::Core::EventDispatcher mDisplayEventDispatcher;
Aeon::Core::EventDispatcher mKeyboardEventDispatcher;
Aeon::Core::EventDispatcher mMouseEventDispatcher;
};
}